From 0187d3012b203400297fb452e8e9d6a923a4a703 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Fri, 9 Jun 2023 21:20:12 +0100 Subject: [PATCH 01/55] Add non-e2ee option for getSecret, getSecrets, start createSecret --- .../src/controllers/v3/secretsController.ts | 14 +- backend/src/helpers/bot.ts | 20 ++- backend/src/helpers/secrets.ts | 152 +++++++++++++++++- .../interfaces/services/BotService/index.ts | 0 .../services/SecretService/index.ts | 14 +- backend/src/routes/v3/secrets.ts | 14 +- backend/src/services/BotService.ts | 20 ++- backend/src/services/SecretService.ts | 3 - 8 files changed, 202 insertions(+), 35 deletions(-) create mode 100644 backend/src/interfaces/services/BotService/index.ts diff --git a/backend/src/controllers/v3/secretsController.ts b/backend/src/controllers/v3/secretsController.ts index dac41b53d..321ab41d2 100644 --- a/backend/src/controllers/v3/secretsController.ts +++ b/backend/src/controllers/v3/secretsController.ts @@ -6,8 +6,6 @@ import { EventService } from '../../services'; import { eventPushSecrets } from '../../events'; -import { getAuthDataPayloadIdObj } from '../../utils/auth'; -import { BadRequestError } from '../../utils/errors'; /** * Get secrets for workspace with id [workspaceId] and environment @@ -68,9 +66,11 @@ export const createSecret = async (req: Request, res: Response) => { secretKeyCiphertext, secretKeyIV, secretKeyTag, + secretValue, secretValueCiphertext, secretValueIV, secretValueTag, + secretComment, secretCommentCiphertext, secretCommentIV, secretCommentTag @@ -85,14 +85,14 @@ export const createSecret = async (req: Request, res: Response) => { secretKeyCiphertext, secretKeyIV, secretKeyTag, + secretValue, secretValueCiphertext, secretValueIV, secretValueTag, - ...((secretCommentCiphertext && secretCommentIV && secretCommentTag) ? { - secretCommentCiphertext, - secretCommentIV, - secretCommentTag - } : {}) + secretComment, + secretCommentCiphertext, + secretCommentIV, + secretCommentTag }); await EventService.handleEvent({ diff --git a/backend/src/helpers/bot.ts b/backend/src/helpers/bot.ts index e93ab6a8b..439f7c531 100644 --- a/backend/src/helpers/bot.ts +++ b/backend/src/helpers/bot.ts @@ -86,6 +86,18 @@ export const createBot = async ({ }); }; +/** + * Return whether or not workspace with id [workspaceId] is end-to-end encrypted + * @param {Types.ObjectId} workspaceId - id of workspace to check + */ +export const getIsWorkspaceE2EEHelper = async (workspaceId: Types.ObjectId) => { + const botKey = await BotKey.exists({ + workspace: workspaceId + }); + + return botKey ? false : true; +} + /** * Return decrypted secrets for workspace with id [workspaceId] * and [environment] using bot @@ -101,7 +113,7 @@ export const getSecretsBotHelper = async ({ environment: string; }) => { const content = {} as any; - const key = await getKey({ workspaceId: workspaceId.toString() }); + const key = await getKey({ workspaceId: workspaceId }); const secrets = await Secret.find({ workspace: workspaceId, environment, @@ -136,7 +148,7 @@ export const getSecretsBotHelper = async ({ * @param {String} obj.workspaceId - id of workspace * @returns {String} key - decrypted workspace key */ -export const getKey = async ({ workspaceId }: { workspaceId: string }) => { +export const getKey = async ({ workspaceId }: { workspaceId: Types.ObjectId }) => { const encryptionKey = await getEncryptionKey(); const rootEncryptionKey = await getRootEncryptionKey(); @@ -201,7 +213,7 @@ export const encryptSymmetricHelper = async ({ workspaceId: Types.ObjectId; plaintext: string; }) => { - const key = await getKey({ workspaceId: workspaceId.toString() }); + const key = await getKey({ workspaceId: workspaceId }); const { ciphertext, iv, tag } = encryptSymmetric128BitHexKeyUTF8({ plaintext, key, @@ -233,7 +245,7 @@ export const decryptSymmetricHelper = async ({ iv: string; tag: string; }) => { - const key = await getKey({ workspaceId: workspaceId.toString() }); + const key = await getKey({ workspaceId: workspaceId }); const plaintext = decryptSymmetric128BitHexKeyUTF8({ ciphertext, iv, diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index 1c58119b1..baa8d292e 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -6,7 +6,12 @@ import { UpdateSecretParams, DeleteSecretParams, } from '../interfaces/services/SecretService'; -import { Secret, ISecret, SecretBlindIndexData } from '../models'; +import { + ISecret, + Secret, + SecretBlindIndexData, + BotKey +} from '../models'; import { SecretVersion } from '../ee/models'; import { BadRequestError, @@ -32,7 +37,7 @@ import { decryptSymmetric128BitHexKeyUTF8, } from '../utils/crypto'; import { getEncryptionKey, client, getRootEncryptionKey } from '../config'; -import { TelemetryService } from '../services'; +import { BotService, TelemetryService } from '../services'; import { EESecretService, EELogService } from '../ee/services'; import { getAuthDataPayloadIdObj, @@ -237,6 +242,23 @@ export const generateSecretBlindIndexHelper = async ({ }); }; +// secretName, +// workspaceId, +// environment, +// type, +// authData, +// secretKeyCiphertext, +// secretKeyIV, +// secretKeyTag, +// secretValue, +// secretValueCiphertext, +// secretValueIV, +// secretValueTag, +// secretCommentCiphertext, +// secretCommentIV, +// secretCommentTag, +// folderId, + /** * Create secret with name [secretName] * @param {Object} obj @@ -256,14 +278,17 @@ export const createSecretHelper = async ({ secretKeyCiphertext, secretKeyIV, secretKeyTag, + secretValue, secretValueCiphertext, secretValueIV, secretValueTag, + secretComment, secretCommentCiphertext, secretCommentIV, secretCommentTag, folderId, }: CreateSecretParams) => { + const secretBlindIndex = await generateSecretBlindIndexHelper({ secretName, workspaceId: new Types.ObjectId(workspaceId), @@ -298,6 +323,52 @@ export const createSecretHelper = async ({ }); } + // can generate secretKeyCiphertext etc. if not E2EE. + const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); + + if (!isWorkspaceE2EE) { + // if workspace is not end-to-end encrypted, then decrypt + // secret and return it in plaintext + + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId + }); + + if (secretName) { + const encryptedSecretKey = encryptSymmetric128BitHexKeyUTF8({ + plaintext: secretName, + key + }); + + secretKeyCiphertext = encryptedSecretKey.ciphertext; + secretKeyIV = encryptedSecretKey.iv; + secretKeyTag = encryptedSecretKey.tag; + } + + if (secretValue) { + const encryptedSecretValue = encryptSymmetric128BitHexKeyUTF8({ + plaintext: secretValue, + key + }); + + secretValueCiphertext = encryptedSecretValue.ciphertext; + secretValueIV = encryptedSecretValue.iv; + secretValueTag = encryptedSecretValue.tag; + } + + if (secretComment) { + const encryptedSecretComment = encryptSymmetric128BitHexKeyUTF8({ + plaintext: secretComment, + key + }); + + secretCommentCiphertext = encryptedSecretComment.ciphertext; + secretCommentIV = encryptedSecretComment.iv; + secretCommentTag = encryptedSecretComment.tag; + } + } + + // create secret const secret = await new Secret({ version: 1, @@ -410,7 +481,7 @@ export const getSecretsHelper = async ({ environment, type: SECRET_PERSONAL, ...getAuthDataPayloadUserObj(authData), - }); + }).lean(); // concat with shared secrets secrets = secrets.concat( @@ -421,7 +492,7 @@ export const getSecretsHelper = async ({ secretBlindIndex: { $nin: secrets.map((secret) => secret.secretBlindIndex), }, - }) + }).lean() ); // (EE) create (audit) log @@ -458,8 +529,45 @@ export const getSecretsHelper = async ({ }, }); } + + const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); - return secrets; + if (!isWorkspaceE2EE) { + // if workspace is not end-to-end encrypted, then decrypt + // secret and return it in plaintext + + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId + }); + + return secrets.map((secret) => { + const secretName = decryptSymmetric128BitHexKeyUTF8({ + ciphertext: secret.secretKeyCiphertext, + iv: secret.secretKeyIV, + tag: secret.secretKeyTag, + key + }); + + const secretValue = decryptSymmetric128BitHexKeyUTF8({ + ciphertext: secret.secretValueCiphertext, + iv: secret.secretValueIV, + tag: secret.secretValueTag, + key + }); + + return ({ + ...secret, + secretName, + secretValue + }); + }); + } + + return secrets.map((secret) => ({ + ...secret, + secretName: null, + secretValue: null + })); }; /** @@ -492,7 +600,7 @@ export const getSecretHelper = async ({ environment, type: type ?? SECRET_PERSONAL, ...(type === SECRET_PERSONAL ? getAuthDataPayloadUserObj(authData) : {}), - }); + }).lean(); if (!secret) { // case: failed to find personal secret matching criteria @@ -502,7 +610,7 @@ export const getSecretHelper = async ({ workspace: new Types.ObjectId(workspaceId), environment, type: SECRET_SHARED, - }); + }).lean(); } if (!secret) throw SecretNotFoundError(); @@ -541,8 +649,36 @@ export const getSecretHelper = async ({ }, }); } + + const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); + + if (!isWorkspaceE2EE) { + // if workspace is not end-to-end encrypted, then decrypt + // secret and return it in plaintext - return secret; + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId + }); + + const secretValue = decryptSymmetric128BitHexKeyUTF8({ + ciphertext: secret.secretValueCiphertext, + iv: secret.secretValueIV, + tag: secret.secretValueTag, + key + }); + + return ({ + ...secret, + secretName, + secretValue + }); + } + + return ({ + ...secret, + secretName: null, + secretValue: null + }); }; /** diff --git a/backend/src/interfaces/services/BotService/index.ts b/backend/src/interfaces/services/BotService/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/backend/src/interfaces/services/SecretService/index.ts b/backend/src/interfaces/services/SecretService/index.ts index 2efd53f4e..920db69cd 100644 --- a/backend/src/interfaces/services/SecretService/index.ts +++ b/backend/src/interfaces/services/SecretService/index.ts @@ -8,12 +8,14 @@ export interface CreateSecretParams { folderId?: string; type: "shared" | "personal"; authData: AuthData; - secretKeyCiphertext: string; - secretKeyIV: string; - secretKeyTag: string; - secretValueCiphertext: string; - secretValueIV: string; - secretValueTag: string; + secretKeyCiphertext?: string; + secretKeyIV?: string; + secretKeyTag?: string; + secretValue?: string; + secretValueCiphertext?: string; + secretValueIV?: string; + secretValueTag?: string; + secretComment?: string; secretCommentCiphertext?: string; secretCommentIV?: string; secretCommentTag?: string; diff --git a/backend/src/routes/v3/secrets.ts b/backend/src/routes/v3/secrets.ts index 6a18fdf73..6d8b11c29 100644 --- a/backend/src/routes/v3/secrets.ts +++ b/backend/src/routes/v3/secrets.ts @@ -48,12 +48,14 @@ router.post( body('workspaceId').exists().isString().trim(), body('environment').exists().isString().trim(), body('type').exists().isIn([SECRET_SHARED, SECRET_PERSONAL]), - body('secretKeyCiphertext').exists().isString().trim(), - body('secretKeyIV').exists().isString().trim(), - body('secretKeyTag').exists().isString().trim(), - body('secretValueCiphertext').exists().isString().trim(), - body('secretValueIV').exists().isString().trim(), - body('secretValueTag').exists().isString().trim(), + body('secretKeyCiphertext').optional().isString().trim(), + body('secretKeyIV').optional().isString().trim(), + body('secretKeyTag').optional().isString().trim(), + body('secretValue').optional().isString().trim(), + body('secretValueCiphertext').optional().isString().trim(), + body('secretValueIV').optional().isString().trim(), + body('secretValueTag').optional().isString().trim(), + body('secretComment').optional().isString().trim(), body('secretCommentCiphertext').optional().isString().trim(), body('secretCommentIV').optional().isString().trim(), body('secretCommentTag').optional().isString().trim(), diff --git a/backend/src/services/BotService.ts b/backend/src/services/BotService.ts index 2c0db0355..ab6d8fbd4 100644 --- a/backend/src/services/BotService.ts +++ b/backend/src/services/BotService.ts @@ -2,13 +2,31 @@ import { Types } from 'mongoose'; import { getSecretsBotHelper, encryptSymmetricHelper, - decryptSymmetricHelper + decryptSymmetricHelper, + getKey, + getIsWorkspaceE2EEHelper } from '../helpers/bot'; +// rename the functions here +// refactor the interface situation here + /** * Class to handle bot actions */ class BotService { + static async getIsWorkspaceE2EE(workspaceId: Types.ObjectId) { + return await getIsWorkspaceE2EEHelper(workspaceId); + } + + static async getWorkspaceKeyWithBot({ + workspaceId + }: { + workspaceId: Types.ObjectId; + }) { + return await getKey({ + workspaceId + }); + } /** * Return decrypted secrets for workspace with id [workspaceId] and diff --git a/backend/src/services/SecretService.ts b/backend/src/services/SecretService.ts index 5b5b73e5f..9e430ab3d 100644 --- a/backend/src/services/SecretService.ts +++ b/backend/src/services/SecretService.ts @@ -1,7 +1,4 @@ import { Types } from 'mongoose'; -import { - ISecret -} from '../models'; import { CreateSecretParams, GetSecretsParams, From 631eac803e40cb18ef652830f2a74ea9f1d46285 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Sun, 11 Jun 2023 12:11:25 +0100 Subject: [PATCH 02/55] Finish preliminary v3/secrets/raw endpoints --- .../src/controllers/v3/secretsController.ts | 308 ++++++++++++++---- backend/src/helpers/secrets.ts | 209 ++++-------- .../services/SecretService/index.ts | 14 +- .../src/middleware/requireWorkspaceAuth.ts | 7 +- backend/src/routes/v3/secrets.ts | 140 ++++++++ backend/src/validation/workspace.ts | 14 +- 6 files changed, 475 insertions(+), 217 deletions(-) diff --git a/backend/src/controllers/v3/secretsController.ts b/backend/src/controllers/v3/secretsController.ts index 63aa2d660..8a9350a36 100644 --- a/backend/src/controllers/v3/secretsController.ts +++ b/backend/src/controllers/v3/secretsController.ts @@ -2,6 +2,240 @@ import { Request, Response } from "express"; import { Types } from "mongoose"; import { SecretService, EventService } from "../../services"; import { eventPushSecrets } from "../../events"; +import { BotService } from "../../services"; +import { repackageSecretToRaw } from "../../helpers/secrets"; +import { encryptSymmetric128BitHexKeyUTF8 } from "../../utils/crypto"; + +/** + * Return secrets for workspace with id [workspaceId] and environment + * [environment] in plaintext + * @param req + * @param res + */ +export const getSecretsRaw = async (req: Request, res: Response) => { + const workspaceId = req.query.workspaceId as string; + const environment = req.query.environment as string; + const secretPath = req.query.secretPath as string; + + const secrets = await SecretService.getSecrets({ + workspaceId: new Types.ObjectId(workspaceId), + environment, + secretPath, + authData: req.authData, + }); + + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId: new Types.ObjectId(workspaceId) + }); + + return res.status(200).send({ + secrets: secrets.map((secret) => { + const rep = repackageSecretToRaw({ + secret, + key + }); + + return rep; + }) + }); +}; + +/** + * Return secret with name [secretName] in plaintext + * @param req + * @param res + */ +export const getSecretByNameRaw = async (req: Request, res: Response) => { + const { secretName } = req.params; + const workspaceId = req.query.workspaceId as string; + const environment = req.query.environment as string; + const secretPath = req.query.secretPath as string; + const type = req.query.type as "shared" | "personal" | undefined; + + const secret = await SecretService.getSecret({ + secretName, + workspaceId: new Types.ObjectId(workspaceId), + environment, + type, + secretPath, + authData: req.authData, + }); + + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId: new Types.ObjectId(workspaceId) + }); + + return res.status(200).send({ + secret: repackageSecretToRaw({ + secret, + key + }) + }); +}; + +/** + * Create secret with name [secretName] in plaintext + * @param req + * @param res + */ +export const createSecretRaw = async (req: Request, res: Response) => { + const { secretName } = req.params; + const { + workspaceId, + environment, + type, + secretValue, + secretComment, + secretPath = "/" + } = req.body; + + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId: new Types.ObjectId(workspaceId) + }); + + const secretKeyEncrypted = encryptSymmetric128BitHexKeyUTF8({ + plaintext: secretName, + key + }); + + const secretValueEncrypted = encryptSymmetric128BitHexKeyUTF8({ + plaintext: secretValue, + key + }); + + const secretCommentEncrypted = encryptSymmetric128BitHexKeyUTF8({ + plaintext: secretComment, + key + }); + + const secret = await SecretService.createSecret({ + secretName, + workspaceId: new Types.ObjectId(workspaceId), + environment, + type, + authData: req.authData, + secretKeyCiphertext: secretKeyEncrypted.ciphertext, + secretKeyIV: secretKeyEncrypted.iv, + secretKeyTag: secretKeyEncrypted.tag, + secretValueCiphertext: secretValueEncrypted.ciphertext, + secretValueIV: secretValueEncrypted.iv, + secretValueTag: secretValueEncrypted.tag, + secretPath, + secretCommentCiphertext: secretCommentEncrypted.ciphertext, + secretCommentIV: secretCommentEncrypted.iv, + secretCommentTag: secretCommentEncrypted.tag + }); + + await EventService.handleEvent({ + event: eventPushSecrets({ + workspaceId: new Types.ObjectId(workspaceId), + environment, + }), + }); + + const secretWithoutBlindIndex = secret.toObject(); + delete secretWithoutBlindIndex.secretBlindIndex; + + return res.status(200).send({ + secret: repackageSecretToRaw({ + secret: secretWithoutBlindIndex, + key + }) + }); +} + +/** + * Update secret with name [secretName] + * @param req + * @param res + */ +export const updateSecretByNameRaw = async (req: Request, res: Response) => { + const { secretName } = req.params; + const { + workspaceId, + environment, + type, + secretValue, + secretPath = "/", + } = req.body; + + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId: new Types.ObjectId(workspaceId) + }); + + const secretValueEncrypted = encryptSymmetric128BitHexKeyUTF8({ + plaintext: secretValue, + key + }); + + const secret = await SecretService.updateSecret({ + secretName, + workspaceId, + environment, + type, + authData: req.authData, + secretValueCiphertext: secretValueEncrypted.ciphertext, + secretValueIV: secretValueEncrypted.iv, + secretValueTag: secretValueEncrypted.tag, + secretPath, + }); + + await EventService.handleEvent({ + event: eventPushSecrets({ + workspaceId: new Types.ObjectId(workspaceId), + environment, + }), + }); + + return res.status(200).send({ + secret: repackageSecretToRaw({ + secret, + key + }) + }); +}; + +/** + * Delete secret with name [secretName] + * @param req + * @param res + */ +export const deleteSecretByNameRaw = async (req: Request, res: Response) => { + const { secretName } = req.params; + const { + workspaceId, + environment, + type, + secretPath = "/" + } = req.body; + + const { secret } = await SecretService.deleteSecret({ + secretName, + workspaceId, + environment, + type, + authData: req.authData, + secretPath, + }); + + await EventService.handleEvent({ + event: eventPushSecrets({ + workspaceId: new Types.ObjectId(workspaceId), + environment, + }), + }); + + const key = await BotService.getWorkspaceKeyWithBot({ + workspaceId: new Types.ObjectId(workspaceId) + }); + + return res.status(200).send({ + secret: repackageSecretToRaw({ + secret, + key + }) + }); +}; /** * Get secrets for workspace with id [workspaceId] and environment @@ -27,7 +261,7 @@ export const getSecrets = async (req: Request, res: Response) => { }; /** - * Get secret with name [secretName] + * Return secret with name [secretName] * @param req * @param res */ @@ -58,59 +292,6 @@ export const getSecretByName = async (req: Request, res: Response) => { * @param res */ export const createSecret = async (req: Request, res: Response) => { -<<<<<<< HEAD - const { secretName } = req.params; - const { - workspaceId, - environment, - type, - secretKeyCiphertext, - secretKeyIV, - secretKeyTag, - secretValue, - secretValueCiphertext, - secretValueIV, - secretValueTag, - secretComment, - secretCommentCiphertext, - secretCommentIV, - secretCommentTag - } = req.body; - - const secret = await SecretService.createSecret({ - secretName, - workspaceId: new Types.ObjectId(workspaceId), - environment, - type, - authData: req.authData, - secretKeyCiphertext, - secretKeyIV, - secretKeyTag, - secretValue, - secretValueCiphertext, - secretValueIV, - secretValueTag, - secretComment, - secretCommentCiphertext, - secretCommentIV, - secretCommentTag - }); - - await EventService.handleEvent({ - event: eventPushSecrets({ - workspaceId: new Types.ObjectId(workspaceId), - environment - }) - }); - - const secretWithoutBlindIndex = secret.toObject(); - delete secretWithoutBlindIndex.secretBlindIndex; - - return res.status(200).send({ - secret: secretWithoutBlindIndex - }); -} -======= const { secretName } = req.params; const { workspaceId, @@ -141,13 +322,9 @@ export const createSecret = async (req: Request, res: Response) => { secretValueIV, secretValueTag, secretPath, - ...(secretCommentCiphertext && secretCommentIV && secretCommentTag - ? { - secretCommentCiphertext, - secretCommentIV, - secretCommentTag, - } - : {}), + secretCommentCiphertext, + secretCommentIV, + secretCommentTag }); await EventService.handleEvent({ @@ -164,7 +341,7 @@ export const createSecret = async (req: Request, res: Response) => { secret: secretWithoutBlindIndex, }); }; ->>>>>>> origin + /** * Update secret with name [secretName] @@ -214,7 +391,12 @@ export const updateSecretByName = async (req: Request, res: Response) => { */ export const deleteSecretByName = async (req: Request, res: Response) => { const { secretName } = req.params; - const { workspaceId, environment, type, secretPath = "/" } = req.body; + const { + workspaceId, + environment, + type, + secretPath = "/" + } = req.body; const { secret } = await SecretService.deleteSecret({ secretName, diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index 5f72b8f03..d7cc31cda 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -37,7 +37,7 @@ import { encryptSymmetric128BitHexKeyUTF8, decryptSymmetric128BitHexKeyUTF8, } from '../utils/crypto'; -import { BotService, TelemetryService } from '../services'; +import { TelemetryService } from '../services'; import { getEncryptionKey, client, getRootEncryptionKey } from "../config"; import { EESecretService, EELogService } from "../ee/services"; import { @@ -46,6 +46,60 @@ import { } from "../utils/auth"; import { getFolderIdFromServiceToken } from "../services/FolderService"; +/** + * Returns an object containing secret [secret] but with its value, key, comment decrypted. + * + * Precondition: the workspace for secret [secret] must have E2EE disabled + * @param {ISecret} secret - secret to repackage to raw + * @param {String} key - symmetric key to use to decrypt secret + * @returns + */ +export const repackageSecretToRaw = ({ + secret, + key +}:{ + secret: ISecret; + key: string; +}) => { + + const secretKey = decryptSymmetric128BitHexKeyUTF8({ + ciphertext: secret.secretKeyCiphertext, + iv: secret.secretKeyIV, + tag: secret.secretKeyTag, + key + }); + + const secretValue = decryptSymmetric128BitHexKeyUTF8({ + ciphertext: secret.secretValueCiphertext, + iv: secret.secretValueIV, + tag: secret.secretValueTag, + key + }); + + let secretComment: string = ''; + + if (secret.secretCommentCiphertext && secret.secretCommentIV && secret.secretCommentTag) { + secretComment = decryptSymmetric128BitHexKeyUTF8({ + ciphertext: secret.secretCommentCiphertext, + iv: secret.secretCommentIV, + tag: secret.secretCommentTag, + key + }); + } + + return ({ + _id: secret._id, + version: secret.version, + workspace: secret.workspace, + type: secret.type, + environment: secret.environment, + user: secret.user, + secretKey, + secretValue, + secretComment + }); +} + /** * Create secret blind index data containing encrypted blind index [salt] * for workspace with id [workspaceId] @@ -244,23 +298,6 @@ export const generateSecretBlindIndexHelper = async ({ }); }; -// secretName, -// workspaceId, -// environment, -// type, -// authData, -// secretKeyCiphertext, -// secretKeyIV, -// secretKeyTag, -// secretValue, -// secretValueCiphertext, -// secretValueIV, -// secretValueTag, -// secretCommentCiphertext, -// secretCommentIV, -// secretCommentTag, -// folderId, - /** * Create secret with name [secretName] * @param {Object} obj @@ -280,11 +317,9 @@ export const createSecretHelper = async ({ secretKeyCiphertext, secretKeyIV, secretKeyTag, - secretValue, secretValueCiphertext, secretValueIV, secretValueTag, - secretComment, secretCommentCiphertext, secretCommentIV, secretCommentTag, @@ -340,52 +375,6 @@ export const createSecretHelper = async ({ }); } - // can generate secretKeyCiphertext etc. if not E2EE. - const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); - - if (!isWorkspaceE2EE) { - // if workspace is not end-to-end encrypted, then decrypt - // secret and return it in plaintext - - const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId - }); - - if (secretName) { - const encryptedSecretKey = encryptSymmetric128BitHexKeyUTF8({ - plaintext: secretName, - key - }); - - secretKeyCiphertext = encryptedSecretKey.ciphertext; - secretKeyIV = encryptedSecretKey.iv; - secretKeyTag = encryptedSecretKey.tag; - } - - if (secretValue) { - const encryptedSecretValue = encryptSymmetric128BitHexKeyUTF8({ - plaintext: secretValue, - key - }); - - secretValueCiphertext = encryptedSecretValue.ciphertext; - secretValueIV = encryptedSecretValue.iv; - secretValueTag = encryptedSecretValue.tag; - } - - if (secretComment) { - const encryptedSecretComment = encryptSymmetric128BitHexKeyUTF8({ - plaintext: secretComment, - key - }); - - secretCommentCiphertext = encryptedSecretComment.ciphertext; - secretCommentIV = encryptedSecretComment.iv; - secretCommentTag = encryptedSecretComment.tag; - } - } - - // create secret const secret = await new Secret({ version: 1, @@ -565,44 +554,7 @@ export const getSecretsHelper = async ({ }); } - const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); - - if (!isWorkspaceE2EE) { - // if workspace is not end-to-end encrypted, then decrypt - // secret and return it in plaintext - - const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId - }); - - return secrets.map((secret) => { - const secretName = decryptSymmetric128BitHexKeyUTF8({ - ciphertext: secret.secretKeyCiphertext, - iv: secret.secretKeyIV, - tag: secret.secretKeyTag, - key - }); - - const secretValue = decryptSymmetric128BitHexKeyUTF8({ - ciphertext: secret.secretValueCiphertext, - iv: secret.secretValueIV, - tag: secret.secretValueTag, - key - }); - - return ({ - ...secret, - secretName, - secretValue - }); - }); - } - - return secrets.map((secret) => ({ - ...secret, - secretName: null, - secretValue: null - })); + return secrets; }; /** @@ -701,35 +653,7 @@ export const getSecretHelper = async ({ }); } - const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); - - if (!isWorkspaceE2EE) { - // if workspace is not end-to-end encrypted, then decrypt - // secret and return it in plaintext - - const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId - }); - - const secretValue = decryptSymmetric128BitHexKeyUTF8({ - ciphertext: secret.secretValueCiphertext, - iv: secret.secretValueIV, - tag: secret.secretValueTag, - key - }); - - return ({ - ...secret, - secretName, - secretValue - }); - } - - return ({ - ...secret, - secretName: null, - secretValue: null - }); + return secret; }; /** @@ -919,6 +843,7 @@ export const deleteSecretHelper = async ({ // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { const { secretPath: serviceTkScopedSecretPath } = authData.authPayload; + if (secretPath !== serviceTkScopedSecretPath) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } @@ -938,7 +863,7 @@ export const deleteSecretHelper = async ({ workspaceId: new Types.ObjectId(workspaceId), environment, folder: folderId, - }); + }).lean(); secret = await Secret.findOneAndDelete({ secretBlindIndex, @@ -946,7 +871,7 @@ export const deleteSecretHelper = async ({ environment, type, folder: folderId, - }); + }).lean(); await Secret.deleteMany({ secretBlindIndex, @@ -962,7 +887,7 @@ export const deleteSecretHelper = async ({ environment, type, ...getAuthDataPayloadUserObj(authData), - }); + }).lean(); if (secret) { secrets = [secret]; @@ -983,9 +908,7 @@ export const deleteSecretHelper = async ({ secretIds: secrets.map((secret) => secret._id), }); - // (EE) take a secret snapshot - action && - (await EELogService.createLog({ + action && (await EELogService.createLog({ ...getAuthDataPayloadIdObj(authData), workspaceId, actions: [action], @@ -1018,9 +941,9 @@ export const deleteSecretHelper = async ({ }, }); } - - return { + + return ({ secrets, - secret, - }; + secret + }); }; diff --git a/backend/src/interfaces/services/SecretService/index.ts b/backend/src/interfaces/services/SecretService/index.ts index 9fc26738c..678c67711 100644 --- a/backend/src/interfaces/services/SecretService/index.ts +++ b/backend/src/interfaces/services/SecretService/index.ts @@ -7,14 +7,12 @@ export interface CreateSecretParams { environment: string; type: "shared" | "personal"; authData: AuthData; - secretKeyCiphertext?: string; - secretKeyIV?: string; - secretKeyTag?: string; - secretValue?: string; - secretValueCiphertext?: string; - secretValueIV?: string; - secretValueTag?: string; - secretComment?: string; + secretKeyCiphertext: string; + secretKeyIV: string; + secretKeyTag: string; + secretValueCiphertext: string; + secretValueIV: string; + secretValueTag: string; secretCommentCiphertext?: string; secretCommentIV?: string; secretCommentTag?: string; diff --git a/backend/src/middleware/requireWorkspaceAuth.ts b/backend/src/middleware/requireWorkspaceAuth.ts index da517b998..a4d65ffd2 100644 --- a/backend/src/middleware/requireWorkspaceAuth.ts +++ b/backend/src/middleware/requireWorkspaceAuth.ts @@ -16,13 +16,15 @@ const requireWorkspaceAuth = ({ locationWorkspaceId, locationEnvironment = undefined, requiredPermissions = [], - requireBlindIndicesEnabled = false + requireBlindIndicesEnabled = false, + requireE2EEOff = true }: { acceptedRoles: Array<'admin' | 'member'>; locationWorkspaceId: req; locationEnvironment?: req | undefined; requiredPermissions?: string[]; requireBlindIndicesEnabled?: boolean; + requireE2EEOff?: boolean; }) => { return async (req: Request, res: Response, next: NextFunction) => { const workspaceId = req[locationWorkspaceId]?.workspaceId; @@ -35,7 +37,8 @@ const requireWorkspaceAuth = ({ environment, acceptedRoles, requiredPermissions, - requireBlindIndicesEnabled + requireBlindIndicesEnabled, + requireE2EEOff }); if (membership) { diff --git a/backend/src/routes/v3/secrets.ts b/backend/src/routes/v3/secrets.ts index 6a3d7af88..1f3e239be 100644 --- a/backend/src/routes/v3/secrets.ts +++ b/backend/src/routes/v3/secrets.ts @@ -20,6 +20,142 @@ import { PERMISSION_READ_SECRETS, } from "../../variables"; +router.get( + "/raw", + query("workspaceId").exists().isString().trim(), + query("workspaceId").exists().isString().trim(), + query("environment").exists().isString().trim(), + query("secretPath").default("/").isString().trim(), + validateRequest, + requireAuth({ + acceptedAuthModes: [ + AUTH_MODE_JWT, + AUTH_MODE_API_KEY, + AUTH_MODE_SERVICE_TOKEN, + AUTH_MODE_SERVICE_ACCOUNT, + ], + }), + requireWorkspaceAuth({ + acceptedRoles: [ADMIN, MEMBER], + locationWorkspaceId: "query", + locationEnvironment: "query", + requiredPermissions: [PERMISSION_READ_SECRETS], + requireBlindIndicesEnabled: true, + requireE2EEOff: true + }), + secretsController.getSecretsRaw +); + +router.get( + "/raw/:secretName", + param("secretName").exists().isString().trim(), + query("workspaceId").exists().isString().trim(), + query("environment").exists().isString().trim(), + query("secretPath").default("/").isString().trim(), + query("type").optional().isIn([SECRET_SHARED, SECRET_PERSONAL]), + validateRequest, + requireAuth({ + acceptedAuthModes: [ + AUTH_MODE_JWT, + AUTH_MODE_API_KEY, + AUTH_MODE_SERVICE_TOKEN, + AUTH_MODE_SERVICE_ACCOUNT, + ], + }), + requireWorkspaceAuth({ + acceptedRoles: [ADMIN, MEMBER], + locationWorkspaceId: "query", + locationEnvironment: "query", + requiredPermissions: [PERMISSION_READ_SECRETS], + requireBlindIndicesEnabled: true, + requireE2EEOff: true + }), + secretsController.getSecretByNameRaw +); + +router.post( + "/raw/:secretName", + body("workspaceId").exists().isString().trim(), + body("environment").exists().isString().trim(), + body("type").exists().isIn([SECRET_SHARED, SECRET_PERSONAL]), + body("secretValue").exists().isString().trim(), + body("secretComment").default("").isString().trim(), + body("secretPath").default("/").isString().trim(), + validateRequest, + requireAuth({ + acceptedAuthModes: [ + AUTH_MODE_JWT, + AUTH_MODE_API_KEY, + AUTH_MODE_SERVICE_TOKEN, + AUTH_MODE_SERVICE_ACCOUNT, + ], + }), + requireWorkspaceAuth({ + acceptedRoles: [ADMIN, MEMBER], + locationWorkspaceId: "body", + locationEnvironment: "body", + requiredPermissions: [PERMISSION_WRITE_SECRETS], + requireBlindIndicesEnabled: true, + requireE2EEOff: true + }), + secretsController.createSecretRaw +); + +router.patch( + "/raw/:secretName", + param("secretName").exists().isString().trim(), + body("workspaceId").exists().isString().trim(), + body("environment").exists().isString().trim(), + body("type").exists().isIn([SECRET_SHARED, SECRET_PERSONAL]), + body("secretValue").exists().isString().trim(), + body("secretPath").default("/").isString().trim(), + validateRequest, + requireAuth({ + acceptedAuthModes: [ + AUTH_MODE_JWT, + AUTH_MODE_API_KEY, + AUTH_MODE_SERVICE_TOKEN, + AUTH_MODE_SERVICE_ACCOUNT, + ], + }), + requireWorkspaceAuth({ + acceptedRoles: [ADMIN, MEMBER], + locationWorkspaceId: "body", + locationEnvironment: "body", + requiredPermissions: [PERMISSION_WRITE_SECRETS], + requireBlindIndicesEnabled: true, + requireE2EEOff: true + }), + secretsController.updateSecretByNameRaw +); + +router.delete( + "/raw/:secretName", + param("secretName").exists().isString().trim(), + body("workspaceId").exists().isString().trim(), + body("environment").exists().isString().trim(), + body("secretPath").default("/").isString().trim(), + body("type").exists().isIn([SECRET_SHARED, SECRET_PERSONAL]), + validateRequest, + requireAuth({ + acceptedAuthModes: [ + AUTH_MODE_JWT, + AUTH_MODE_API_KEY, + AUTH_MODE_SERVICE_TOKEN, + AUTH_MODE_SERVICE_ACCOUNT, + ], + }), + requireWorkspaceAuth({ + acceptedRoles: [ADMIN, MEMBER], + locationWorkspaceId: "body", + locationEnvironment: "body", + requiredPermissions: [PERMISSION_WRITE_SECRETS], + requireBlindIndicesEnabled: true, + requireE2EEOff: true + }), + secretsController.deleteSecretByNameRaw +); + router.get( "/", query("workspaceId").exists().isString().trim(), @@ -40,6 +176,7 @@ router.get( locationEnvironment: "query", requiredPermissions: [PERMISSION_READ_SECRETS], requireBlindIndicesEnabled: true, + requireE2EEOff: false }), secretsController.getSecrets ); @@ -74,6 +211,7 @@ router.post( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, + requireE2EEOff: false }), secretsController.createSecret ); @@ -129,6 +267,7 @@ router.patch( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, + requireE2EEOff: false }), secretsController.updateSecretByName ); @@ -155,6 +294,7 @@ router.delete( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, + requireE2EEOff: false }), secretsController.deleteSecretByName ); diff --git a/backend/src/validation/workspace.ts b/backend/src/validation/workspace.ts index b7a04634f..28c4a20ea 100644 --- a/backend/src/validation/workspace.ts +++ b/backend/src/validation/workspace.ts @@ -13,6 +13,7 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; import { validateUserClientForWorkspace } from './user'; import { validateServiceTokenDataClientForWorkspace } from './serviceTokenData'; import { + BadRequestError, UnauthorizedRequestError, WorkspaceNotFoundError } from '../utils/errors'; @@ -22,6 +23,7 @@ import { AUTH_MODE_SERVICE_TOKEN, AUTH_MODE_API_KEY } from '../variables'; +import { BotService } from '../services'; /** * Validate authenticated clients for workspace with id [workspaceId] based @@ -39,7 +41,8 @@ export const validateClientForWorkspace = async ({ environment, acceptedRoles, requiredPermissions, - requireBlindIndicesEnabled + requireBlindIndicesEnabled, + requireE2EEOff }: { authData: { authMode: string; @@ -50,6 +53,7 @@ export const validateClientForWorkspace = async ({ acceptedRoles: Array<'admin' | 'member'>; requiredPermissions?: string[]; requireBlindIndicesEnabled: boolean; + requireE2EEOff: boolean; }) => { const workspace = await Workspace.findById(workspaceId); @@ -70,6 +74,14 @@ export const validateClientForWorkspace = async ({ message: 'Failed workspace authorization due to blind indices not being enabled' }); } + + if (requireE2EEOff) { + const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); + + if (isWorkspaceE2EE) throw BadRequestError({ + message: 'Failed workspace authorization due to end-to-end encryption not being disabled' + }); + } if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { const membership = await validateUserClientForWorkspace({ From 1dea6749ba9bd2a102ea86b8c1c10307ed71c4eb Mon Sep 17 00:00:00 2001 From: mswider <37093293+mswider@users.noreply.github.com> Date: Sun, 11 Jun 2023 18:19:01 -0500 Subject: [PATCH 03/55] Allow custom environments in self-hosted instances --- .../views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx index f4fab2ab3..5e8f5afe7 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx @@ -90,7 +90,7 @@ export const ProjectSettingsPage = () => { // get user subscription const { subscription } = useSubscription(); const host = window.location.origin; - const isEnvServiceAllowed = ((currentWorkspace?.environments || []).length < (subscription?.envLimit || 3) && host === 'https://app.infisical.com'); + const isEnvServiceAllowed = ((currentWorkspace?.environments || []).length < (subscription?.envLimit || 3) || host !== 'https://app.infisical.com'); const onRenameWorkspace = async (name: string) => { try { From 82c1f8607dbd3f8d95ea9063ac12c811c719dd9b Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Sun, 11 Jun 2023 19:23:30 -0700 Subject: [PATCH 04/55] Added intercom --- frontend/next.config.js | 10 ++++----- frontend/src/pages/_app.tsx | 45 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/frontend/next.config.js b/frontend/next.config.js index dbe69eb1d..213ba07e1 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -7,14 +7,14 @@ const path = require('path'); const ContentSecurityPolicy = ` default-src 'self'; - script-src 'self' https://app.posthog.com https://js.stripe.com https://api.stripe.com 'unsafe-inline' 'unsafe-eval'; + script-src 'self' https://app.posthog.com https://js.stripe.com https://api.stripe.com https://widget.intercom.io https://js.intercomcdn.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' https://rsms.me 'unsafe-inline'; child-src https://api.stripe.com; frame-src https://js.stripe.com/ https://api.stripe.com; - connect-src 'self' https://api.heroku.com/ https://id.heroku.com/oauth/authorize https://id.heroku.com/oauth/token https://checkout.stripe.com https://app.posthog.com https://api.stripe.com; - img-src 'self' https://*.stripe.com https://i.ytimg.com/ data:; - media-src; - font-src 'self' https://maxcdn.bootstrapcdn.com https://rsms.me https://fonts.gstatic.com; + connect-src 'self' wss://nexus-websocket-a.intercom.io https://api-iam.intercom.io https://api.heroku.com/ https://id.heroku.com/oauth/authorize https://id.heroku.com/oauth/token https://checkout.stripe.com https://app.posthog.com https://api.stripe.com; + img-src 'self' https://static.intercomassets.com https://js.intercomcdn.com https://downloads.intercomcdn.com https://*.stripe.com https://i.ytimg.com/ data:; + media-src https://js.intercomcdn.com; + font-src 'self' https://fonts.intercomcdn.com/ https://maxcdn.bootstrapcdn.com https://rsms.me https://fonts.gstatic.com; `; // You can choose which headers to add to the list diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 20c3340c2..3cfea7b47 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,4 +1,9 @@ +/* eslint-disable vars-on-top */ +/* eslint-disable no-var */ +/* eslint-disable func-names */ /* eslint-disable react/jsx-props-no-spreading */ +// @ts-nocheck + import { useEffect } from 'react'; import { AppProps } from 'next/app'; import { useRouter } from 'next/router'; @@ -33,11 +38,51 @@ type NextAppProp = AppProps & { const App = ({ Component, pageProps, ...appProps }: NextAppProp): JSX.Element => { const router = useRouter(); + useEffect(() => { + // Intercom code snippet + (function() { + var w=window;var ic=w.Intercom; + if(typeof ic==="function") { + ic('reattach_activator'); + ic('update',w.intercomSettings); + } else { + var d=document; + var i=function() { + // eslint-disable-next-line prefer-rest-params + i.c(arguments); + }; + i.q=[]; + i.c=function(args) { + i.q.push(args); + }; + w.Intercom=i; + var l=function() { + var s=d.createElement('script'); + s.type='text/javascript'; + s.async=true; + s.src='https://widget.intercom.io/widget/hsg644ru'; + var x=d.getElementsByTagName('script')[0]; + x.parentNode.insertBefore(s,x);}; + if(w.attachEvent) { + w.attachEvent('onload',l); + } else { + w.addEventListener('load',l,false); + } + } + } + )(); + + window.Intercom('boot', { + app_id: 'hsg644ru' + }); + }, []); + useEffect(() => { // Init for auto capturing const telemetry = new Telemetry().getInstance(); const handleRouteChange = () => { + (window).Intercom('update'); if (typeof window !== 'undefined') { telemetry.capture('$pageview'); } From 4616cffecd8d4e08c15d421fa469e738a6eb8cf4 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 12 Jun 2023 12:04:28 +0100 Subject: [PATCH 05/55] Add support for read/write non-e2ee secrets --- .../src/middleware/requireWorkspaceAuth.ts | 2 +- backend/src/routes/v3/workspaces.ts | 5 +- backend/src/services/BotService.ts | 15 +- .../api-reference/overview/authentication.mdx | 23 +- .../overview/encryption-modes/e2ee-mode.mdx | 861 ++++++++++++++++++ .../overview/encryption-modes/es-mode.mdx | 92 ++ .../overview/encryption-modes/overview.mdx | 57 ++ docs/api-reference/overview/introduction.mdx | 27 +- docs/mint.json | 12 +- frontend/src/hooks/api/workspace/index.tsx | 3 +- .../ProjectSettingsPage.tsx | 10 +- .../components/E2EESection/E2EESection.tsx | 113 +++ .../components/E2EESection/index.tsx | 3 + .../ProjectSettingsPage/components/index.tsx | 1 + 14 files changed, 1161 insertions(+), 63 deletions(-) create mode 100644 docs/api-reference/overview/encryption-modes/e2ee-mode.mdx create mode 100644 docs/api-reference/overview/encryption-modes/es-mode.mdx create mode 100644 docs/api-reference/overview/encryption-modes/overview.mdx create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/index.tsx diff --git a/backend/src/middleware/requireWorkspaceAuth.ts b/backend/src/middleware/requireWorkspaceAuth.ts index a4d65ffd2..9833e6e56 100644 --- a/backend/src/middleware/requireWorkspaceAuth.ts +++ b/backend/src/middleware/requireWorkspaceAuth.ts @@ -17,7 +17,7 @@ const requireWorkspaceAuth = ({ locationEnvironment = undefined, requiredPermissions = [], requireBlindIndicesEnabled = false, - requireE2EEOff = true + requireE2EEOff = false }: { acceptedRoles: Array<'admin' | 'member'>; locationWorkspaceId: req; diff --git a/backend/src/routes/v3/workspaces.ts b/backend/src/routes/v3/workspaces.ts index fdd734cf9..5c4df39d8 100644 --- a/backend/src/routes/v3/workspaces.ts +++ b/backend/src/routes/v3/workspaces.ts @@ -8,10 +8,9 @@ import { import { workspacesController } from '../../controllers/v3'; import { AUTH_MODE_JWT, - ADMIN, - PERMISSION_READ_SECRETS + ADMIN } from '../../variables'; -import { param, body, validationResult } from 'express-validator'; +import { param, body } from 'express-validator'; // -- migration to blind indices endpoints diff --git a/backend/src/services/BotService.ts b/backend/src/services/BotService.ts index ab6d8fbd4..7081a64cb 100644 --- a/backend/src/services/BotService.ts +++ b/backend/src/services/BotService.ts @@ -7,17 +7,26 @@ import { getIsWorkspaceE2EEHelper } from '../helpers/bot'; -// rename the functions here -// refactor the interface situation here - /** * Class to handle bot actions */ class BotService { + + /** + * Return whether or not workspace with id [workspaceId] is end-to-end encrypted + * @param workspaceId - id of workspace + * @returns {Boolean} + */ static async getIsWorkspaceE2EE(workspaceId: Types.ObjectId) { return await getIsWorkspaceE2EEHelper(workspaceId); } + /** + * Get workspace key for workspace with id [workspaceId] shared to bot. + * @param {Object} obj + * @param {Types.ObjectId} obj.workspaceId - id of workspace to get workspace key for + * @returns + */ static async getWorkspaceKeyWithBot({ workspaceId }: { diff --git a/docs/api-reference/overview/authentication.mdx b/docs/api-reference/overview/authentication.mdx index baee98940..8bad0114f 100644 --- a/docs/api-reference/overview/authentication.mdx +++ b/docs/api-reference/overview/authentication.mdx @@ -5,10 +5,9 @@ description: "How to authenticate with the Infisical Public API" ## Essentials -The Public API accepts multiple modes of authentication being via API Key, Service Account credentials, or [Infisical Token](/documentation/platform/token). +The Public API accepts multiple modes of authentication being via API Key or [Infisical Token](/documentation/platform/token). -- API Key: Provides full access to all endpoints representing the user. -- Service Account: Provides scoped access to an organization and select projects representing a machine such as a VM or application client. +- API Key: Provides full access to all endpoints representing the user without ability to encrypt/decrypt secrets in **E2EE** mode. - [Infisical Token](/documentation/platform/token): Provides short-lived, scoped CRUD access to the secrets of a specific project and environment. @@ -21,14 +20,6 @@ You can obtain an API key in User Settings > API Keys ![API key dashboard](../../images/api-key-dashboard.png) ![API key in personal settings](../../images/api-key-settings.png) - - -The Service Account mode uses an Access Key to authenticate with the API and a Public Key and Private Key to perform any cryptographic operations. - -To authenticate requests with Infisical using the Access Key, you must include it in the `Authorization` header of HTTP requests made to the platform with the value `Bearer `. - -You can create a Service Account in Organization Settings > Service Accounts - @@ -40,12 +31,4 @@ You can obtain an Infisical Token in Project Settings > Service Tokens. ![token add](../../images/project-token-add.png) - - -## Use Cases - -Depending on your use case, it may make sense to use one or another authentication mode: - -- API Key (not recommended): Use if you need full access to the Public API without needing to access any secrets endpoints (because API keys can't encrypt/decrypt secrets). -- Service Account (recommeded): Use if you need access to multiple projects and environments in an organization; service accounts can generate short-lived access tokens, making them useful for some complex setups. -- Service Token (recommeded): Use if you need short-lived, scoped CRUD access to the secrets of a specific project and environment. + \ No newline at end of file diff --git a/docs/api-reference/overview/encryption-modes/e2ee-mode.mdx b/docs/api-reference/overview/encryption-modes/e2ee-mode.mdx new file mode 100644 index 000000000..b24ec9fb7 --- /dev/null +++ b/docs/api-reference/overview/encryption-modes/e2ee-mode.mdx @@ -0,0 +1,861 @@ +--- +title: "E2EE Mode" +--- + +End-to-End Encrypted (E2EE) mode is the default way to use Infisical's API. With it, you must perform client-side encryption/decryption +when reading/writing secrets via HTTP call to Infisical. + +Prerequisites: + +- Set up and add envars to [Infisical Cloud](https://app.infisical.com). +- Create an [Infisical Token](/documentation/platform/token) for your project and environment with write access enabled. +- Grasp a basic understanding of the system and its underlying cryptography [here](/api-reference/overview/introduction). +- [Ensure that your project is blind-indexed](../blind-indices). + +Below, we showcase how to execute common CRUD operations to manage secrets in **E2EE** mode: + + + + + +```js +const crypto = require('crypto'); +const axios = require('axios'); + +const BASE_URL = 'https://app.infisical.com'; +const ALGORITHM = 'aes-256-gcm'; + +const decrypt = ({ ciphertext, iv, tag, secret}) => { + const decipher = crypto.createDecipheriv( + ALGORITHM, + secret, + Buffer.from(iv, 'base64') + ); + decipher.setAuthTag(Buffer.from(tag, 'base64')); + + let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); + cleartext += decipher.final('utf8'); + + return cleartext; +} + +const getSecrets = async () => { + const serviceToken = 'your_service_token'; + const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); + + // 1. Get your Infisical Token data + const { data: serviceTokenData } = await axios.get( + `${BASE_URL}/api/v2/service-token`, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); + + // 2. Get secrets for your project and environment + const { data } = await axios.get( + `${BASE_URL}/api/v3/secrets?${new URLSearchParams({ + environment: serviceTokenData.environment, + workspaceId: serviceTokenData.workspace + })}`, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); + + const encryptedSecrets = data.secrets; + + // 3. Decrypt the (encrypted) project key with the key from your Infisical Token + const projectKey = decrypt({ + ciphertext: serviceTokenData.encryptedKey, + iv: serviceTokenData.iv, + tag: serviceTokenData.tag, + secret: serviceTokenSecret + }); + + // 4. Decrypt the (encrypted) secrets + const secrets = encryptedSecrets.map((secret) => { + const secretKey = decrypt({ + ciphertext: secret.secretKeyCiphertext, + iv: secret.secretKeyIV, + tag: secret.secretKeyTag, + secret: projectKey + }); + + const secretValue = decrypt({ + ciphertext: secret.secretValueCiphertext, + iv: secret.secretValueIV, + tag: secret.secretValueTag, + secret: projectKey + }); + + return ({ + secretKey, + secretValue + }); + }); + + console.log('secrets: ', secrets); +} + +getSecrets(); + +``` + + + +```Python +import requests +import base64 +from Cryptodome.Cipher import AES + + +BASE_URL = "http://app.infisical.com" + + +def decrypt(ciphertext, iv, tag, secret): + secret = bytes(secret, "utf-8") + iv = base64.standard_b64decode(iv) + tag = base64.standard_b64decode(tag) + ciphertext = base64.standard_b64decode(ciphertext) + + cipher = AES.new(secret, AES.MODE_GCM, iv) + cipher.update(tag) + cleartext = cipher.decrypt(ciphertext).decode("utf-8") + return cleartext + + +def get_secrets(): + service_token = "your_service_token" + service_token_secret = service_token[service_token.rindex(".") + 1 :] + + # 1. Get your Infisical Token data + service_token_data = requests.get( + f"{BASE_URL}/api/v2/service-token", + headers={"Authorization": f"Bearer {service_token}"}, + ).json() + + # 2. Get secrets for your project and environment + data = requests.get( + f"{BASE_URL}/api/v3/secrets", + params={ + "environment": service_token_data["environment"], + "workspaceId": service_token_data["workspace"], + }, + headers={"Authorization": f"Bearer {service_token}"}, + ).json() + + encrypted_secrets = data["secrets"] + + # 3. Decrypt the (encrypted) project key with the key from your Infisical Token + project_key = decrypt( + ciphertext=service_token_data["encryptedKey"], + iv=service_token_data["iv"], + tag=service_token_data["tag"], + secret=service_token_secret, + ) + + # 4. Decrypt the (encrypted) secrets + secrets = [] + for secret in encrypted_secrets: + secret_key = decrypt( + ciphertext=secret["secretKeyCiphertext"], + iv=secret["secretKeyIV"], + tag=secret["secretKeyTag"], + secret=project_key, + ) + + secret_value = decrypt( + ciphertext=secret["secretValueCiphertext"], + iv=secret["secretValueIV"], + tag=secret["secretValueTag"], + secret=project_key, + ) + + secrets.append( + { + "secret_key": secret_key, + "secret_value": secret_value, + } + ) + + print("secrets:", secrets) + + +get_secrets() + +``` + + + + + + +```js +const crypto = require('crypto'); +const axios = require('axios'); +const nacl = require('tweetnacl'); + +const BASE_URL = 'https://app.infisical.com'; +const ALGORITHM = 'aes-256-gcm'; +const BLOCK_SIZE_BYTES = 16; + +const encrypt = ({ text, secret }) => { + const iv = crypto.randomBytes(BLOCK_SIZE_BYTES); + const cipher = crypto.createCipheriv(ALGORITHM, secret, iv); + + let ciphertext = cipher.update(text, 'utf8', 'base64'); + ciphertext += cipher.final('base64'); + return { + ciphertext, + iv: iv.toString('base64'), + tag: cipher.getAuthTag().toString('base64') + }; +} + +const decrypt = ({ ciphertext, iv, tag, secret}) => { + const decipher = crypto.createDecipheriv( + ALGORITHM, + secret, + Buffer.from(iv, 'base64') + ); + decipher.setAuthTag(Buffer.from(tag, 'base64')); + + let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); + cleartext += decipher.final('utf8'); + + return cleartext; +} + +const createSecrets = async () => { + const serviceToken = ''; + const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); + + const secretType = 'shared'; // 'shared' or 'personal' + const secretKey = 'some_key'; + const secretValue = 'some_value'; + const secretComment = 'some_comment'; + + // 1. Get your Infisical Token data + const { data: serviceTokenData } = await axios.get( + `${BASE_URL}/api/v2/service-token`, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); + + // 2. Decrypt the (encrypted) project key with the key from your Infisical Token + const projectKey = decrypt({ + ciphertext: serviceTokenData.encryptedKey, + iv: serviceTokenData.iv, + tag: serviceTokenData.tag, + secret: serviceTokenSecret + }); + + // 3. Encrypt your secret with the project key + const { + ciphertext: secretKeyCiphertext, + iv: secretKeyIV, + tag: secretKeyTag + } = encrypt({ + text: secretKey, + secret: projectKey + }); + + const { + ciphertext: secretValueCiphertext, + iv: secretValueIV, + tag: secretValueTag + } = encrypt({ + text: secretValue, + secret: projectKey + }); + + const { + ciphertext: secretCommentCiphertext, + iv: secretCommentIV, + tag: secretCommentTag + } = encrypt({ + text: secretComment, + secret: projectKey + }); + + // 4. Send (encrypted) secret to Infisical + await axios.post( + `${BASE_URL}/api/v3/secrets/${secretKey}`, + { + workspaceId: serviceTokenData.workspace, + environment: serviceTokenData.environment, + type: secretType, + secretKeyCiphertext, + secretKeyIV, + secretKeyTag, + secretValueCiphertext, + secretValueIV, + secretValueTag, + secretCommentCiphertext, + secretCommentIV, + secretCommentTag + }, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); +} + +createSecrets(); +``` + + + +```Python +import base64 +import requests +from Cryptodome.Cipher import AES +from Cryptodome.Random import get_random_bytes + + +BASE_URL = "https://app.infisical.com" +BLOCK_SIZE_BYTES = 16 + + +def encrypt(text, secret): + iv = get_random_bytes(BLOCK_SIZE_BYTES) + secret = bytes(secret, "utf-8") + cipher = AES.new(secret, AES.MODE_GCM, iv) + ciphertext, tag = cipher.encrypt_and_digest(text.encode("utf-8")) + return { + "ciphertext": base64.standard_b64encode(ciphertext).decode("utf-8"), + "tag": base64.standard_b64encode(tag).decode("utf-8"), + "iv": base64.standard_b64encode(iv).decode("utf-8"), + } + + +def decrypt(ciphertext, iv, tag, secret): + secret = bytes(secret, "utf-8") + iv = base64.standard_b64decode(iv) + tag = base64.standard_b64decode(tag) + ciphertext = base64.standard_b64decode(ciphertext) + + cipher = AES.new(secret, AES.MODE_GCM, iv) + cipher.update(tag) + cleartext = cipher.decrypt(ciphertext).decode("utf-8") + return cleartext + + +def create_secrets(): + service_token = "your_service_token" + service_token_secret = service_token[service_token.rindex(".") + 1 :] + + secret_type = "shared" # "shared or "personal" + secret_key = "some_key" + secret_value = "some_value" + secret_comment = "some_comment" + + # 1. Get your Infisical Token data + service_token_data = requests.get( + f"{BASE_URL}/api/v2/service-token", + headers={"Authorization": f"Bearer {service_token}"}, + ).json() + + # 2. Decrypt the (encrypted) project key with the key from your Infisical Token + project_key = decrypt( + ciphertext=service_token_data["encryptedKey"], + iv=service_token_data["iv"], + tag=service_token_data["tag"], + secret=service_token_secret, + ) + + # 3. Encrypt your secret with the project key + encrypted_key_data = encrypt(text=secret_key, secret=project_key) + encrypted_value_data = encrypt(text=secret_value, secret=project_key) + encrypted_comment_data = encrypt(text=secret_comment, secret=project_key) + + # 4. Send (encrypted) secret to Infisical + requests.post( + f"{BASE_URL}/api/v3/secrets/{secret_key}", + json={ + "workspaceId": service_token_data["workspace"], + "environment": service_token_data["environment"], + "type": secret_type, + "secretKeyCiphertext": encrypted_key_data["ciphertext"], + "secretKeyIV": encrypted_key_data["iv"], + "secretKeyTag": encrypted_key_data["tag"], + "secretValueCiphertext": encrypted_value_data["ciphertext"], + "secretValueIV": encrypted_value_data["iv"], + "secretValueTag": encrypted_value_data["tag"], + "secretCommentCiphertext": encrypted_comment_data["ciphertext"], + "secretCommentIV": encrypted_comment_data["iv"], + "secretCommentTag": encrypted_comment_data["tag"] + }, + headers={"Authorization": f"Bearer {service_token}"}, + ) + + +create_secrets() + +``` + + + + + + +```js +const crypto = require('crypto'); +const axios = require('axios'); + +const BASE_URL = 'https://app.infisical.com'; +const ALGORITHM = 'aes-256-gcm'; + +const decrypt = ({ ciphertext, iv, tag, secret}) => { + const decipher = crypto.createDecipheriv( + ALGORITHM, + secret, + Buffer.from(iv, 'base64') + ); + decipher.setAuthTag(Buffer.from(tag, 'base64')); + + let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); + cleartext += decipher.final('utf8'); + + return cleartext; +} + +const getSecret = async () => { + const serviceToken = 'your_service_token'; + const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); + + const secretType = 'shared' // 'shared' or 'personal' + const secretKey = 'some_key'; + + // 1. Get your Infisical Token data + const { data: serviceTokenData } = await axios.get( + `${BASE_URL}/api/v2/service-token`, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); + + // 2. Get the secret from your project and environment + const { data } = await axios.get( + `${BASE_URL}/api/v3/secrets/${secretKey}?${new URLSearchParams({ + environment: serviceTokenData.environment, + workspaceId: serviceTokenData.workspace, + type: secretType // optional, defaults to 'shared' + })}`, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); + + const encryptedSecret = data.secret; + + // 3. Decrypt the (encrypted) project key with the key from your Infisical Token + const projectKey = decrypt({ + ciphertext: serviceTokenData.encryptedKey, + iv: serviceTokenData.iv, + tag: serviceTokenData.tag, + secret: serviceTokenSecret + }); + + // 4. Decrypt the (encrypted) secret value + + const secretValue = decrypt({ + ciphertext: encryptedSecret.secretValueCiphertext, + iv: encryptedSecret.secretValueIV, + tag: encryptedSecret.secretValueTag, + secret: projectKey + }); + + console.log('secret: ', ({ + secretKey, + secretValue + })); +} + +getSecret(); + +``` + + + +```Python +import requests +import base64 +from Cryptodome.Cipher import AES + + +BASE_URL = "http://app.infisical.com" + + +def decrypt(ciphertext, iv, tag, secret): + secret = bytes(secret, "utf-8") + iv = base64.standard_b64decode(iv) + tag = base64.standard_b64decode(tag) + ciphertext = base64.standard_b64decode(ciphertext) + + cipher = AES.new(secret, AES.MODE_GCM, iv) + cipher.update(tag) + cleartext = cipher.decrypt(ciphertext).decode("utf-8") + return cleartext + + +def get_secret(): + service_token = "your_service_token" + service_token_secret = service_token[service_token.rindex(".") + 1 :] + + secret_type = "shared" # "shared" or "personal" + secret_key = "some_key" + + # 1. Get your Infisical Token data + service_token_data = requests.get( + f"{BASE_URL}/api/v2/service-token", + headers={"Authorization": f"Bearer {service_token}"}, + ).json() + + # 2. Get secret from your project and environment + data = requests.get( + f"{BASE_URL}/api/v3/secrets/{secret_key}", + params={ + "environment": service_token_data["environment"], + "workspaceId": service_token_data["workspace"], + "type": secret_type # optional, defaults to "shared" + }, + headers={"Authorization": f"Bearer {service_token}"}, + ).json() + + encrypted_secret = data["secret"] + + # 3. Decrypt the (encrypted) project key with the key from your Infisical Token + project_key = decrypt( + ciphertext=service_token_data["encryptedKey"], + iv=service_token_data["iv"], + tag=service_token_data["tag"], + secret=service_token_secret, + ) + + # 4. Decrypt the (encrypted) secret value + secret_value = decrypt( + ciphertext=encrypted_secret["secretValueCiphertext"], + iv=encrypted_secret["secretValueIV"], + tag=encrypted_secret["secretValueTag"], + secret=project_key, + ) + + print("secret: ", { + "secret_key": secret_key, + "secret_value": secret_value + }) + + +get_secret() + +``` + + + + + + +```js +const crypto = require('crypto'); +const axios = require('axios'); + +const BASE_URL = 'https://app.infisical.com'; +const ALGORITHM = 'aes-256-gcm'; +const BLOCK_SIZE_BYTES = 16; + +const encrypt = ({ text, secret }) => { + const iv = crypto.randomBytes(BLOCK_SIZE_BYTES); + const cipher = crypto.createCipheriv(ALGORITHM, secret, iv); + + let ciphertext = cipher.update(text, 'utf8', 'base64'); + ciphertext += cipher.final('base64'); + return { + ciphertext, + iv: iv.toString('base64'), + tag: cipher.getAuthTag().toString('base64') + }; +} + +const decrypt = ({ ciphertext, iv, tag, secret}) => { + const decipher = crypto.createDecipheriv( + ALGORITHM, + secret, + Buffer.from(iv, 'base64') + ); + decipher.setAuthTag(Buffer.from(tag, 'base64')); + + let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); + cleartext += decipher.final('utf8'); + + return cleartext; +} + +const updateSecrets = async () => { + const serviceToken = 'your_service_token'; + const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); + + const secretType = 'shared' // 'shared' or 'personal' + const secretKey = 'some_key'; + const secretValue = 'updated_value'; + const secretComment = 'updated_comment'; + + // 1. Get your Infisical Token data + const { data: serviceTokenData } = await axios.get( + `${BASE_URL}/api/v2/service-token`, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); + + // 2. Decrypt the (encrypted) project key with the key from your Infisical Token + const projectKey = decrypt({ + ciphertext: serviceTokenData.encryptedKey, + iv: serviceTokenData.iv, + tag: serviceTokenData.tag, + secret: serviceTokenSecret + }); + + // 3. Encrypt your updated secret with the project key + const { + ciphertext: secretKeyCiphertext, + iv: secretKeyIV, + tag: secretKeyTag + } = encrypt({ + text: secretKey, + secret: projectKey + }); + + const { + ciphertext: secretValueCiphertext, + iv: secretValueIV, + tag: secretValueTag + } = encrypt({ + text: secretValue, + secret: projectKey + }); + + const { + ciphertext: secretCommentCiphertext, + iv: secretCommentIV, + tag: secretCommentTag + } = encrypt({ + text: secretComment, + secret: projectKey + }); + + // 4. Send (encrypted) updated secret to Infisical + await axios.patch( + `${BASE_URL}/api/v3/secrets/${secretKey}`, + { + workspaceId: serviceTokenData.workspace, + environment: serviceTokenData.environment, + type: secretType, + secretValueCiphertext, + secretValueIV, + secretValueTag, + secretCommentCiphertext, + secretCommentIV, + secretCommentTag + }, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); +} + +updateSecrets(); +``` + + + +```Python +import base64 +import requests +from Cryptodome.Cipher import AES +from Cryptodome.Random import get_random_bytes + + +BASE_URL = "https://app.infisical.com" +BLOCK_SIZE_BYTES = 16 + + +def encrypt(text, secret): + iv = get_random_bytes(BLOCK_SIZE_BYTES) + secret = bytes(secret, "utf-8") + cipher = AES.new(secret, AES.MODE_GCM, iv) + ciphertext, tag = cipher.encrypt_and_digest(text.encode("utf-8")) + return { + "ciphertext": base64.standard_b64encode(ciphertext).decode("utf-8"), + "tag": base64.standard_b64encode(tag).decode("utf-8"), + "iv": base64.standard_b64encode(iv).decode("utf-8"), + } + + +def decrypt(ciphertext, iv, tag, secret): + secret = bytes(secret, "utf-8") + iv = base64.standard_b64decode(iv) + tag = base64.standard_b64decode(tag) + ciphertext = base64.standard_b64decode(ciphertext) + + cipher = AES.new(secret, AES.MODE_GCM, iv) + cipher.update(tag) + cleartext = cipher.decrypt(ciphertext).decode("utf-8") + return cleartext + + +def update_secret(): + service_token = "your_service_token" + service_token_secret = service_token[service_token.rindex(".") + 1 :] + + secret_type = "shared" # "shared" or "personal" + secret_key = "some_key" + secret_value = "updated_value" + secret_comment = "updated_comment" + + # 1. Get your Infisical Token data + service_token_data = requests.get( + f"{BASE_URL}/api/v2/service-token", + headers={"Authorization": f"Bearer {service_token}"}, + ).json() + + # 2. Decrypt the (encrypted) project key with the key from your Infisical Token + project_key = decrypt( + ciphertext=service_token_data["encryptedKey"], + iv=service_token_data["iv"], + tag=service_token_data["tag"], + secret=service_token_secret, + ) + + # 3. Encrypt your updated secret with the project key + encrypted_key_data = encrypt(text=secret_key, secret=project_key) + encrypted_value_data = encrypt(text=secret_value, secret=project_key) + encrypted_comment_data = encrypt(text=secret_comment, secret=project_key) + + # 4. Send (encrypted) updated secret to Infisical + requests.patch( + f"{BASE_URL}/api/v3/secrets/{secret_key}", + json={ + "workspaceId": service_token_data["workspace"], + "environment": service_token_data["environment"], + "type": secret_type, + "secretKeyCiphertext": encrypted_key_data["ciphertext"], + "secretKeyIV": encrypted_key_data["iv"], + "secretKeyTag": encrypted_key_data["tag"], + "secretValueCiphertext": encrypted_value_data["ciphertext"], + "secretValueIV": encrypted_value_data["iv"], + "secretValueTag": encrypted_value_data["tag"], + "secretCommentCiphertext": encrypted_comment_data["ciphertext"], + "secretCommentIV": encrypted_comment_data["iv"], + "secretCommentTag": encrypted_comment_data["tag"] + }, + headers={"Authorization": f"Bearer {service_token}"}, + ) + + +update_secret() + +``` + + + + + + +```js +const axios = require('axios'); +const BASE_URL = 'https://app.infisical.com'; + +const deleteSecrets = async () => { + const serviceToken = 'your_service_token'; + const secretType = 'shared' // 'shared' or 'personal' + const secretKey = 'some_key' + + // 1. Get your Infisical Token data + const { data: serviceTokenData } = await axios.get( + `${BASE_URL}/api/v2/service-token`, + { + headers: { + Authorization: `Bearer ${serviceToken}` + } + } + ); + + // 2. Delete secret from Infisical + await axios.delete( + `${BASE_URL}/api/v3/secrets/${secretKey}`, + { + workspaceId: serviceTokenData.workspace, + environment: serviceTokenData.environment, + type: secretType + }, + { + headers: { + Authorization: `Bearer ${serviceToken}` + }, + } + ); +}; + +deleteSecrets(); +``` + + + +```Python +import requests + +BASE_URL = "https://app.infisical.com" + + +def delete_secrets(): + service_token = "" + secret_type = "shared" # "shared" or "personal" + secret_key = "some_key" + + # 1. Get your Infisical Token data + service_token_data = requests.get( + f"{BASE_URL}/api/v2/service-token", + headers={"Authorization": f"Bearer {service_token}"}, + ).json() + + # 2. Delete secret from Infisical + requests.delete( + f"{BASE_URL}/api/v2/secrets/{secret_key}", + json={ + "workspaceId": service_token_data["workspace"], + "environment": service_token_data["environment"], + "type": secret_type + }, + headers={"Authorization": f"Bearer {service_token}"}, + ) + + +delete_secrets() + +``` + + + + If using an `API_KEY` to authenticate with the Infisical API, then you should include it in the `X_API_KEY` header. + + + + \ No newline at end of file diff --git a/docs/api-reference/overview/encryption-modes/es-mode.mdx b/docs/api-reference/overview/encryption-modes/es-mode.mdx new file mode 100644 index 000000000..2756980ac --- /dev/null +++ b/docs/api-reference/overview/encryption-modes/es-mode.mdx @@ -0,0 +1,92 @@ +--- +title: "ES Mode" +--- + +Encrypted Standard (ES) mode is the easiest way to use Infisical's API. With it, you can make HTTP calls to Infisical +to read/write secrets in plaintext. + +Prerequisites: + +- Set up and add envars to [Infisical Cloud](https://app.infisical.com). +- Create an [Infisical Token](/documentation/platform/token) for your project and environment with write access enabled. +- [Ensure that your project is blind-indexed](../blind-indices). + +Below, we showcase how to execute common CRUD operations to manage secrets in **ES** mode: + + + + + + ```bash + curl --location --request GET 'http://localhost:8080/api/v3/secrets/raw?environment=dev&workspaceId=xxx' \ + --header 'Authorization: Bearer st.xxx' + + ``` + + + + + + + ```bash + curl --location --request POST 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME' \ + --header 'Authorization: Bearer st.xxx' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "workspaceId": "xxx", + "environment": "dev", + "type": "shared", + "secretValue": "SECRET_VALUE", + "secretPath": "/" + }' + ``` + + + + + + + ```bash + curl --location --request GET 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME?workspaceId=xxx&environment=dev&secretPath=/' \ + --header 'Authorization: Bearer st.xxx' + ``` + + + + + + + ```bash + curl --location --request PATCH 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME' \ + --header 'Authorization: Bearer st.xxx' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "workspaceId": "xxx", + "environment": "dev", + "type": "shared", + "secretValue": "SECRET_VALUE", + "secretPath": "/" + }' + ``` + + + + + + + ```bash + curl --location --request DELETE 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME' \ + --header 'Authorization: Bearer st.xxx' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "workspaceId": "xxx", + "environment": "dev", + "type": "shared", + "secretValue": "SECRET_VALUE", + "secretPath": "/" + }' + ``` + + + + diff --git a/docs/api-reference/overview/encryption-modes/overview.mdx b/docs/api-reference/overview/encryption-modes/overview.mdx new file mode 100644 index 000000000..84606d114 --- /dev/null +++ b/docs/api-reference/overview/encryption-modes/overview.mdx @@ -0,0 +1,57 @@ +--- +title: "Preface" +--- + +Each project in Infisical can be used either in **End-to-End Encrypted (E2EE)** mode or **Encrypted Standard (ES)** mode which dictates how it can be interacted with via the Infisical API. + + + + Secret operations without client-side encryption/decryption + + + Secret operations with client-side encryption/decryption + + + +By default, all projects are initialized in **E2EE** mode which means the server is not able to decrypt any values because all secret encryption/decryption operations occur on the client-side. However, this has limitations around functionality and ease-of-use: + +- You cannot make HTTP calls to Infisical to read/write secrets in plaintext. +- You cannot leverage non-E2EE features like native integrations and in-platform automations like dynamic secrets and secret rotation. + +For this reason, Infisical also provides the **ES** mode of operation to unlock the above limitations by enabling the server to decrypt your values. You can optionally switch a project to using **ES** mode +in your Project Settings. + + + Make no mistake, the limitations of **E2EE** mode do not prevent you from syncing secrets from Infisical to platforms like GitLab. They just imply + that you have to do things the "E2EE-way" such as by embedding the Infisical CLI into your GitLab CI/CD pipelines to fetch and decrypt + secrets on the client-side. + + +## FAQ + + + + We recommend starting with **E2EE** mode and switching to **ES** mode when: + + - Your team needs more power out of non-E2EE features available in **ES** mode such as secret rotation, dynamic secrets, etc. + - Your team wants an easier way to read/write secrets with Infisical. + + + + By default, all projects in Infisical are initialized to **E2EE** mode and can be switched to **ES** mode in the Project Settings by disabling end-to-end encryption. + + + **ES** mode is secure and in fact what most vendors in the secret management industry are doing at the moment. In this mode, secrets are encrypted at rest by + a series of keys, secured ultimately by a top-level `ROOT_ENCRYPTION_KEY` located on the server. + + If you're concerned about Infisical Cloud's ability to read your secrets if using **ES** mode in Infisical Cloud, then you may wish to + use Infisical Cloud in **E2EE** mode or self-host Infisical on your own infrastructure and then use **ES** mode; this of course which means setting up firewalls and securing the instance yourself. + + As an organization, we prohibit reading any customer secrets without explicit permission; access to the `ROOT_ENCRYPTION_KEY` is restricted to one individual in the organization. + + \ No newline at end of file diff --git a/docs/api-reference/overview/introduction.mdx b/docs/api-reference/overview/introduction.mdx index 5199256e5..546e0b9a2 100644 --- a/docs/api-reference/overview/introduction.mdx +++ b/docs/api-reference/overview/introduction.mdx @@ -8,31 +8,6 @@ rotating credentials, or for integrating secret management into a larger system. With the Public API, users can create, read, update, and delete secrets, as well as manage access control, query audit logs, and more. - - We highly recommend using one of the available SDKs when working with the Infisical API. - - If you decide to make your own requests using the API reference instead, be prepared for a steeper learning curve and more manual work. - - In April 2023, we added the capability for users to query for secrets by name to improve the user experience of Infisical. If your project was created prior to April 2023, please read and follow the section on [blind indices](./blind-indices) and how to enable them for better usage of Infisical. - - -## Concepts - -Using Infisical's API to manage secrets requires a basic understanding of the system and its underlying cryptography detailed [here](/security/overview). A few key points: - -- Each user has a public/private key pair that is stored with the platform; private keys are encrypted locally by protected keys that are encrypted by keys derived from Argon2id applied to the user's password before being sent off to the server during the account signup process. -- Each (encrypted) secret belongs to a project and environment. -- Each project has an (encrypted) project key used to encrypt the secrets within that project; Infisical stores copies of the project key, for each member of that project, encrypted under each member's public key. -- Secrets are encrypted symmetrically by your copy of the project key belonging to the project containing. -- Infisical Tokens contain a symmetric key that can be used to decrypt a copy of a project key from the [call to get the Infisical Token data](/api-reference/endpoints/service-tokens/get). -- Infisical uses AES256-GCM and [TweetNaCl.js](https://tweetnacl.js.org/#/) for symmetric and asymmetric encryption/decryption operations. - - - Infisical's system requires that secrets be encrypted/decrypted on the - client-side to maintain E2EE. We strongly recommend you read up on the system - prior to using the Infisical API. The (opt-in) ability to retrieve secrets - back in decrypted format if you choose to share secrets with Infisical is on - our roadmap. - + \ No newline at end of file diff --git a/docs/mint.json b/docs/mint.json index 553db5172..7be970770 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -247,17 +247,15 @@ "pages": [ "api-reference/overview/introduction", "api-reference/overview/authentication", - "api-reference/overview/blind-indices", { "group": "Examples", "pages": [ - "api-reference/overview/examples/retrieve-secrets", - "api-reference/overview/examples/create-secret", - "api-reference/overview/examples/retrieve-secret", - "api-reference/overview/examples/update-secret", - "api-reference/overview/examples/delete-secret" + "api-reference/overview/encryption-modes/overview", + "api-reference/overview/encryption-modes/es-mode", + "api-reference/overview/encryption-modes/e2ee-mode" ] - } + }, + "api-reference/overview/blind-indices" ] }, { diff --git a/frontend/src/hooks/api/workspace/index.tsx b/frontend/src/hooks/api/workspace/index.tsx index 3a9d8fd2f..e38a55242 100644 --- a/frontend/src/hooks/api/workspace/index.tsx +++ b/frontend/src/hooks/api/workspace/index.tsx @@ -12,4 +12,5 @@ export { useNameWorkspaceSecrets, useRenameWorkspace, useToggleAutoCapitalization, - useUpdateWsEnvironment} from './queries'; + useUpdateWsEnvironment +} from './queries'; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx index f4fab2ab3..a36c6f0b5 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx @@ -44,7 +44,8 @@ import { EnvironmentSection, ProjectIndexSecretsSection, ProjectNameChangeSection, - ServiceTokenSection + ServiceTokenSection, + E2EESection } from './components'; export const ProjectSettingsPage = () => { @@ -400,8 +401,13 @@ export const ProjectSettingsPage = () => { onAutoCapitalizationChange={onAutoCapitalizationToggle} /> {!isBlindIndexedLoading && !isBlindIndexed && ( - + )} +

{t('settings.project.danger-zone')}

{t('settings.project.danger-zone-note')}

diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx new file mode 100644 index 000000000..66037afe5 --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx @@ -0,0 +1,113 @@ +import { useEffect, useState } from "react"; +import { + Checkbox +} from "@app/components/v2"; +import { + decryptAssymmetric, + encryptAssymmetric +} from "@app/components/utilities/cryptography/crypto"; +import getBot from '../../../../../pages/api/bot/getBot'; +import setBotActiveStatus from '../../../../../pages/api/bot/setBotActiveStatus'; +import getLatestFileKey from '../../../../../pages/api/workspace/getLatestFileKey'; + +type Props = { + workspaceId: string; +} + +export const E2EESection = ({ + workspaceId +}: Props) => { + const [bot, setBot] = useState(null); + + useEffect(() => { + (async () => { + // get project bot + setBot(await getBot({ workspaceId })); + })(); + }, []); + + /** + * Activate bot for project by performing the following steps: + * 1. Get the (encrypted) project key + * 2. Decrypt project key with user's private key + * 3. Encrypt project key with bot's public key + * 4. Send encrypted project key to backend and set bot status to active + */ + const toggleBotActivate = async () => { + let botKey; + try { + if (bot) { + // case: there is a bot + + if (!bot.isActive) { + // bot is not active -> activate bot + const key = await getLatestFileKey({ workspaceId }); + const PRIVATE_KEY = localStorage.getItem('PRIVATE_KEY'); + + if (!PRIVATE_KEY) { + throw new Error('Private Key missing'); + } + + const WORKSPACE_KEY = decryptAssymmetric({ + ciphertext: key.latestKey.encryptedKey, + nonce: key.latestKey.nonce, + publicKey: key.latestKey.sender.publicKey, + privateKey: PRIVATE_KEY + }); + + const { ciphertext, nonce } = encryptAssymmetric({ + plaintext: WORKSPACE_KEY, + publicKey: bot.publicKey, + privateKey: PRIVATE_KEY + }); + + botKey = { + encryptedKey: ciphertext, + nonce + }; + + const botx = await setBotActiveStatus({ + botId: bot._id, + isActive: true, + botKey + }); + + setBot(botx.bot); + } else { + // bot is active -> deactivate bot + const botx = await setBotActiveStatus({ + botId: bot._id, + isActive: false + }); + + setBot(botx.bot); + } + } + } catch (err) { + console.error(err); + } + }; + + return bot ? ( +
+

End-to-End Encryption

+

+ Disabling, end-to-end encryption (E2EE) unlocks capabilities like native integrations to cloud providers as well as HTTP calls to get secrets back raw but enables the server to read/decrypt your secret values. +

+

+ Note that, even with E2EE disabled, your secrets are always encrypted at rest. +

+ { + await toggleBotActivate(); + }} + > + End-to-end encryption enabled + +
+ ) :
; + }; + \ No newline at end of file diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/index.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/index.tsx new file mode 100644 index 000000000..f2de56bf4 --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/index.tsx @@ -0,0 +1,3 @@ +export { + E2EESection +} from './E2EESection'; \ No newline at end of file diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx index a59111447..34a0c22f5 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx @@ -6,3 +6,4 @@ export { ProjectNameChangeSection } from './ProjectNameChangeSection'; export type { CreateWsTag } from './SecretTagsSection/SecretTagsSection'; export { ServiceTokenSection } from './ServiceTokenSection'; export type { CreateServiceToken } from './ServiceTokenSection/ServiceTokenSection'; +export { E2EESection } from './E2EESection'; From 553cf11ad25bb070d086672ceb941099aef035f3 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 12 Jun 2023 12:16:23 +0100 Subject: [PATCH 06/55] Fix lint issue --- .../components/E2EESection/E2EESection.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx index 66037afe5..4faf3e763 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/E2EESection/E2EESection.tsx @@ -1,11 +1,13 @@ import { useEffect, useState } from "react"; -import { - Checkbox -} from "@app/components/v2"; + import { decryptAssymmetric, encryptAssymmetric } from "@app/components/utilities/cryptography/crypto"; +import { + Checkbox +} from "@app/components/v2"; + import getBot from '../../../../../pages/api/bot/getBot'; import setBotActiveStatus from '../../../../../pages/api/bot/setBotActiveStatus'; import getLatestFileKey from '../../../../../pages/api/workspace/getLatestFileKey'; @@ -101,7 +103,7 @@ export const E2EESection = ({ className="data-[state=checked]:bg-primary" id="autoCapitalization" isChecked={!bot.isActive} - onCheckedChange={async (state) => { + onCheckedChange={async () => { await toggleBotActivate(); }} > From 98efffafaa5bd28f2a68ce3a4e9f1331b375c814 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 12 Jun 2023 17:47:32 +0100 Subject: [PATCH 07/55] Patch subscription plan frontend validation --- backend/src/ee/services/EELicenseService.ts | 7 ++++ backend/src/helpers/organization.ts | 32 ++++++++++--------- backend/src/helpers/workspace.ts | 32 ++++++++++--------- frontend/src/hooks/api/subscriptions/types.ts | 2 +- frontend/src/layouts/AppLayout/AppLayout.tsx | 2 +- .../OrgSettingsPage/OrgSettingsPage.tsx | 2 +- 6 files changed, 44 insertions(+), 33 deletions(-) diff --git a/backend/src/ee/services/EELicenseService.ts b/backend/src/ee/services/EELicenseService.ts index 527a84730..c98a5a449 100644 --- a/backend/src/ee/services/EELicenseService.ts +++ b/backend/src/ee/services/EELicenseService.ts @@ -95,6 +95,13 @@ class EELicenseService { return this.globalFeatureSet; } + + public async refreshOrganizationPlan(organizationId: string) { + if (this.instanceType === 'cloud') { + this.localFeatureSet.del(organizationId); + await this.getOrganizationPlan(organizationId); + } + } public async initGlobalFeatureSet() { const licenseServerKey = await getLicenseServerKey(); diff --git a/backend/src/helpers/organization.ts b/backend/src/helpers/organization.ts index 71e8c15ce..3e7f169d0 100644 --- a/backend/src/helpers/organization.ts +++ b/backend/src/helpers/organization.ts @@ -153,22 +153,24 @@ export const updateSubscriptionOrgQuantity = async ({ EELicenseService.localFeatureSet.del(organizationId); } - - if (EELicenseService.instanceType === 'enterprise-self-hosted') { - // instance of Infisical is an enterprise self-hosted instance - - const usedSeats = await MembershipOrg.countDocuments({ - status: ACCEPTED - }); - - await licenseKeyRequest.patch( - `${await getLicenseServerUrl()}/api/license/v1/license`, - { - usedSeats - } - ); - } } + if (EELicenseService.instanceType === 'enterprise-self-hosted') { + // instance of Infisical is an enterprise self-hosted instance + + const usedSeats = await MembershipOrg.countDocuments({ + status: ACCEPTED + }); + + await licenseKeyRequest.patch( + `${await getLicenseServerUrl()}/api/license/v1/license`, + { + usedSeats + } + ); + } + + await EELicenseService.refreshOrganizationPlan(organizationId); + return stripeSubscription; }; \ No newline at end of file diff --git a/backend/src/helpers/workspace.ts b/backend/src/helpers/workspace.ts index a1d71e920..8b15d1baf 100644 --- a/backend/src/helpers/workspace.ts +++ b/backend/src/helpers/workspace.ts @@ -6,6 +6,7 @@ import { Secret } from '../models'; import { createBot } from '../helpers/bot'; +import { EELicenseService } from '../ee/services'; import { SecretService } from '../services'; /** @@ -22,24 +23,25 @@ export const createWorkspace = async ({ name: string; organizationId: string; }) => { - // create workspace - const workspace = await new Workspace({ - name, - organization: organizationId, - autoCapitalization: true - }).save(); + // create workspace + const workspace = await new Workspace({ + name, + organization: organizationId, + autoCapitalization: true + }).save(); - // initialize bot for workspace - await createBot({ - name: 'Infisical Bot', - workspaceId: workspace._id - }); + // initialize bot for workspace + await createBot({ + name: 'Infisical Bot', + workspaceId: workspace._id + }); - // initialize blind index salt for workspace - await SecretService.createSecretBlindIndexData({ - workspaceId: workspace._id - }); + // initialize blind index salt for workspace + await SecretService.createSecretBlindIndexData({ + workspaceId: workspace._id + }); + await EELicenseService.refreshOrganizationPlan(organizationId); return workspace; }; diff --git a/frontend/src/hooks/api/subscriptions/types.ts b/frontend/src/hooks/api/subscriptions/types.ts index 5d01611bd..61736b4f4 100644 --- a/frontend/src/hooks/api/subscriptions/types.ts +++ b/frontend/src/hooks/api/subscriptions/types.ts @@ -1,7 +1,7 @@ export type SubscriptionPlan = { _id: string; membersUsed: number; - membersLimit: number; + memberLimit: number; auditLogs: boolean; customAlerts: boolean; customRateLimits: boolean; diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index be04e0bad..7ce1f33d2 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -61,7 +61,7 @@ export const AppLayout = ({ children }: LayoutProps) => { const { subscription } = useSubscription(); const host = window.location.origin; - const isAddingProjectsAllowed = ((subscription?.workspacesUsed || 1) < (subscription?.workspaceLimit || 3)) || host !== 'https://app.infisical.com'; + const isAddingProjectsAllowed = subscription?.workspaceLimit ? (subscription.workspacesUsed < subscription.workspaceLimit) : true; const createWs = useCreateWorkspace(); const uploadWsKey = useUploadWsKey(); diff --git a/frontend/src/views/Settings/OrgSettingsPage/OrgSettingsPage.tsx b/frontend/src/views/Settings/OrgSettingsPage/OrgSettingsPage.tsx index edf4e98a7..a0097b6aa 100644 --- a/frontend/src/views/Settings/OrgSettingsPage/OrgSettingsPage.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/OrgSettingsPage.tsx @@ -60,7 +60,7 @@ export const OrgSettingsPage = () => { const [completeInviteLink, setcompleteInviteLink] = useState(''); - const isMoreUsersNotAllowed = ((subscription?.membersUsed || 0) >= (subscription?.membersLimit || 1)) && host === 'https://app.infisical.com'; + const isMoreUsersNotAllowed = subscription?.memberLimit ? (subscription.membersUsed >= subscription.memberLimit) : false; const onRenameOrg = async (name: string) => { if (!currentOrg?._id) return; From 9dd0dac2f9c4ebb856f173437237db9129973071 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 12 Jun 2023 18:07:15 +0100 Subject: [PATCH 08/55] Patch frontend lint error --- frontend/src/layouts/AppLayout/AppLayout.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index 7ce1f33d2..6a74950c0 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -60,7 +60,6 @@ export const AppLayout = ({ children }: LayoutProps) => { const { user } = useUser(); const { subscription } = useSubscription(); - const host = window.location.origin; const isAddingProjectsAllowed = subscription?.workspaceLimit ? (subscription.workspacesUsed < subscription.workspaceLimit) : true; const createWs = useCreateWorkspace(); From d99c54ca50ecf26cfeac0ba308696b59aa78ef82 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Mon, 12 Jun 2023 15:38:12 -0700 Subject: [PATCH 09/55] Switched intercom to layout --- Dockerfile.standalone-infisical | 4 ++ frontend/Dockerfile | 4 ++ frontend/next.config.js | 2 +- .../src/components/signup/TeamInviteStep.tsx | 2 +- .../src/components/utilities/config/index.ts | 5 +- frontend/src/layouts/AppLayout/AppLayout.tsx | 57 +++++++++++++++++++ frontend/src/pages/_app.tsx | 41 +------------ 7 files changed, 71 insertions(+), 44 deletions(-) diff --git a/Dockerfile.standalone-infisical b/Dockerfile.standalone-infisical index 12325fedd..3161ae4cb 100644 --- a/Dockerfile.standalone-infisical +++ b/Dockerfile.standalone-infisical @@ -25,6 +25,8 @@ ARG POSTHOG_HOST ENV NEXT_PUBLIC_POSTHOG_HOST $POSTHOG_HOST ARG POSTHOG_API_KEY ENV NEXT_PUBLIC_POSTHOG_API_KEY $POSTHOG_API_KEY +ARG INTERCOM_ID +ENV NEXT_PUBLIC_INTERCOM_ID $INTERCOM_ID # Build RUN npm run build @@ -42,6 +44,8 @@ VOLUME /app/.next/cache/images ARG POSTHOG_API_KEY ENV NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY \ BAKED_NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY +ARG INTERCOM_ID +ENV NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID COPY --chown=nextjs:nodejs --chmod=555 frontend/scripts ./scripts COPY --from=frontend-builder /app/public ./public diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 520f0fb7f..c39b2ca06 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -28,6 +28,8 @@ ARG POSTHOG_HOST ENV NEXT_PUBLIC_POSTHOG_HOST $POSTHOG_HOST ARG POSTHOG_API_KEY ENV NEXT_PUBLIC_POSTHOG_API_KEY $POSTHOG_API_KEY +ARG INTERCOM_ID +ENV NEXT_PUBLIC_INTERCOM_ID $INTERCOM_ID # Build RUN npm run build @@ -46,6 +48,8 @@ VOLUME /app/.next/cache/images ARG POSTHOG_API_KEY ENV NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY \ BAKED_NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY +ARG INTERCOM_ID +ENV NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID COPY --chown=nextjs:nodejs --chmod=555 scripts ./scripts COPY --from=builder /app/public ./public diff --git a/frontend/next.config.js b/frontend/next.config.js index 213ba07e1..0816161ff 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -10,7 +10,7 @@ const ContentSecurityPolicy = ` script-src 'self' https://app.posthog.com https://js.stripe.com https://api.stripe.com https://widget.intercom.io https://js.intercomcdn.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' https://rsms.me 'unsafe-inline'; child-src https://api.stripe.com; - frame-src https://js.stripe.com/ https://api.stripe.com; + frame-src https://js.stripe.com/ https://api.stripe.com https://www.youtube.com/; connect-src 'self' wss://nexus-websocket-a.intercom.io https://api-iam.intercom.io https://api.heroku.com/ https://id.heroku.com/oauth/authorize https://id.heroku.com/oauth/token https://checkout.stripe.com https://app.posthog.com https://api.stripe.com; img-src 'self' https://static.intercomassets.com https://js.intercomcdn.com https://downloads.intercomcdn.com https://*.stripe.com https://i.ytimg.com/ data:; media-src https://js.intercomcdn.com; diff --git a/frontend/src/components/signup/TeamInviteStep.tsx b/frontend/src/components/signup/TeamInviteStep.tsx index 60628e1c2..2ff70ec59 100644 --- a/frontend/src/components/signup/TeamInviteStep.tsx +++ b/frontend/src/components/signup/TeamInviteStep.tsx @@ -23,7 +23,7 @@ export default function TeamInviteStep(): JSX.Element { const redirectToHome = async () => { const userWorkspaces = await getWorkspaces(); const userWorkspace = userWorkspaces[0]._id; - router.push(`/home/${userWorkspace}`); + router.push(`/dashboard/${userWorkspace}`); }; const inviteUsers = async ({ emails: inviteEmails }: { emails: string }) => { diff --git a/frontend/src/components/utilities/config/index.ts b/frontend/src/components/utilities/config/index.ts index 7570785ba..acdbb4674 100644 --- a/frontend/src/components/utilities/config/index.ts +++ b/frontend/src/components/utilities/config/index.ts @@ -4,11 +4,12 @@ const POSTHOG_HOST = process.env.NEXT_PUBLIC_POSTHOG_HOST! || "https://app.posthog.com"; const STRIPE_PRODUCT_PRO = process.env.NEXT_PUBLIC_STRIPE_PRODUCT_PRO!; const STRIPE_PRODUCT_STARTER = process.env.NEXT_PUBLIC_STRIPE_PRODUCT_STARTER!; +const INTERCOM_ID = process.env.NEXT_PUBLIC_INTERCOM_ID!; export { ENV, + INTERCOM_ID, POSTHOG_API_KEY, POSTHOG_HOST, STRIPE_PRODUCT_PRO, - STRIPE_PRODUCT_STARTER -}; \ No newline at end of file + STRIPE_PRODUCT_STARTER}; \ No newline at end of file diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index 6a74950c0..a2e052588 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -1,6 +1,10 @@ /* eslint-disable no-nested-ternary */ /* eslint-disable no-unexpected-multiline */ /* eslint-disable react-hooks/exhaustive-deps */ +/* eslint-disable vars-on-top */ +/* eslint-disable no-var */ +/* eslint-disable func-names */ +// @ts-nocheck import crypto from 'crypto'; import { useEffect, useState } from 'react'; @@ -17,6 +21,7 @@ import * as yup from 'yup'; import { useNotificationContext } from '@app/components/context/Notifications/NotificationProvider'; import onboardingCheck from '@app/components/utilities/checks/OnboardingCheck'; import { tempLocalStorage } from '@app/components/utilities/checks/tempLocalStorage'; +import { INTERCOM_ID } from '@app/components/utilities/config'; import { encryptAssymmetric } from '@app/components/utilities/cryptography/crypto'; import { Button, @@ -85,6 +90,58 @@ export const AppLayout = ({ children }: LayoutProps) => { const { t } = useTranslation(); + useEffect(() => { + // Intercom code snippet + (function() { + var w=window;var ic=w.Intercom; + if(typeof ic==="function") { + ic('reattach_activator'); + ic('update',w.intercomSettings); + } else { + var d=document; + var i=function() { + // eslint-disable-next-line prefer-rest-params + i.c(arguments); + }; + i.q=[]; + i.c=function(args) { + i.q.push(args); + }; + w.Intercom=i; + var l=function() { + var s=d.createElement('script'); + s.type='text/javascript'; + s.async=true; + s.src=`https://widget.intercom.io/widget/${INTERCOM_ID}`; + var x=d.getElementsByTagName('script')[0]; + x.parentNode.insertBefore(s,x);}; + if(w.attachEvent) { + w.attachEvent('onload',l); + } else { + w.addEventListener('load',l,false); + } + } + } + )(); + + window.Intercom('boot', { + app_id: {INTERCOM_ID}, + email: user.email || 'undefined' + }); + }, []); + + useEffect(() => { + const handleRouteChange = () => { + (window).Intercom('update'); + }; + + router.events.on('routeChangeComplete', handleRouteChange); + + return () => { + router.events.off('routeChangeComplete', handleRouteChange); + }; + }, []); + // TODO(akhilmhdh): This entire logic will be rechecked and will try to avoid // Placing the localstorage as much as possible // Wait till tony integrates the azure and its launched diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 3cfea7b47..5c5f95564 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -38,51 +38,12 @@ type NextAppProp = AppProps & { const App = ({ Component, pageProps, ...appProps }: NextAppProp): JSX.Element => { const router = useRouter(); - useEffect(() => { - // Intercom code snippet - (function() { - var w=window;var ic=w.Intercom; - if(typeof ic==="function") { - ic('reattach_activator'); - ic('update',w.intercomSettings); - } else { - var d=document; - var i=function() { - // eslint-disable-next-line prefer-rest-params - i.c(arguments); - }; - i.q=[]; - i.c=function(args) { - i.q.push(args); - }; - w.Intercom=i; - var l=function() { - var s=d.createElement('script'); - s.type='text/javascript'; - s.async=true; - s.src='https://widget.intercom.io/widget/hsg644ru'; - var x=d.getElementsByTagName('script')[0]; - x.parentNode.insertBefore(s,x);}; - if(w.attachEvent) { - w.attachEvent('onload',l); - } else { - w.addEventListener('load',l,false); - } - } - } - )(); - - window.Intercom('boot', { - app_id: 'hsg644ru' - }); - }, []); - useEffect(() => { // Init for auto capturing const telemetry = new Telemetry().getInstance(); const handleRouteChange = () => { - (window).Intercom('update'); + // (window).Intercom('update'); if (typeof window !== 'undefined') { telemetry.capture('$pageview'); } From c13d5e29f43509cc8f22ec524d01f863660baaa0 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Mon, 12 Jun 2023 16:19:27 -0700 Subject: [PATCH 10/55] add intercom env replace during start up --- Dockerfile.standalone-infisical | 3 ++- frontend/Dockerfile | 3 ++- frontend/scripts/start.sh | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile.standalone-infisical b/Dockerfile.standalone-infisical index 3161ae4cb..8770bb234 100644 --- a/Dockerfile.standalone-infisical +++ b/Dockerfile.standalone-infisical @@ -45,7 +45,8 @@ ARG POSTHOG_API_KEY ENV NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY \ BAKED_NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY ARG INTERCOM_ID -ENV NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID +ENV NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID \ + BAKED_NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID COPY --chown=nextjs:nodejs --chmod=555 frontend/scripts ./scripts COPY --from=frontend-builder /app/public ./public diff --git a/frontend/Dockerfile b/frontend/Dockerfile index c39b2ca06..b33d63b4f 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -49,7 +49,8 @@ ARG POSTHOG_API_KEY ENV NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY \ BAKED_NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY ARG INTERCOM_ID -ENV NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID +ENV NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID \ + BAKED_NEXT_PUBLIC_INTERCOM_ID=$INTERCOM_ID COPY --chown=nextjs:nodejs --chmod=555 scripts ./scripts COPY --from=builder /app/public ./public diff --git a/frontend/scripts/start.sh b/frontend/scripts/start.sh index fea97eb6b..1db867e15 100644 --- a/frontend/scripts/start.sh +++ b/frontend/scripts/start.sh @@ -2,6 +2,8 @@ scripts/replace-variable.sh "$BAKED_NEXT_PUBLIC_POSTHOG_API_KEY" "$NEXT_PUBLIC_POSTHOG_API_KEY" +scripts/replace-variable.sh "$BAKED_NEXT_PUBLIC_INTERCOM_ID" "$NEXT_PUBLIC_INTERCOM_ID" + if [ "$TELEMETRY_ENABLED" != "false" ]; then echo "Telemetry is enabled" scripts/set-telemetry.sh true From 22ca4f2e92771ea1e6b48fe97547c6539687dc73 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Mon, 12 Jun 2023 20:56:19 -0700 Subject: [PATCH 11/55] Fixed the typeerror issue --- frontend/src/layouts/AppLayout/AppLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index a2e052588..97b27f885 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -125,8 +125,8 @@ export const AppLayout = ({ children }: LayoutProps) => { )(); window.Intercom('boot', { - app_id: {INTERCOM_ID}, - email: user.email || 'undefined' + app_id: {INTERCOM_ID} || "undefined", + email: user?.email || 'undefined' }); }, []); From 41dd2fda8afbc4a3f862e07de067e5156570c6e3 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Mon, 12 Jun 2023 21:42:29 -0700 Subject: [PATCH 12/55] Changed the intercom to aprovider model --- .../components/utilities/intercom/intercom.ts | 64 +++++++++++++++++++ .../utilities/intercom/intercomProvider.ts | 37 +++++++++++ frontend/src/layouts/AppLayout/AppLayout.tsx | 41 ------------ frontend/src/pages/_app.tsx | 9 ++- 4 files changed, 107 insertions(+), 44 deletions(-) create mode 100644 frontend/src/components/utilities/intercom/intercom.ts create mode 100644 frontend/src/components/utilities/intercom/intercomProvider.ts diff --git a/frontend/src/components/utilities/intercom/intercom.ts b/frontend/src/components/utilities/intercom/intercom.ts new file mode 100644 index 000000000..c2cb3f597 --- /dev/null +++ b/frontend/src/components/utilities/intercom/intercom.ts @@ -0,0 +1,64 @@ +/* eslint-disable prefer-template */ +/* eslint-disable prefer-rest-params */ +/* eslint-disable @typescript-eslint/no-unused-expressions */ +/* eslint-disable no-nested-ternary */ +/* eslint-disable no-unexpected-multiline */ +/* eslint-disable react-hooks/exhaustive-deps */ +/* eslint-disable vars-on-top */ +/* eslint-disable no-var */ +/* eslint-disable func-names */ +// @ts-nocheck + +import { INTERCOM_ID as APP_ID } from '@app/components/utilities/config'; + +// Loads Intercom with the snippet +// This must be run before boot, it initializes window.Intercom + +// prettier-ignore +export const load = () => { + (function(){ + var w=window; + var ic=w.Intercom; + + if(typeof ic==="function"){ + ic('reattach_activator'); + ic('update',w.intercomSettings); + } else { + var d=document; + var i=function() { + i.c(arguments); + }; + i.q=[]; + i.c=function(args) { + i.q.push(args); + }; + w.Intercom=i; + var l=function() { + var s=d.createElement('script'); + s.type='text/javascript'; + s.async=true; + s.src='https://widget.intercom.io/widget/' + APP_ID; + var x=d.getElementsByTagName('script')[0]; + x.parentNode.insertBefore(s, x); + }; + if (document.readyState==='complete') { + l(); + } else if (w.attachEvent) { + w.attachEvent('onload',l); + } else { + w.addEventListener('load',l,false); + } + } + })(); +} + +// Initializes Intercom +export const boot = (options = {}) => { + window && + window.Intercom && + window.Intercom("boot", { app_id: APP_ID, ...options }); +}; + +export const update = () => { + window && window.Intercom && window.Intercom("update"); +}; \ No newline at end of file diff --git a/frontend/src/components/utilities/intercom/intercomProvider.ts b/frontend/src/components/utilities/intercom/intercomProvider.ts new file mode 100644 index 000000000..e7944a7b1 --- /dev/null +++ b/frontend/src/components/utilities/intercom/intercomProvider.ts @@ -0,0 +1,37 @@ +import { useEffect } from "react"; +import { useRouter } from "next/router"; + +import { + boot as bootIntercom, + load as loadIntercom, + update as updateIntercom, +} from "./intercom"; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export const IntercomProvider = ({ children }: { children: any }) => { + const router = useRouter(); + + if (typeof window !== "undefined") { + loadIntercom(); + bootIntercom(); + } + + useEffect(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const handleRouteChange = (url: string) => { + if (typeof window !== "undefined") { + updateIntercom(); + } + }; + + router.events.on("routeChangeStart", handleRouteChange); + + // If the component is unmounted, unsubscribe + // from the event with the `off` method: + return () => { + router.events.off("routeChangeStart", handleRouteChange); + }; + }, [router.events]); + + return children; +}; \ No newline at end of file diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index 97b27f885..643d7376d 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -21,7 +21,6 @@ import * as yup from 'yup'; import { useNotificationContext } from '@app/components/context/Notifications/NotificationProvider'; import onboardingCheck from '@app/components/utilities/checks/OnboardingCheck'; import { tempLocalStorage } from '@app/components/utilities/checks/tempLocalStorage'; -import { INTERCOM_ID } from '@app/components/utilities/config'; import { encryptAssymmetric } from '@app/components/utilities/cryptography/crypto'; import { Button, @@ -90,46 +89,6 @@ export const AppLayout = ({ children }: LayoutProps) => { const { t } = useTranslation(); - useEffect(() => { - // Intercom code snippet - (function() { - var w=window;var ic=w.Intercom; - if(typeof ic==="function") { - ic('reattach_activator'); - ic('update',w.intercomSettings); - } else { - var d=document; - var i=function() { - // eslint-disable-next-line prefer-rest-params - i.c(arguments); - }; - i.q=[]; - i.c=function(args) { - i.q.push(args); - }; - w.Intercom=i; - var l=function() { - var s=d.createElement('script'); - s.type='text/javascript'; - s.async=true; - s.src=`https://widget.intercom.io/widget/${INTERCOM_ID}`; - var x=d.getElementsByTagName('script')[0]; - x.parentNode.insertBefore(s,x);}; - if(w.attachEvent) { - w.attachEvent('onload',l); - } else { - w.addEventListener('load',l,false); - } - } - } - )(); - - window.Intercom('boot', { - app_id: {INTERCOM_ID} || "undefined", - email: user?.email || 'undefined' - }); - }, []); - useEffect(() => { const handleRouteChange = () => { (window).Intercom('update'); diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 5c5f95564..c1a561261 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -11,6 +11,7 @@ import { config } from '@fortawesome/fontawesome-svg-core'; import { QueryClientProvider } from '@tanstack/react-query'; import NotificationProvider from '@app/components/context/Notifications/NotificationProvider'; +import { IntercomProvider } from '@app/components/utilities/intercom/intercomProvider'; import Telemetry from '@app/components/utilities/telemetry/Telemetry'; import { TooltipProvider } from '@app/components/v2'; import { publicPaths } from '@app/const'; @@ -81,9 +82,11 @@ const App = ({ Component, pageProps, ...appProps }: NextAppProp): JSX.Element => - - - + + + + + From 37d2d580f49b16bb6012876df6d32b231f547e51 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 13 Jun 2023 10:02:10 +0100 Subject: [PATCH 13/55] Improve API docs for non-E2EE --- backend/src/routes/v3/secrets.ts | 1 - .../api-reference/overview/authentication.mdx | 37 ++- .../overview/encryption-modes/es-mode.mdx | 92 ------- .../overview/encryption-modes/overview.mdx | 57 ----- .../overview/examples/create-secret.mdx | 233 ------------------ .../overview/examples/delete-secret.mdx | 94 ------- .../overview/examples/e2ee-disabled.mdx | 176 +++++++++++++ .../e2ee-enabled.mdx} | 21 +- docs/api-reference/overview/examples/note.mdx | 54 ++++ .../overview/examples/retrieve-secret.mdx | 180 -------------- .../overview/examples/retrieve-secrets.mdx | 195 --------------- .../overview/examples/update-secret.mdx | 229 ----------------- docs/mint.json | 6 +- 13 files changed, 259 insertions(+), 1116 deletions(-) delete mode 100644 docs/api-reference/overview/encryption-modes/es-mode.mdx delete mode 100644 docs/api-reference/overview/encryption-modes/overview.mdx delete mode 100644 docs/api-reference/overview/examples/create-secret.mdx delete mode 100644 docs/api-reference/overview/examples/delete-secret.mdx create mode 100644 docs/api-reference/overview/examples/e2ee-disabled.mdx rename docs/api-reference/overview/{encryption-modes/e2ee-mode.mdx => examples/e2ee-enabled.mdx} (97%) create mode 100644 docs/api-reference/overview/examples/note.mdx delete mode 100644 docs/api-reference/overview/examples/retrieve-secret.mdx delete mode 100644 docs/api-reference/overview/examples/retrieve-secrets.mdx delete mode 100644 docs/api-reference/overview/examples/update-secret.mdx diff --git a/backend/src/routes/v3/secrets.ts b/backend/src/routes/v3/secrets.ts index 1f3e239be..56573dd9f 100644 --- a/backend/src/routes/v3/secrets.ts +++ b/backend/src/routes/v3/secrets.ts @@ -23,7 +23,6 @@ import { router.get( "/raw", query("workspaceId").exists().isString().trim(), - query("workspaceId").exists().isString().trim(), query("environment").exists().isString().trim(), query("secretPath").default("/").isString().trim(), validateRequest, diff --git a/docs/api-reference/overview/authentication.mdx b/docs/api-reference/overview/authentication.mdx index 8bad0114f..5fa4fbc30 100644 --- a/docs/api-reference/overview/authentication.mdx +++ b/docs/api-reference/overview/authentication.mdx @@ -3,32 +3,29 @@ title: "Authentication" description: "How to authenticate with the Infisical Public API" --- -## Essentials +The Public API accepts multiple modes of authentication being via [Infisical Token](/documentation/platform/token) or API Key. -The Public API accepts multiple modes of authentication being via API Key or [Infisical Token](/documentation/platform/token). - -- API Key: Provides full access to all endpoints representing the user without ability to encrypt/decrypt secrets in **E2EE** mode. - [Infisical Token](/documentation/platform/token): Provides short-lived, scoped CRUD access to the secrets of a specific project and environment. +- API Key: Provides full access to all endpoints representing the user without ability to encrypt/decrypt secrets for **E2EE** endpoints. - - -The API key mode uses an API key to authenticate with the API. + + + The Infisical Token mode uses an Infisical Token to authenticate with the API. -To authenticate requests with Infisical using the API Key, you must include an API key in the `X-API-KEY` header of HTTP requests made to the platform. + To authenticate requests with Infisical using the Infisical Token, you must include your Infisical Token in the `Authorization` header of HTTP requests made to the platform with the value `Bearer `. -You can obtain an API key in User Settings > API Keys + You can obtain an Infisical Token in Project Settings > Service Tokens. -![API key dashboard](../../images/api-key-dashboard.png) -![API key in personal settings](../../images/api-key-settings.png) - - + ![token add](../../images/project-token-add.png) + + + The API key mode uses an API key to authenticate with the API. -The Infisical Token mode uses an Infisical Token to authenticate with the API. + To authenticate requests with Infisical using the API Key, you must include an API key in the `X-API-KEY` header of HTTP requests made to the platform. -To authenticate requests with Infisical using the Infisical Token, you must include your Infisical Token in the `Authorization` header of HTTP requests made to the platform with the value `Bearer `. + You can obtain an API key in User Settings > API Keys -You can obtain an Infisical Token in Project Settings > Service Tokens. - -![token add](../../images/project-token-add.png) - - \ No newline at end of file + ![API key dashboard](../../images/api-key-dashboard.png) + ![API key in personal settings](../../images/api-key-settings.png) + + \ No newline at end of file diff --git a/docs/api-reference/overview/encryption-modes/es-mode.mdx b/docs/api-reference/overview/encryption-modes/es-mode.mdx deleted file mode 100644 index 2756980ac..000000000 --- a/docs/api-reference/overview/encryption-modes/es-mode.mdx +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "ES Mode" ---- - -Encrypted Standard (ES) mode is the easiest way to use Infisical's API. With it, you can make HTTP calls to Infisical -to read/write secrets in plaintext. - -Prerequisites: - -- Set up and add envars to [Infisical Cloud](https://app.infisical.com). -- Create an [Infisical Token](/documentation/platform/token) for your project and environment with write access enabled. -- [Ensure that your project is blind-indexed](../blind-indices). - -Below, we showcase how to execute common CRUD operations to manage secrets in **ES** mode: - - - - - - ```bash - curl --location --request GET 'http://localhost:8080/api/v3/secrets/raw?environment=dev&workspaceId=xxx' \ - --header 'Authorization: Bearer st.xxx' - - ``` - - - - - - - ```bash - curl --location --request POST 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME' \ - --header 'Authorization: Bearer st.xxx' \ - --header 'Content-Type: application/json' \ - --data-raw '{ - "workspaceId": "xxx", - "environment": "dev", - "type": "shared", - "secretValue": "SECRET_VALUE", - "secretPath": "/" - }' - ``` - - - - - - - ```bash - curl --location --request GET 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME?workspaceId=xxx&environment=dev&secretPath=/' \ - --header 'Authorization: Bearer st.xxx' - ``` - - - - - - - ```bash - curl --location --request PATCH 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME' \ - --header 'Authorization: Bearer st.xxx' \ - --header 'Content-Type: application/json' \ - --data-raw '{ - "workspaceId": "xxx", - "environment": "dev", - "type": "shared", - "secretValue": "SECRET_VALUE", - "secretPath": "/" - }' - ``` - - - - - - - ```bash - curl --location --request DELETE 'http://localhost:8080/api/v3/secrets/raw/SECRET_NAME' \ - --header 'Authorization: Bearer st.xxx' \ - --header 'Content-Type: application/json' \ - --data-raw '{ - "workspaceId": "xxx", - "environment": "dev", - "type": "shared", - "secretValue": "SECRET_VALUE", - "secretPath": "/" - }' - ``` - - - - diff --git a/docs/api-reference/overview/encryption-modes/overview.mdx b/docs/api-reference/overview/encryption-modes/overview.mdx deleted file mode 100644 index 84606d114..000000000 --- a/docs/api-reference/overview/encryption-modes/overview.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Preface" ---- - -Each project in Infisical can be used either in **End-to-End Encrypted (E2EE)** mode or **Encrypted Standard (ES)** mode which dictates how it can be interacted with via the Infisical API. - - - - Secret operations without client-side encryption/decryption - - - Secret operations with client-side encryption/decryption - - - -By default, all projects are initialized in **E2EE** mode which means the server is not able to decrypt any values because all secret encryption/decryption operations occur on the client-side. However, this has limitations around functionality and ease-of-use: - -- You cannot make HTTP calls to Infisical to read/write secrets in plaintext. -- You cannot leverage non-E2EE features like native integrations and in-platform automations like dynamic secrets and secret rotation. - -For this reason, Infisical also provides the **ES** mode of operation to unlock the above limitations by enabling the server to decrypt your values. You can optionally switch a project to using **ES** mode -in your Project Settings. - - - Make no mistake, the limitations of **E2EE** mode do not prevent you from syncing secrets from Infisical to platforms like GitLab. They just imply - that you have to do things the "E2EE-way" such as by embedding the Infisical CLI into your GitLab CI/CD pipelines to fetch and decrypt - secrets on the client-side. - - -## FAQ - - - - We recommend starting with **E2EE** mode and switching to **ES** mode when: - - - Your team needs more power out of non-E2EE features available in **ES** mode such as secret rotation, dynamic secrets, etc. - - Your team wants an easier way to read/write secrets with Infisical. - - - - By default, all projects in Infisical are initialized to **E2EE** mode and can be switched to **ES** mode in the Project Settings by disabling end-to-end encryption. - - - **ES** mode is secure and in fact what most vendors in the secret management industry are doing at the moment. In this mode, secrets are encrypted at rest by - a series of keys, secured ultimately by a top-level `ROOT_ENCRYPTION_KEY` located on the server. - - If you're concerned about Infisical Cloud's ability to read your secrets if using **ES** mode in Infisical Cloud, then you may wish to - use Infisical Cloud in **E2EE** mode or self-host Infisical on your own infrastructure and then use **ES** mode; this of course which means setting up firewalls and securing the instance yourself. - - As an organization, we prohibit reading any customer secrets without explicit permission; access to the `ROOT_ENCRYPTION_KEY` is restricted to one individual in the organization. - - \ No newline at end of file diff --git a/docs/api-reference/overview/examples/create-secret.mdx b/docs/api-reference/overview/examples/create-secret.mdx deleted file mode 100644 index 4ea787ff0..000000000 --- a/docs/api-reference/overview/examples/create-secret.mdx +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: "Create secret" -description: "How to add a secret using an Infisical Token scoped to a project and environment" ---- - -Prerequisites: - -- Set up and add envars to [Infisical Cloud](https://app.infisical.com). -- Create an [Infisical Token](/documentation/platform/token) for your project and environment with write access enabled. -- Grasp a basic understanding of the system and its underlying cryptography [here](/api-reference/overview/introduction). -- [Ensure that your project is blind-indexed](../blind-indices). - -## Flow - -1. [Get your Infisical Token data](/api-reference/endpoints/service-tokens/get) including a (encrypted) project key. -2. Decrypt the (encrypted) project key with the key from your Infisical Token. -3. Encrypt your secret with the project key -4. [Send (encrypted) secret to Infisical](/api-reference/endpoints/secrets/create) - -## Example - - - -```js -const crypto = require('crypto'); -const axios = require('axios'); -const nacl = require('tweetnacl'); - -const BASE_URL = 'https://app.infisical.com'; -const ALGORITHM = 'aes-256-gcm'; -const BLOCK_SIZE_BYTES = 16; - -const encrypt = ({ text, secret }) => { - const iv = crypto.randomBytes(BLOCK_SIZE_BYTES); - const cipher = crypto.createCipheriv(ALGORITHM, secret, iv); - - let ciphertext = cipher.update(text, 'utf8', 'base64'); - ciphertext += cipher.final('base64'); - return { - ciphertext, - iv: iv.toString('base64'), - tag: cipher.getAuthTag().toString('base64') - }; -} - -const decrypt = ({ ciphertext, iv, tag, secret}) => { - const decipher = crypto.createDecipheriv( - ALGORITHM, - secret, - Buffer.from(iv, 'base64') - ); - decipher.setAuthTag(Buffer.from(tag, 'base64')); - - let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); - cleartext += decipher.final('utf8'); - - return cleartext; -} - -const createSecrets = async () => { - const serviceToken = ''; - const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); - - const secretType = 'shared'; // 'shared' or 'personal' - const secretKey = 'some_key'; - const secretValue = 'some_value'; - const secretComment = 'some_comment'; - - // 1. Get your Infisical Token data - const { data: serviceTokenData } = await axios.get( - `${BASE_URL}/api/v2/service-token`, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); - - // 2. Decrypt the (encrypted) project key with the key from your Infisical Token - const projectKey = decrypt({ - ciphertext: serviceTokenData.encryptedKey, - iv: serviceTokenData.iv, - tag: serviceTokenData.tag, - secret: serviceTokenSecret - }); - - // 3. Encrypt your secret with the project key - const { - ciphertext: secretKeyCiphertext, - iv: secretKeyIV, - tag: secretKeyTag - } = encrypt({ - text: secretKey, - secret: projectKey - }); - - const { - ciphertext: secretValueCiphertext, - iv: secretValueIV, - tag: secretValueTag - } = encrypt({ - text: secretValue, - secret: projectKey - }); - - const { - ciphertext: secretCommentCiphertext, - iv: secretCommentIV, - tag: secretCommentTag - } = encrypt({ - text: secretComment, - secret: projectKey - }); - - // 4. Send (encrypted) secret to Infisical - await axios.post( - `${BASE_URL}/api/v3/secrets/${secretKey}`, - { - workspaceId: serviceTokenData.workspace, - environment: serviceTokenData.environment, - type: secretType, - secretKeyCiphertext, - secretKeyIV, - secretKeyTag, - secretValueCiphertext, - secretValueIV, - secretValueTag, - secretCommentCiphertext, - secretCommentIV, - secretCommentTag - }, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); -} - -createSecrets(); -``` - - - -```Python -import base64 -import requests -from Cryptodome.Cipher import AES -from Cryptodome.Random import get_random_bytes - - -BASE_URL = "https://app.infisical.com" -BLOCK_SIZE_BYTES = 16 - - -def encrypt(text, secret): - iv = get_random_bytes(BLOCK_SIZE_BYTES) - secret = bytes(secret, "utf-8") - cipher = AES.new(secret, AES.MODE_GCM, iv) - ciphertext, tag = cipher.encrypt_and_digest(text.encode("utf-8")) - return { - "ciphertext": base64.standard_b64encode(ciphertext).decode("utf-8"), - "tag": base64.standard_b64encode(tag).decode("utf-8"), - "iv": base64.standard_b64encode(iv).decode("utf-8"), - } - - -def decrypt(ciphertext, iv, tag, secret): - secret = bytes(secret, "utf-8") - iv = base64.standard_b64decode(iv) - tag = base64.standard_b64decode(tag) - ciphertext = base64.standard_b64decode(ciphertext) - - cipher = AES.new(secret, AES.MODE_GCM, iv) - cipher.update(tag) - cleartext = cipher.decrypt(ciphertext).decode("utf-8") - return cleartext - - -def create_secrets(): - service_token = "your_service_token" - service_token_secret = service_token[service_token.rindex(".") + 1 :] - - secret_type = "shared" # "shared or "personal" - secret_key = "some_key" - secret_value = "some_value" - secret_comment = "some_comment" - - # 1. Get your Infisical Token data - service_token_data = requests.get( - f"{BASE_URL}/api/v2/service-token", - headers={"Authorization": f"Bearer {service_token}"}, - ).json() - - # 2. Decrypt the (encrypted) project key with the key from your Infisical Token - project_key = decrypt( - ciphertext=service_token_data["encryptedKey"], - iv=service_token_data["iv"], - tag=service_token_data["tag"], - secret=service_token_secret, - ) - - # 3. Encrypt your secret with the project key - encrypted_key_data = encrypt(text=secret_key, secret=project_key) - encrypted_value_data = encrypt(text=secret_value, secret=project_key) - encrypted_comment_data = encrypt(text=secret_comment, secret=project_key) - - # 4. Send (encrypted) secret to Infisical - requests.post( - f"{BASE_URL}/api/v3/secrets/{secret_key}", - json={ - "workspaceId": service_token_data["workspace"], - "environment": service_token_data["environment"], - "type": secret_type, - "secretKeyCiphertext": encrypted_key_data["ciphertext"], - "secretKeyIV": encrypted_key_data["iv"], - "secretKeyTag": encrypted_key_data["tag"], - "secretValueCiphertext": encrypted_value_data["ciphertext"], - "secretValueIV": encrypted_value_data["iv"], - "secretValueTag": encrypted_value_data["tag"], - "secretCommentCiphertext": encrypted_comment_data["ciphertext"], - "secretCommentIV": encrypted_comment_data["iv"], - "secretCommentTag": encrypted_comment_data["tag"] - }, - headers={"Authorization": f"Bearer {service_token}"}, - ) - - -create_secrets() - -``` - - \ No newline at end of file diff --git a/docs/api-reference/overview/examples/delete-secret.mdx b/docs/api-reference/overview/examples/delete-secret.mdx deleted file mode 100644 index ff2ec687c..000000000 --- a/docs/api-reference/overview/examples/delete-secret.mdx +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "Delete secret" -description: "How to delete a secret using an Infisical Token scoped to a project and environment" ---- - -Prerequisites: - -- Set up and add envars to [Infisical Cloud](https://app.infisical.com). -- Create either an [API Key](/api-reference/overview/authentication) or [Infisical Token](/documentation/platform/token) for your project and environment with write access enabled. -- Grasp a basic understanding of the system and its underlying cryptography [here](/api-reference/overview/introduction). -- [Ensure that your project is blind-indexed](../blind-indices). - -## Example - - - -```js -const axios = require('axios'); -const BASE_URL = 'https://app.infisical.com'; - -const deleteSecrets = async () => { - const serviceToken = 'your_service_token'; - const secretType = 'shared' // 'shared' or 'personal' - const secretKey = 'some_key' - - // 1. Get your Infisical Token data - const { data: serviceTokenData } = await axios.get( - `${BASE_URL}/api/v2/service-token`, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); - - // 2. Delete secret from Infisical - await axios.delete( - `${BASE_URL}/api/v3/secrets/${secretKey}`, - { - workspaceId: serviceTokenData.workspace, - environment: serviceTokenData.environment, - type: secretType - }, - { - headers: { - Authorization: `Bearer ${serviceToken}` - }, - } - ); -}; - -deleteSecrets(); -``` - - - -```Python -import requests - -BASE_URL = "https://app.infisical.com" - - -def delete_secrets(): - service_token = "" - secret_type = "shared" # "shared" or "personal" - secret_key = "some_key" - - # 1. Get your Infisical Token data - service_token_data = requests.get( - f"{BASE_URL}/api/v2/service-token", - headers={"Authorization": f"Bearer {service_token}"}, - ).json() - - # 2. Delete secret from Infisical - requests.delete( - f"{BASE_URL}/api/v2/secrets/{secret_key}", - json={ - "workspaceId": service_token_data["workspace"], - "environment": service_token_data["environment"], - "type": secret_type - }, - headers={"Authorization": f"Bearer {service_token}"}, - ) - - -delete_secrets() - -``` - - - - If using an `API_KEY` to authenticate with the Infisical API, then you should include it in the `X_API_KEY` header. - - diff --git a/docs/api-reference/overview/examples/e2ee-disabled.mdx b/docs/api-reference/overview/examples/e2ee-disabled.mdx new file mode 100644 index 000000000..9864a1ff5 --- /dev/null +++ b/docs/api-reference/overview/examples/e2ee-disabled.mdx @@ -0,0 +1,176 @@ +--- +title: "E2EE Disabled" +--- + +Using Infisical's API to read/write secrets with E2EE disabled allows you to create, update, and retrieve secrets +in plaintext. Effectively, this means each such secret operation only requires 1 HTTP call. + + + + Retrieve all secrets for an Infisical project and environment. + + + + ```bash + curl --location --request GET 'https://app.infisical.com/api/v3/secrets/raw?environment=environment&workspaceId=workspaceId' \ + --header 'Authorization: Bearer serviceToken' + + ``` + + + + + The ID of the workspace + + + The environment slug + + + Path to secrets in workspace + + + + Create a secret in Infisical. + + + + ```bash + curl --location --request POST 'https://app.infisical.com/api/v3/secrets/raw/secretName' \ + --header 'Authorization: Bearer serviceToken' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "workspaceId": "workspaceId", + "environment": "environment", + "type": "shared", + "secretValue": "secretValue", + "secretPath": "/" + }' + ``` + + + + + Name of secret to create + + + The ID of the workspace + + + The environment slug + + + Value of secret + + + Comment of secret + + + Path to secret in workspace + + + The type of the secret. Valid options are “shared” or “personal” + + + + Retrieve a secret from Infisical. + + + + ```bash + curl --location --request GET 'https://app.infisical.com/api/v3/secrets/raw/secretName?workspaceId=workspaceId&environment=environment' \ + --header 'Authorization: Bearer serviceToken' + ``` + + + + + Name of secret to retrieve + + + The ID of the workspace + + + The environment slug + + + Path to secrets in workspace + + + The type of the secret. Valid options are “shared” or “personal” + + + + Update an existing secret in Infisical. + + + + ```bash + curl --location --request PATCH 'https://app.infisical.com/api/v3/secrets/raw/secretName' \ + --header 'Authorization: Bearer serviceToken' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "workspaceId": "workspaceId", + "environment": "environment", + "type": "shared", + "secretValue": "secretValue", + "secretPath": "/" + }' + ``` + + + + + Name of secret to update + + + The ID of the workspace + + + The environment slug + + + Value of secret + + + Path to secret in workspace. + + + The type of the secret. Valid options are “shared” or “personal” + + + + Delete a secret in Infisical. + + + + ```bash + curl --location --request DELETE 'https://app.infisical.com/api/v3/secrets/raw/secretName' \ + --header 'Authorization: Bearer serviceToken' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "workspaceId": "workspaceId", + "environment": "environment", + "type": "shared", + "secretPath": "/" + }' + ``` + + + + + Name of secret to update + + + The ID of the workspace + + + The environment slug + + + Path to secret in workspace. + + + The type of the secret. Valid options are “shared” or “personal” + + + \ No newline at end of file diff --git a/docs/api-reference/overview/encryption-modes/e2ee-mode.mdx b/docs/api-reference/overview/examples/e2ee-enabled.mdx similarity index 97% rename from docs/api-reference/overview/encryption-modes/e2ee-mode.mdx rename to docs/api-reference/overview/examples/e2ee-enabled.mdx index b24ec9fb7..0cbeaabcf 100644 --- a/docs/api-reference/overview/encryption-modes/e2ee-mode.mdx +++ b/docs/api-reference/overview/examples/e2ee-enabled.mdx @@ -1,23 +1,16 @@ --- -title: "E2EE Mode" +title: "E2EE Enabled" --- -End-to-End Encrypted (E2EE) mode is the default way to use Infisical's API. With it, you must perform client-side encryption/decryption -when reading/writing secrets via HTTP call to Infisical. - -Prerequisites: - -- Set up and add envars to [Infisical Cloud](https://app.infisical.com). -- Create an [Infisical Token](/documentation/platform/token) for your project and environment with write access enabled. -- Grasp a basic understanding of the system and its underlying cryptography [here](/api-reference/overview/introduction). -- [Ensure that your project is blind-indexed](../blind-indices). - -Below, we showcase how to execute common CRUD operations to manage secrets in **E2EE** mode: +Using Infisical's API to read/write secrets with E2EE enabled allows you to create, update, and retrieve secrets +but requires you to perform client-side encryption/decryption operations. For this reason, we recommend using one of the available +SDKs instead. + Retrieve all secrets for an Infisical project and environment. ```js const crypto = require('crypto'); const axios = require('axios'); @@ -194,6 +187,7 @@ get_secrets() +Create a secret in Infisical. ```js const crypto = require('crypto'); const axios = require('axios'); @@ -408,6 +402,7 @@ create_secrets() + Retrieve a secret from Infisical. ```js const crypto = require('crypto'); const axios = require('axios'); @@ -569,6 +564,7 @@ get_secret() +Update an existing secret in Infisical. ```js const crypto = require('crypto'); const axios = require('axios'); @@ -779,6 +775,7 @@ update_secret() + Delete a secret in Infisical. ```js const axios = require('axios'); const BASE_URL = 'https://app.infisical.com'; diff --git a/docs/api-reference/overview/examples/note.mdx b/docs/api-reference/overview/examples/note.mdx new file mode 100644 index 000000000..8491dfaae --- /dev/null +++ b/docs/api-reference/overview/examples/note.mdx @@ -0,0 +1,54 @@ +--- +title: "Note on E2EE" +--- + +Each project in Infisical can have **End-to-End Encryption (E2EE)** enabled or disabled. + +By default, all projects have **E2EE** enabled which means the server is not able to decrypt any values because all secret encryption/decryption operations occur on the client-side; this can be (optionally) disabled. However, this has limitations around functionality and ease-of-use: + +- You cannot make HTTP calls to Infisical to read/write secrets in plaintext. +- You cannot leverage non-E2EE features like native integrations and in-platform automations like dynamic secrets and secret rotation. + + + + Example read/write secrets without client-side encryption/decryption + + + Example read/write secrets with client-side encryption/decryption + + + +## FAQ + + + + We recommend starting with having **E2EE** enabled and disabling it if: + + - You're self-hosting Infisical, so having your instance of Infisical be able to read your secrets isn't an issue. + - You want an easier way to read/write secrets with Infisical. + - You need more power out of non-E2EE features such as secret rotation, dynamic secrets, etc. + + + + You can enable/disable E2EE for your project in Infisical in the Project Settings. + + + It is secure and in fact how most vendors in our industry are able to offer features like secret rotation. In this mode, secrets are encrypted at rest by + a series of keys, secured ultimately by a top-level `ROOT_ENCRYPTION_KEY` located on the server. + + If you're concerned about Infisical Cloud's ability to read your secrets, then you may wish to + use it with **E2EE** enabled or self-host Infisical on your own infrastructure and disable E2EE there. + + As an organization, we do not read any customer secrets without explicit permission; access to the `ROOT_ENCRYPTION_KEY` is restricted to one individual in the organization. + + \ No newline at end of file diff --git a/docs/api-reference/overview/examples/retrieve-secret.mdx b/docs/api-reference/overview/examples/retrieve-secret.mdx deleted file mode 100644 index a65876253..000000000 --- a/docs/api-reference/overview/examples/retrieve-secret.mdx +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: "Retrieve secret" -description: "How to get a secret using an Infisical Token scoped to a project and environment" ---- - -Prerequisites: - -- Set up and add envars to [Infisical Cloud](https://app.infisical.com). -- Create an [Infisical Token](/documentation/platform/token) for your project and environment. -- Grasp a basic understanding of the system and its underlying cryptography [here](/api-reference/overview/introduction). -- [Ensure that your project is blind-indexed](../blind-indices). - -## Flow - -1. [Get your Infisical Token data](/api-reference/endpoints/service-tokens/get) including a (encrypted) project key. -2. [Get the secret from your project and environment](/api-reference/endpoints/secrets/read-one). -3. Decrypt the (encrypted) project key with the key from your Infisical Token. -4. Decrypt the (encrypted) secret - -## Example - - - -```js -const crypto = require('crypto'); -const axios = require('axios'); - -const BASE_URL = 'https://app.infisical.com'; -const ALGORITHM = 'aes-256-gcm'; - -const decrypt = ({ ciphertext, iv, tag, secret}) => { - const decipher = crypto.createDecipheriv( - ALGORITHM, - secret, - Buffer.from(iv, 'base64') - ); - decipher.setAuthTag(Buffer.from(tag, 'base64')); - - let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); - cleartext += decipher.final('utf8'); - - return cleartext; -} - -const getSecret = async () => { - const serviceToken = 'your_service_token'; - const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); - - const secretType = 'shared' // 'shared' or 'personal' - const secretKey = 'some_key'; - - // 1. Get your Infisical Token data - const { data: serviceTokenData } = await axios.get( - `${BASE_URL}/api/v2/service-token`, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); - - // 2. Get the secret from your project and environment - const { data } = await axios.get( - `${BASE_URL}/api/v3/secrets/${secretKey}?${new URLSearchParams({ - environment: serviceTokenData.environment, - workspaceId: serviceTokenData.workspace, - type: secretType // optional, defaults to 'shared' - })}`, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); - - const encryptedSecret = data.secret; - - // 3. Decrypt the (encrypted) project key with the key from your Infisical Token - const projectKey = decrypt({ - ciphertext: serviceTokenData.encryptedKey, - iv: serviceTokenData.iv, - tag: serviceTokenData.tag, - secret: serviceTokenSecret - }); - - // 4. Decrypt the (encrypted) secret value - - const secretValue = decrypt({ - ciphertext: encryptedSecret.secretValueCiphertext, - iv: encryptedSecret.secretValueIV, - tag: encryptedSecret.secretValueTag, - secret: projectKey - }); - - console.log('secret: ', ({ - secretKey, - secretValue - })); -} - -getSecret(); - -``` - - - -```Python -import requests -import base64 -from Cryptodome.Cipher import AES - - -BASE_URL = "http://app.infisical.com" - - -def decrypt(ciphertext, iv, tag, secret): - secret = bytes(secret, "utf-8") - iv = base64.standard_b64decode(iv) - tag = base64.standard_b64decode(tag) - ciphertext = base64.standard_b64decode(ciphertext) - - cipher = AES.new(secret, AES.MODE_GCM, iv) - cipher.update(tag) - cleartext = cipher.decrypt(ciphertext).decode("utf-8") - return cleartext - - -def get_secret(): - service_token = "your_service_token" - service_token_secret = service_token[service_token.rindex(".") + 1 :] - - secret_type = "shared" # "shared" or "personal" - secret_key = "some_key" - - # 1. Get your Infisical Token data - service_token_data = requests.get( - f"{BASE_URL}/api/v2/service-token", - headers={"Authorization": f"Bearer {service_token}"}, - ).json() - - # 2. Get secret from your project and environment - data = requests.get( - f"{BASE_URL}/api/v3/secrets/{secret_key}", - params={ - "environment": service_token_data["environment"], - "workspaceId": service_token_data["workspace"], - "type": secret_type # optional, defaults to "shared" - }, - headers={"Authorization": f"Bearer {service_token}"}, - ).json() - - encrypted_secret = data["secret"] - - # 3. Decrypt the (encrypted) project key with the key from your Infisical Token - project_key = decrypt( - ciphertext=service_token_data["encryptedKey"], - iv=service_token_data["iv"], - tag=service_token_data["tag"], - secret=service_token_secret, - ) - - # 4. Decrypt the (encrypted) secret value - secret_value = decrypt( - ciphertext=encrypted_secret["secretValueCiphertext"], - iv=encrypted_secret["secretValueIV"], - tag=encrypted_secret["secretValueTag"], - secret=project_key, - ) - - print("secret: ", { - "secret_key": secret_key, - "secret_value": secret_value - }) - - -get_secret() - -``` - - \ No newline at end of file diff --git a/docs/api-reference/overview/examples/retrieve-secrets.mdx b/docs/api-reference/overview/examples/retrieve-secrets.mdx deleted file mode 100644 index f237822aa..000000000 --- a/docs/api-reference/overview/examples/retrieve-secrets.mdx +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: "Retrieve secrets" -description: "How to get all secrets using an Infisical Token scoped to a project and environment" ---- - -Prerequisites: - -- Set up and add envars to [Infisical Cloud](https://app.infisical.com). -- Create an [Infisical Token](/documentation/platform/token) for your project and environment. -- Grasp a basic understanding of the system and its underlying cryptography [here](/api-reference/overview/introduction). -- [Ensure that your project is blind-indexed](../blind-indices). - -## Flow - -1. [Get your Infisical Token data](/api-reference/endpoints/service-tokens/get) including a (encrypted) project key. -2. [Get secrets for your project and environment](/api-reference/endpoints/secrets/read). -3. Decrypt the (encrypted) project key with the key from your Infisical Token. -4. Decrypt the (encrypted) secrets - -## Example - - - -```js -const crypto = require('crypto'); -const axios = require('axios'); - -const BASE_URL = 'https://app.infisical.com'; -const ALGORITHM = 'aes-256-gcm'; - -const decrypt = ({ ciphertext, iv, tag, secret}) => { - const decipher = crypto.createDecipheriv( - ALGORITHM, - secret, - Buffer.from(iv, 'base64') - ); - decipher.setAuthTag(Buffer.from(tag, 'base64')); - - let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); - cleartext += decipher.final('utf8'); - - return cleartext; -} - -const getSecrets = async () => { - const serviceToken = 'your_service_token'; - const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); - - // 1. Get your Infisical Token data - const { data: serviceTokenData } = await axios.get( - `${BASE_URL}/api/v2/service-token`, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); - - // 2. Get secrets for your project and environment - const { data } = await axios.get( - `${BASE_URL}/api/v3/secrets?${new URLSearchParams({ - environment: serviceTokenData.environment, - workspaceId: serviceTokenData.workspace - })}`, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); - - const encryptedSecrets = data.secrets; - - // 3. Decrypt the (encrypted) project key with the key from your Infisical Token - const projectKey = decrypt({ - ciphertext: serviceTokenData.encryptedKey, - iv: serviceTokenData.iv, - tag: serviceTokenData.tag, - secret: serviceTokenSecret - }); - - // 4. Decrypt the (encrypted) secrets - const secrets = encryptedSecrets.map((secret) => { - const secretKey = decrypt({ - ciphertext: secret.secretKeyCiphertext, - iv: secret.secretKeyIV, - tag: secret.secretKeyTag, - secret: projectKey - }); - - const secretValue = decrypt({ - ciphertext: secret.secretValueCiphertext, - iv: secret.secretValueIV, - tag: secret.secretValueTag, - secret: projectKey - }); - - return ({ - secretKey, - secretValue - }); - }); - - console.log('secrets: ', secrets); -} - -getSecrets(); - -``` - - - -```Python -import requests -import base64 -from Cryptodome.Cipher import AES - - -BASE_URL = "http://app.infisical.com" - - -def decrypt(ciphertext, iv, tag, secret): - secret = bytes(secret, "utf-8") - iv = base64.standard_b64decode(iv) - tag = base64.standard_b64decode(tag) - ciphertext = base64.standard_b64decode(ciphertext) - - cipher = AES.new(secret, AES.MODE_GCM, iv) - cipher.update(tag) - cleartext = cipher.decrypt(ciphertext).decode("utf-8") - return cleartext - - -def get_secrets(): - service_token = "your_service_token" - service_token_secret = service_token[service_token.rindex(".") + 1 :] - - # 1. Get your Infisical Token data - service_token_data = requests.get( - f"{BASE_URL}/api/v2/service-token", - headers={"Authorization": f"Bearer {service_token}"}, - ).json() - - # 2. Get secrets for your project and environment - data = requests.get( - f"{BASE_URL}/api/v3/secrets", - params={ - "environment": service_token_data["environment"], - "workspaceId": service_token_data["workspace"], - }, - headers={"Authorization": f"Bearer {service_token}"}, - ).json() - - encrypted_secrets = data["secrets"] - - # 3. Decrypt the (encrypted) project key with the key from your Infisical Token - project_key = decrypt( - ciphertext=service_token_data["encryptedKey"], - iv=service_token_data["iv"], - tag=service_token_data["tag"], - secret=service_token_secret, - ) - - # 4. Decrypt the (encrypted) secrets - secrets = [] - for secret in encrypted_secrets: - secret_key = decrypt( - ciphertext=secret["secretKeyCiphertext"], - iv=secret["secretKeyIV"], - tag=secret["secretKeyTag"], - secret=project_key, - ) - - secret_value = decrypt( - ciphertext=secret["secretValueCiphertext"], - iv=secret["secretValueIV"], - tag=secret["secretValueTag"], - secret=project_key, - ) - - secrets.append( - { - "secret_key": secret_key, - "secret_value": secret_value, - } - ) - - print("secrets:", secrets) - - -get_secrets() - -``` - - \ No newline at end of file diff --git a/docs/api-reference/overview/examples/update-secret.mdx b/docs/api-reference/overview/examples/update-secret.mdx deleted file mode 100644 index 49255aa79..000000000 --- a/docs/api-reference/overview/examples/update-secret.mdx +++ /dev/null @@ -1,229 +0,0 @@ ---- -title: "Update secret" -description: "How to update a secret using an Infisical Token scoped to a project and environment" ---- - -Prerequisites: - -- Set up and add envars to [Infisical Cloud](https://app.infisical.com). -- Create an [Infisical Token](/documentation/platform/token) for your project and environment with write access enabled. -- Grasp a basic understanding of the system and its underlying cryptography [here](/api-reference/overview/introduction). -- [Ensure that your project is blind-indexed](../blind-indices). - -## Flow - -1. [Get your Infisical Token data](/api-reference/endpoints/service-tokens/get) including a (encrypted) project key. -2. Decrypt the (encrypted) project key with the key from your Infisical Token. -3. Encrypt your updated secret with the project key -4. [Send (encrypted) updated secret to Infical](/api-reference/endpoints/secrets/update) - -## Example - - - -```js -const crypto = require('crypto'); -const axios = require('axios'); - -const BASE_URL = 'https://app.infisical.com'; -const ALGORITHM = 'aes-256-gcm'; -const BLOCK_SIZE_BYTES = 16; - -const encrypt = ({ text, secret }) => { - const iv = crypto.randomBytes(BLOCK_SIZE_BYTES); - const cipher = crypto.createCipheriv(ALGORITHM, secret, iv); - - let ciphertext = cipher.update(text, 'utf8', 'base64'); - ciphertext += cipher.final('base64'); - return { - ciphertext, - iv: iv.toString('base64'), - tag: cipher.getAuthTag().toString('base64') - }; -} - -const decrypt = ({ ciphertext, iv, tag, secret}) => { - const decipher = crypto.createDecipheriv( - ALGORITHM, - secret, - Buffer.from(iv, 'base64') - ); - decipher.setAuthTag(Buffer.from(tag, 'base64')); - - let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); - cleartext += decipher.final('utf8'); - - return cleartext; -} - -const updateSecrets = async () => { - const serviceToken = 'your_service_token'; - const serviceTokenSecret = serviceToken.substring(serviceToken.lastIndexOf('.') + 1); - - const secretType = 'shared' // 'shared' or 'personal' - const secretKey = 'some_key'; - const secretValue = 'updated_value'; - const secretComment = 'updated_comment'; - - // 1. Get your Infisical Token data - const { data: serviceTokenData } = await axios.get( - `${BASE_URL}/api/v2/service-token`, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); - - // 2. Decrypt the (encrypted) project key with the key from your Infisical Token - const projectKey = decrypt({ - ciphertext: serviceTokenData.encryptedKey, - iv: serviceTokenData.iv, - tag: serviceTokenData.tag, - secret: serviceTokenSecret - }); - - // 3. Encrypt your updated secret with the project key - const { - ciphertext: secretKeyCiphertext, - iv: secretKeyIV, - tag: secretKeyTag - } = encrypt({ - text: secretKey, - secret: projectKey - }); - - const { - ciphertext: secretValueCiphertext, - iv: secretValueIV, - tag: secretValueTag - } = encrypt({ - text: secretValue, - secret: projectKey - }); - - const { - ciphertext: secretCommentCiphertext, - iv: secretCommentIV, - tag: secretCommentTag - } = encrypt({ - text: secretComment, - secret: projectKey - }); - - // 4. Send (encrypted) updated secret to Infisical - await axios.patch( - `${BASE_URL}/api/v3/secrets/${secretKey}`, - { - workspaceId: serviceTokenData.workspace, - environment: serviceTokenData.environment, - type: secretType, - secretValueCiphertext, - secretValueIV, - secretValueTag, - secretCommentCiphertext, - secretCommentIV, - secretCommentTag - }, - { - headers: { - Authorization: `Bearer ${serviceToken}` - } - } - ); -} - -updateSecrets(); -``` - - - -```Python -import base64 -import requests -from Cryptodome.Cipher import AES -from Cryptodome.Random import get_random_bytes - - -BASE_URL = "https://app.infisical.com" -BLOCK_SIZE_BYTES = 16 - - -def encrypt(text, secret): - iv = get_random_bytes(BLOCK_SIZE_BYTES) - secret = bytes(secret, "utf-8") - cipher = AES.new(secret, AES.MODE_GCM, iv) - ciphertext, tag = cipher.encrypt_and_digest(text.encode("utf-8")) - return { - "ciphertext": base64.standard_b64encode(ciphertext).decode("utf-8"), - "tag": base64.standard_b64encode(tag).decode("utf-8"), - "iv": base64.standard_b64encode(iv).decode("utf-8"), - } - - -def decrypt(ciphertext, iv, tag, secret): - secret = bytes(secret, "utf-8") - iv = base64.standard_b64decode(iv) - tag = base64.standard_b64decode(tag) - ciphertext = base64.standard_b64decode(ciphertext) - - cipher = AES.new(secret, AES.MODE_GCM, iv) - cipher.update(tag) - cleartext = cipher.decrypt(ciphertext).decode("utf-8") - return cleartext - - -def update_secret(): - service_token = "your_service_token" - service_token_secret = service_token[service_token.rindex(".") + 1 :] - - secret_type = "shared" # "shared" or "personal" - secret_key = "some_key" - secret_value = "updated_value" - secret_comment = "updated_comment" - - # 1. Get your Infisical Token data - service_token_data = requests.get( - f"{BASE_URL}/api/v2/service-token", - headers={"Authorization": f"Bearer {service_token}"}, - ).json() - - # 2. Decrypt the (encrypted) project key with the key from your Infisical Token - project_key = decrypt( - ciphertext=service_token_data["encryptedKey"], - iv=service_token_data["iv"], - tag=service_token_data["tag"], - secret=service_token_secret, - ) - - # 3. Encrypt your updated secret with the project key - encrypted_key_data = encrypt(text=secret_key, secret=project_key) - encrypted_value_data = encrypt(text=secret_value, secret=project_key) - encrypted_comment_data = encrypt(text=secret_comment, secret=project_key) - - # 4. Send (encrypted) updated secret to Infisical - requests.patch( - f"{BASE_URL}/api/v3/secrets/{secret_key}", - json={ - "workspaceId": service_token_data["workspace"], - "environment": service_token_data["environment"], - "type": secret_type, - "secretKeyCiphertext": encrypted_key_data["ciphertext"], - "secretKeyIV": encrypted_key_data["iv"], - "secretKeyTag": encrypted_key_data["tag"], - "secretValueCiphertext": encrypted_value_data["ciphertext"], - "secretValueIV": encrypted_value_data["iv"], - "secretValueTag": encrypted_value_data["tag"], - "secretCommentCiphertext": encrypted_comment_data["ciphertext"], - "secretCommentIV": encrypted_comment_data["iv"], - "secretCommentTag": encrypted_comment_data["tag"] - }, - headers={"Authorization": f"Bearer {service_token}"}, - ) - - -update_secret() - -``` - - \ No newline at end of file diff --git a/docs/mint.json b/docs/mint.json index 7be970770..9dba735e6 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -250,9 +250,9 @@ { "group": "Examples", "pages": [ - "api-reference/overview/encryption-modes/overview", - "api-reference/overview/encryption-modes/es-mode", - "api-reference/overview/encryption-modes/e2ee-mode" + "api-reference/overview/examples/note", + "api-reference/overview/examples/e2ee-disabled", + "api-reference/overview/examples/e2ee-enabled" ] }, "api-reference/overview/blind-indices" From db28536ea805ebe795794eeea5bd0a609991eb8e Mon Sep 17 00:00:00 2001 From: Stijn-Kuijper Date: Tue, 13 Jun 2023 11:12:12 +0200 Subject: [PATCH 14/55] feat: add clouflare pages button to integrations page --- backend/src/variables/integration.ts | 11 +++++++++++ .../public/images/integrations/Cloudflare.png | Bin 0 -> 4384 bytes 2 files changed, 11 insertions(+) create mode 100644 frontend/public/images/integrations/Cloudflare.png diff --git a/backend/src/variables/integration.ts b/backend/src/variables/integration.ts index 26e9f2544..8935e7b49 100644 --- a/backend/src/variables/integration.ts +++ b/backend/src/variables/integration.ts @@ -23,6 +23,7 @@ export const INTEGRATION_CIRCLECI = "circleci"; export const INTEGRATION_TRAVISCI = "travisci"; export const INTEGRATION_SUPABASE = 'supabase'; export const INTEGRATION_CHECKLY = 'checkly'; +export const INTEGRATION_CLOUDFLARE_PAGES = 'cloudflare-pages'; export const INTEGRATION_HASHICORP_VAULT = 'hashicorp-vault'; export const INTEGRATION_SET = new Set([ INTEGRATION_AZURE_KEY_VAULT, @@ -65,6 +66,7 @@ export const INTEGRATION_CIRCLECI_API_URL = "https://circleci.com/api"; export const INTEGRATION_TRAVISCI_API_URL = "https://api.travis-ci.com"; export const INTEGRATION_SUPABASE_API_URL = 'https://api.supabase.com'; export const INTEGRATION_CHECKLY_API_URL = 'https://api.checklyhq.com'; +export const INTEGRATION_CLOUDFLARE_PAGES_API_URL = 'https://api.cloudflare.com'; export const getIntegrationOptions = async () => { const INTEGRATION_OPTIONS = [ @@ -221,6 +223,15 @@ export const getIntegrationOptions = async () => { type: '', clientId: '', docsLink: '' + }, + { + name: 'Cloudflare Pages', + slug: 'cloudflare-pages', + image: 'Cloudflare.png', + isAvailable: true, + type: 'pat', + clientId: '', + docsLink: '' } ] diff --git a/frontend/public/images/integrations/Cloudflare.png b/frontend/public/images/integrations/Cloudflare.png new file mode 100644 index 0000000000000000000000000000000000000000..24db8c68134e5a9d2d5e3871ba84acb4a68c8e12 GIT binary patch literal 4384 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 F>wniWGa3K@ literal 0 HcmV?d00001 From dffcee52d7ae0723f35bc535f33fe9c11052a069 Mon Sep 17 00:00:00 2001 From: Stijn-Kuijper Date: Tue, 13 Jun 2023 11:52:40 +0200 Subject: [PATCH 15/55] feat: cloudflare integration auth page --- frontend/src/pages/integrations/[id].tsx | 5 ++ .../cloudflare-pages/authorize.tsx | 88 +++++++++++++++++++ .../integrations/cloudflare-pages/create.tsx | 0 3 files changed, 93 insertions(+) create mode 100644 frontend/src/pages/integrations/cloudflare-pages/authorize.tsx create mode 100644 frontend/src/pages/integrations/cloudflare-pages/create.tsx diff --git a/frontend/src/pages/integrations/[id].tsx b/frontend/src/pages/integrations/[id].tsx index 435c904f5..48f34532b 100644 --- a/frontend/src/pages/integrations/[id].tsx +++ b/frontend/src/pages/integrations/[id].tsx @@ -219,6 +219,9 @@ export default function Integrations() { case 'hashicorp-vault': link = `${window.location.origin}/integrations/hashicorp-vault/authorize`; break; + case 'cloudflare-pages': + link = `${window.location.origin}/integrations/cloudflare-pages/authorize`; + break; default: break; } @@ -283,6 +286,8 @@ export default function Integrations() { case 'hashicorp-vault': link = `${window.location.origin}/integrations/hashicorp-vault/create?integrationAuthId=${integrationAuth._id}`; break; + case 'cloudflare-pages': + link = `${window.location.origin}/integrations/cloudflare-pages/create?integrationAutHId=${integrationAuth._id}`; default: break; } diff --git a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx new file mode 100644 index 000000000..71b6059e8 --- /dev/null +++ b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx @@ -0,0 +1,88 @@ +import { useState } from 'react'; +import { useRouter } from 'next/router'; +import { Card, CardTitle, FormControl, Input, Button } from '../../../components/v2'; +import saveIntegrationAccessToken from '~/pages/api/integrations/saveIntegrationAccessToken'; + +export default function CloudflarePagesIntegrationPage() { + const router = useRouter(); + const [accessKey, setAccessKey] = useState(''); + const [accessKeyErrorText, setAccessKeyErrorText] = useState(''); + const [accountId, setAccountId] = useState(''); + const [accountIdErrorText, setAccountIdErrorText] = useState(''); + const [isLoading, setIsLoading] = useState(false); + + const handleButtonClick = async () => { + try { + setAccessKeyErrorText(''); + setAccountIdErrorText(''); + if (accessKey.length === 0 || accountId.length === 0) { + if (accessKey.length === 0) setAccessKeyErrorText('Access key cannot be blank!'); + if (accountId.length === 0) setAccountIdErrorText('Account ID cannot be blank!'); + return; + } + + setIsLoading(true); + + const integrationAuth = await saveIntegrationAccessToken({ + workspaceId: localStorage.getItem('projectData.id'), + integration: 'cloudflare-pages', + accessId: accessKey, + accessToken: accountId, + url: null, + namespace: null + }); + + setAccessKey(''); + setAccountId(''); + setIsLoading(false); + + router.push(`/integrations/cloudflare-pages/create?integrationAuthId=${integrationAuth._id}`); + } catch (err) { + console.error(err); + } + } + + return ( +
+ + Cloudflare Pages Integration + + setAccessKey(e.target.value)} + /> + + + setAccountId(e.target.value)} + /> + + + +
+ ); +} + +CloudflarePagesIntegrationPage.requireAuth = true; \ No newline at end of file diff --git a/frontend/src/pages/integrations/cloudflare-pages/create.tsx b/frontend/src/pages/integrations/cloudflare-pages/create.tsx new file mode 100644 index 000000000..e69de29bb From e24c1f38e068a349565c6e7596700e81e0ea871c Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 13 Jun 2023 11:23:13 +0100 Subject: [PATCH 16/55] Add REST API integration option in docs introduction --- docs/documentation/getting-started/api.mdx | 59 +++++++++++++++++++ .../getting-started/introduction.mdx | 8 +++ docs/mint.json | 3 +- 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 docs/documentation/getting-started/api.mdx diff --git a/docs/documentation/getting-started/api.mdx b/docs/documentation/getting-started/api.mdx new file mode 100644 index 000000000..7bcb2d76a --- /dev/null +++ b/docs/documentation/getting-started/api.mdx @@ -0,0 +1,59 @@ +--- +title: "REST API" +--- + +Infisical's Public (REST) API is the most flexible, platform-agnostic way to read/write secrets for your application. + +Prerequisites: + +- Have a project with secrets ready in [Infisical Cloud](https://app.infisical.com). +- Create an [Infisical Token](/documentation/platform/token) scoped to an environment in your project in Infisical. + +To keep it simple, we're going to fetch secrets from the API with **End-to-End Encryption (E2EE)** disabled. + + + It's possible to use the API with **E2EE** enabled but this means learning about how encryption works with Infisical and performing client-side encryption/decryption operations yourself. + yourself. + + If **E2EE** is a must for your team, we recommend either using one of the [Infisical SDKs](/documentation/getting-started/sdks) or checking out the [examples for E2EE](/api-reference/overview/examples/e2ee-enabled). + + +## Configuration + +Head to your Project Settings, where you created your service token, and un-check the **E2EE** setting. + +## Retrieve Secret + +Retrieve a secret from the project and environment in Infisical scoped to your service token by making a HTTP request with the following format/details: + +```bash +curl --location --request GET 'https://app.infisical.com/api/v3/secrets/raw/secretName?workspaceId=workspaceId&environment=environment' \ + --header 'Authorization: Bearer serviceToken' +``` + + + Name of secret to retrieve + + + The ID of the workspace + + + The environment slug + + + Path to secrets in workspace + + + The type of the secret. Valid options are “shared” or “personal” + + +Depending on your application requirements, you may wish to use Infisical's API in different ways such as by retaining **E2EE** +or fetching multiple secrets at once instead of one at a time. + +Whatever the case, we recommend glossing over the [API Examples](/api-reference/overview/examples/note) +to gain a deeper understanding of how you to best leverage the Infisical API for your use-case. + +See also: + +- Explore the [API Examples](/api-reference/overview/examples/note) +- [API Reference](/api-reference/overview/introduction) \ No newline at end of file diff --git a/docs/documentation/getting-started/introduction.mdx b/docs/documentation/getting-started/introduction.mdx index 2db9f5284..46a2f48e3 100644 --- a/docs/documentation/getting-started/introduction.mdx +++ b/docs/documentation/getting-started/introduction.mdx @@ -42,6 +42,14 @@ Start syncing environment variables with [Infisical Cloud](https://app.infisical > Fetch and save secrets as native Kubernetes secrets + + Fetch secrets via HTTP request + ## Resources diff --git a/docs/mint.json b/docs/mint.json index 9dba735e6..b4412dfe2 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -92,7 +92,8 @@ "documentation/getting-started/sdks", "documentation/getting-started/cli", "documentation/getting-started/docker", - "documentation/getting-started/kubernetes" + "documentation/getting-started/kubernetes", + "documentation/getting-started/api" ] }, { From f4404f66b83f9737a22e9f18acd432ba5d1d278e Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 13 Jun 2023 11:30:47 +0100 Subject: [PATCH 17/55] Correct link to E2EE API usage example --- docs/documentation/getting-started/api.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/getting-started/api.mdx b/docs/documentation/getting-started/api.mdx index 7bcb2d76a..279982911 100644 --- a/docs/documentation/getting-started/api.mdx +++ b/docs/documentation/getting-started/api.mdx @@ -15,7 +15,7 @@ To keep it simple, we're going to fetch secrets from the API with **End-to-End E It's possible to use the API with **E2EE** enabled but this means learning about how encryption works with Infisical and performing client-side encryption/decryption operations yourself. yourself. - If **E2EE** is a must for your team, we recommend either using one of the [Infisical SDKs](/documentation/getting-started/sdks) or checking out the [examples for E2EE](/api-reference/overview/examples/e2ee-enabled). + If **E2EE** is a must for your team, we recommend either using one of the [Infisical SDKs](/documentation/getting-started/sdks) or checking out the [examples for E2EE](/api-reference/overview/examples/e2ee-disabled). ## Configuration From c64cf39b6990764edfb42b03471a4a7f1b3892d9 Mon Sep 17 00:00:00 2001 From: Stijn-Kuijper Date: Tue, 13 Jun 2023 12:37:07 +0200 Subject: [PATCH 18/55] feat: cloudflare pages integration create page --- .../integrations/cloudflare-pages/create.tsx | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/frontend/src/pages/integrations/cloudflare-pages/create.tsx b/frontend/src/pages/integrations/cloudflare-pages/create.tsx index e69de29bb..19d4e39b1 100644 --- a/frontend/src/pages/integrations/cloudflare-pages/create.tsx +++ b/frontend/src/pages/integrations/cloudflare-pages/create.tsx @@ -0,0 +1,135 @@ +import { useState, useEffect } from 'react'; +import { useRouter } from 'next/router'; +import { useGetWorkspaceById } from '~/hooks/api'; +import queryString from 'query-string'; +import { useGetIntegrationAuthApps, useGetIntegrationAuthById } from '~/hooks/api/integrationAuth'; +import createIntegration from '~/pages/api/integrations/createIntegration'; +import { Button, Card, CardTitle, FormControl, Select, SelectItem } from '~/components/v2'; + +export default function CloudflarePagesIntegrationPage() { + const router = useRouter(); + + const { integrationAuthId } = queryString.parse(router.asPath.split('?')[1]); + const { data: workspace } = useGetWorkspaceById(localStorage.getItem('projectData.id') ?? ''); + const { data: integrationAuth } = useGetIntegrationAuthById((integrationAuthId as string) ?? ''); + const { data: integrationAuthApps } = useGetIntegrationAuthApps({ + integrationAuthId: (integrationAuthId as string) ?? '' + }); + + const [selectedSourceEnvironment, setSelectedSourceEnvironment] = useState(''); + const [targetApp, setTargetApp] = useState(''); + const [targetAppId, setTargetAppId] = useState(''); + + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + if (workspace) { + setSelectedSourceEnvironment(workspace.environments[0].slug); + } + }, [workspace]); + + useEffect(() => { + if (integrationAuthApps) { + if (integrationAuthApps.length > 0) { + setTargetApp(integrationAuthApps[0].name); + setTargetAppId(String(integrationAuthApps[0].appId)); + } else { + setTargetApp('none'); + } + } + }, [integrationAuthApps]); + + const handleButtonClick = async () => { + try { + if (!integrationAuth?._id) return; + + setIsLoading(true); + + await createIntegration({ + integrationAuthId: integrationAuth?._id, + isActive: true, + app: targetApp, + appId: targetAppId, + sourceEnvironment: selectedSourceEnvironment, + targetEnvironment: null, + targetEnvironmentId: null, + targetService: null, + targetServiceId: null, + owner: null, + path: null, + region: null + }); + + setIsLoading(false); + + router.push(`/integrations/${localStorage.getItem('projectData.id')}`); + } catch(err) { + console.error(err); + } + } + + return integrationAuth && + workspace && + selectedSourceEnvironment && + integrationAuthApps && + targetApp ? ( +
+ + Cloudflare Pages Integration + + + + + + + + +
+ ) : ( +
+ ); +} + +CloudflarePagesIntegrationPage.requireAuth = true; \ No newline at end of file From d590dd5db8011e148df43a5fa2a20f107c3ca71d Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Tue, 13 Jun 2023 19:24:57 +0530 Subject: [PATCH 19/55] feat(folder-sec-overview): added folder path support in get secrets and get folders --- .../controllers/v1/secretsFolderController.ts | 27 +++++++++++++++---- .../src/controllers/v2/secretsController.ts | 13 ++++++--- backend/src/routes/v1/secretsFolder.ts | 1 + 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/backend/src/controllers/v1/secretsFolderController.ts b/backend/src/controllers/v1/secretsFolderController.ts index 06d68a41d..c1ce7ffc4 100644 --- a/backend/src/controllers/v1/secretsFolderController.ts +++ b/backend/src/controllers/v1/secretsFolderController.ts @@ -11,6 +11,7 @@ import { validateFolderName, generateFolderId, getParentFromFolderId, + getFolderByPath, } from "../../services/FolderService"; import { ADMIN, MEMBER } from "../../variables"; import { validateMembership } from "../../helpers/membership"; @@ -177,11 +178,13 @@ export const deleteFolder = async (req: Request, res: Response) => { // TODO: validate workspace export const getFolders = async (req: Request, res: Response) => { - const { workspaceId, environment, parentFolderId } = req.query as { - workspaceId: string; - environment: string; - parentFolderId?: string; - }; + const { workspaceId, environment, parentFolderId, parentFolderPath } = + req.query as { + workspaceId: string; + environment: string; + parentFolderId?: string; + parentFolderPath?: string; + }; const folders = await Folder.findOne({ workspace: workspaceId, environment }); if (!folders) { @@ -196,6 +199,20 @@ export const getFolders = async (req: Request, res: Response) => { acceptedRoles: [ADMIN, MEMBER], }); + // if instead of parentFolderId given a path like /folder1/folder2 + if (parentFolderPath) { + const folder = getFolderByPath(folders.nodes, parentFolderPath); + if (!folder) { + res.send({ folders: [], dir: [] }); + return; + } + // dir is not needed at present as this is only used in overview section of secrets + res.send({ + folders: folder.children.map(({ id, name }) => ({ id, name })), + dir: [{ name: folder.name, id: folder.id }], + }); + } + if (!parentFolderId) { const rootFolders = folders.nodes.children.map(({ id, name }) => ({ id, diff --git a/backend/src/controllers/v2/secretsController.ts b/backend/src/controllers/v2/secretsController.ts index ae1de8cfe..256ad248c 100644 --- a/backend/src/controllers/v2/secretsController.ts +++ b/backend/src/controllers/v2/secretsController.ts @@ -700,11 +700,15 @@ export const getSecrets = async (req: Request, res: Response) => { (!folders && folderId && folderId !== "root") || (!folders && secretPath) ) { - throw BadRequestError({ message: "Folder not found" }); + res.send({ secrets: [] }); + return; } if (folders && folderId !== "root") { const folder = searchByFolderId(folders.nodes, folderId as string); - if (!folder) throw BadRequestError({ message: "Folder not found" }); + if (!folder) { + res.send({ secrets: [] }); + return; + } } if (req.authData.authPayload instanceof ServiceTokenData) { @@ -720,10 +724,11 @@ export const getSecrets = async (req: Request, res: Response) => { } if (folders && secretPath) { - if (!folders) throw BadRequestError({ message: "Folder not found" }); + // avoid throwing error and send empty list const folder = getFolderByPath(folders.nodes, secretPath as string); if (!folder) { - throw BadRequestError({ message: "Secret path not found" }); + res.send({ secrets: [] }); + return; } folderId = folder.id; } diff --git a/backend/src/routes/v1/secretsFolder.ts b/backend/src/routes/v1/secretsFolder.ts index 2644a835b..83517f1ab 100644 --- a/backend/src/routes/v1/secretsFolder.ts +++ b/backend/src/routes/v1/secretsFolder.ts @@ -63,6 +63,7 @@ router.get( query("workspaceId").exists().isString().trim(), query("environment").exists().isString().trim(), query("parentFolderId").optional().isString().trim(), + query("parentFolderPath").optional().isString().trim(), validateRequest, getFolders ); From a6cf7107b9ea487e970ea208fc843565ddf26ac6 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Tue, 13 Jun 2023 19:25:50 +0530 Subject: [PATCH 20/55] feat(folder-sec-overview): implemented folder based ui for sec overview --- .../src/hooks/api/secretFolders/index.tsx | 8 +- .../src/hooks/api/secretFolders/queries.tsx | 56 ++- frontend/src/hooks/api/secretFolders/types.ts | 6 + frontend/src/hooks/api/secrets/queries.tsx | 31 +- frontend/src/hooks/api/secrets/types.ts | 1 + frontend/src/pages/dashboard/[id].tsx | 13 +- frontend/src/styles/globals.css | 32 +- .../DashboardPage/DashboardEnvOverview.tsx | 411 ++++++++++-------- .../EnvComparisonRow/EnvComparisonRow.tsx | 10 +- .../EnvComparisonRow/FolderComparisonRow.tsx | 42 ++ 10 files changed, 392 insertions(+), 218 deletions(-) create mode 100644 frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx diff --git a/frontend/src/hooks/api/secretFolders/index.tsx b/frontend/src/hooks/api/secretFolders/index.tsx index c1cc056d1..8b48f3e20 100644 --- a/frontend/src/hooks/api/secretFolders/index.tsx +++ b/frontend/src/hooks/api/secretFolders/index.tsx @@ -1 +1,7 @@ -export { useCreateFolder, useDeleteFolder, useGetProjectFolders, useUpdateFolder } from './queries'; +export { + useCreateFolder, + useDeleteFolder, + useGetProjectFolders, + useGetProjectFoldersBatch, + useUpdateFolder +} from './queries'; diff --git a/frontend/src/hooks/api/secretFolders/queries.tsx b/frontend/src/hooks/api/secretFolders/queries.tsx index 008d6f26f..57b58afea 100644 --- a/frontend/src/hooks/api/secretFolders/queries.tsx +++ b/frontend/src/hooks/api/secretFolders/queries.tsx @@ -1,5 +1,5 @@ import { useCallback } from 'react'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { useMutation, useQueries, useQuery, useQueryClient } from '@tanstack/react-query'; import { apiRequest } from '@app/config/request'; @@ -7,6 +7,7 @@ import { secretSnapshotKeys } from '../secretSnapshots/queries'; import { CreateFolderDTO, DeleteFolderDTO, + GetProjectFoldersBatchDTO, GetProjectFoldersDTO, TSecretFolder, UpdateFolderDTO @@ -17,6 +18,26 @@ const queryKeys = { ['secret-folders', { workspaceId, environment, parentFolderId }] as const }; +const fetchProjectFolders = async ( + workspaceId: string, + environment: string, + parentFolderId?: string, + parentFolderPath?: string +) => { + const { data } = await apiRequest.get<{ folders: TSecretFolder[]; dir: TSecretFolder[] }>( + '/api/v1/folders', + { + params: { + workspaceId, + environment, + parentFolderId, + parentFolderPath + } + } + ); + return data; +}; + export const useGetProjectFolders = ({ workspaceId, parentFolderId, @@ -27,19 +48,7 @@ export const useGetProjectFolders = ({ useQuery({ queryKey: queryKeys.getSecretFolders(workspaceId, environment, parentFolderId), enabled: Boolean(workspaceId) && Boolean(environment) && !isPaused, - queryFn: async () => { - const { data } = await apiRequest.get<{ folders: TSecretFolder[]; dir: TSecretFolder[] }>( - '/api/v1/folders', - { - params: { - workspaceId, - environment, - parentFolderId - } - } - ); - return data; - }, + queryFn: async () => fetchProjectFolders(workspaceId, environment, parentFolderId), select: useCallback( ({ folders, dir }: { folders: TSecretFolder[]; dir: TSecretFolder[] }) => ({ dir, @@ -53,6 +62,25 @@ export const useGetProjectFolders = ({ ) }); +export const useGetProjectFoldersBatch = ({ + folders = [], + isPaused, + parentFolderPath +}: GetProjectFoldersBatchDTO) => + useQueries({ + queries: folders.map(({ workspaceId, environment, parentFolderId }) => ({ + queryKey: queryKeys.getSecretFolders(workspaceId, environment, parentFolderPath), + queryFn: async () => + fetchProjectFolders(workspaceId, environment, parentFolderId, parentFolderPath), + enabled: Boolean(workspaceId) && Boolean(environment) && !isPaused, + select: (data: { folders: TSecretFolder[]; dir: TSecretFolder[] }) => ({ + environment, + folders: data.folders, + dir: data.dir + }) + })) + }); + export const useCreateFolder = () => { const queryClient = useQueryClient(); diff --git a/frontend/src/hooks/api/secretFolders/types.ts b/frontend/src/hooks/api/secretFolders/types.ts index a9ca17641..44a6a0859 100644 --- a/frontend/src/hooks/api/secretFolders/types.ts +++ b/frontend/src/hooks/api/secretFolders/types.ts @@ -11,6 +11,12 @@ export type GetProjectFoldersDTO = { sortDir?: 'asc' | 'desc'; }; +export type GetProjectFoldersBatchDTO = { + folders: Omit[]; + isPaused?: boolean; + parentFolderPath?: string; +}; + export type CreateFolderDTO = { workspaceId: string; environment: string; diff --git a/frontend/src/hooks/api/secrets/queries.tsx b/frontend/src/hooks/api/secrets/queries.tsx index e4ad89dd6..89137b03c 100644 --- a/frontend/src/hooks/api/secrets/queries.tsx +++ b/frontend/src/hooks/api/secrets/queries.tsx @@ -1,4 +1,5 @@ /* eslint-disable no-param-reassign */ +import { useCallback } from 'react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { @@ -29,14 +30,16 @@ export const secretKeys = { const fetchProjectEncryptedSecrets = async ( workspaceId: string, env: string | string[], - folderId?: string + folderId?: string, + secretPath?: string ) => { if (typeof env === 'string') { const { data } = await apiRequest.get<{ secrets: EncryptedSecret[] }>('/api/v2/secrets', { params: { environment: env, workspaceId, - folderId: folderId || undefined + folderId: folderId || undefined, + secretPath } }); return data.secrets; @@ -52,7 +55,8 @@ const fetchProjectEncryptedSecrets = async ( params: { environment: envPoint, workspaceId, - folderId + folderId, + secretPath } }); allEnvData = allEnvData.concat(data.secrets); @@ -77,7 +81,7 @@ export const useGetProjectSecrets = ({ enabled: Boolean(decryptFileKey && workspaceId && env) && !isPaused, queryKey: secretKeys.getProjectSecret(workspaceId, env, folderId), queryFn: () => fetchProjectEncryptedSecrets(workspaceId, env, folderId), - select: (data) => { + select: useCallback((data: EncryptedSecret[]) => { const PRIVATE_KEY = localStorage.getItem('PRIVATE_KEY') as string; const latestKey = decryptFileKey; const key = decryptAssymmetric({ @@ -146,21 +150,24 @@ export const useGetProjectSecrets = ({ } }); return { secrets: sharedSecrets }; - } + }, []) }); export const useGetProjectSecretsByKey = ({ workspaceId, env, decryptFileKey, - isPaused + isPaused, + folderId, + secretPath }: GetProjectSecretsDTO) => useQuery({ // wait for all values to be available enabled: Boolean(decryptFileKey && workspaceId && env) && !isPaused, - queryKey: secretKeys.getProjectSecret(workspaceId, env), - queryFn: () => fetchProjectEncryptedSecrets(workspaceId, env), - select: (data) => { + // right now secretpath is passed as folderid as only this is used in overview + queryKey: secretKeys.getProjectSecret(workspaceId, env, secretPath), + queryFn: () => fetchProjectEncryptedSecrets(workspaceId, env, folderId, secretPath), + select: useCallback((data: EncryptedSecret[]) => { const PRIVATE_KEY = localStorage.getItem('PRIVATE_KEY') as string; const latestKey = decryptFileKey; const key = decryptAssymmetric({ @@ -235,7 +242,7 @@ export const useGetProjectSecretsByKey = ({ }); return { secrets: sharedSecrets, uniqueSecCount: Object.keys(uniqSecKeys).length }; - } + }, []) }); const fetchEncryptedSecretVersion = async (secretId: string, offset: number, limit: number) => { @@ -256,7 +263,7 @@ export const useGetSecretVersion = (dto: GetSecretVersionsDTO) => enabled: Boolean(dto.secretId && dto.decryptFileKey), queryKey: secretKeys.getSecretVersion(dto.secretId), queryFn: () => fetchEncryptedSecretVersion(dto.secretId, dto.offset, dto.limit), - select: (data) => { + select: useCallback((data: EncryptedSecretVersion[]) => { const PRIVATE_KEY = localStorage.getItem('PRIVATE_KEY') as string; const latestKey = dto.decryptFileKey; const key = decryptAssymmetric({ @@ -278,7 +285,7 @@ export const useGetSecretVersion = (dto: GetSecretVersionsDTO) => }) })) .sort((a, b) => b.createdAt.localeCompare(a.createdAt)); - } + }, []) }); export const useBatchSecretsOp = () => { diff --git a/frontend/src/hooks/api/secrets/types.ts b/frontend/src/hooks/api/secrets/types.ts index 2a5938c68..5bde496e2 100644 --- a/frontend/src/hooks/api/secrets/types.ts +++ b/frontend/src/hooks/api/secrets/types.ts @@ -96,6 +96,7 @@ export type GetProjectSecretsDTO = { env: string | string[]; decryptFileKey: UserWsKeyPair; folderId?: string; + secretPath?: string; isPaused?: boolean; onSuccess?: (data: DecryptedSecret[]) => void; }; diff --git a/frontend/src/pages/dashboard/[id].tsx b/frontend/src/pages/dashboard/[id].tsx index 8d31b4291..3c6fdf995 100644 --- a/frontend/src/pages/dashboard/[id].tsx +++ b/frontend/src/pages/dashboard/[id].tsx @@ -12,13 +12,6 @@ const Dashboard = () => { const queryEnv = router.query.env as string; const isOverviewMode = !queryEnv; - const onExploreEnv = (slug: string) => { - router.push({ - pathname: router.pathname, - query: { ...router.query, env: slug } - }); - }; - return ( <> @@ -29,11 +22,7 @@ const Dashboard = () => {
- {isOverviewMode ? ( - - ) : ( - - )} + {isOverviewMode ? : }
); diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index feca862f6..693da7ce6 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -4,20 +4,20 @@ @layer utilities { .flex-0 { - flex:0; + flex: 0; } .flex-2 { flex-grow: 2; } .flex-3 { - flex-grow: 3; + flex-grow: 3; } } @layer components { .secret-table { - @apply bg-mineshaft-800 text-left text-bunker-300 w-full; + @apply w-full bg-mineshaft-800 text-left text-bunker-300; } /* padding except for comment column */ @@ -29,13 +29,37 @@ @apply py-1 px-1 pr-2 text-sm; } - .secret-table th:not(:last-child),.secret-table td:not(:last-child) { + .secret-table th:not(:last-child), + .secret-table td:not(:last-child) { @apply border-r border-mineshaft-600; } .secret-table tr { @apply border-b border-mineshaft-600; } + + .breadcrumb::after, + .breadcrumb::before { + content: ''; + height: 60%; + width: 100%; + z-index: -1; + display: block; + position: absolute; + @apply bg-mineshaft-800; + } + + .breadcrumb::after { + left: 5px; + bottom: -3px; + transform: skew(-30deg); + } + + .breadcrumb::before { + left: 5px; + top: -3px; + transform: skew(30deg); + } } @import '@fontsource/inter/400.css'; diff --git a/frontend/src/views/DashboardPage/DashboardEnvOverview.tsx b/frontend/src/views/DashboardPage/DashboardEnvOverview.tsx index 7427bbc3e..c95a795db 100644 --- a/frontend/src/views/DashboardPage/DashboardEnvOverview.tsx +++ b/frontend/src/views/DashboardPage/DashboardEnvOverview.tsx @@ -1,35 +1,32 @@ import { useEffect, useMemo, useState } from 'react'; -import { FormProvider, useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { useRouter } from 'next/router'; -import { faKey, faMagnifyingGlass } from '@fortawesome/free-solid-svg-icons'; +import { faFolderOpen, faKey, faMagnifyingGlass } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { yupResolver } from '@hookform/resolvers/yup'; import NavHeader from '@app/components/navigation/NavHeader'; import { Button, Input, TableContainer, Tooltip } from '@app/components/v2'; import { useWorkspace } from '@app/context'; import { + useGetProjectFoldersBatch, useGetProjectSecretsByKey, useGetUserWsEnvironments, useGetUserWsKey } from '@app/hooks/api'; -import { WorkspaceEnv } from '@app/hooks/api/types'; import { EnvComparisonRow } from './components/EnvComparisonRow'; -import { FormData, schema } from './DashboardPage.utils'; +import { FolderComparisonRow } from './components/EnvComparisonRow/FolderComparisonRow'; -export const DashboardEnvOverview = ({ onEnvChange }: { onEnvChange: any }) => { +export const DashboardEnvOverview = () => { const { t } = useTranslation(); const router = useRouter(); - const [selectedEnv, setSelectedEnv] = useState(null); - const { currentWorkspace, isLoading } = useWorkspace(); const workspaceId = currentWorkspace?._id as string; const { data: latestFileKey } = useGetUserWsKey(workspaceId); const [searchFilter, setSearchFilter] = useState(''); + const secretPath = router.query?.secretPath as string; useEffect(() => { if (!isLoading && !workspaceId && router.isReady) { @@ -38,14 +35,7 @@ export const DashboardEnvOverview = ({ onEnvChange }: { onEnvChange: any }) => { }, [isLoading, workspaceId, router.isReady]); const { data: wsEnv, isLoading: isEnvListLoading } = useGetUserWsEnvironments({ - workspaceId, - onSuccess: (data) => { - // get an env with one of the access available - const env = data.find(({ isReadDenied }) => !isReadDenied); - if (env) { - setSelectedEnv(env); - } - } + workspaceId }); const userAvailableEnvs = wsEnv?.filter(({ isReadDenied }) => !isReadDenied); @@ -54,17 +44,32 @@ export const DashboardEnvOverview = ({ onEnvChange }: { onEnvChange: any }) => { workspaceId, env: userAvailableEnvs?.map((env) => env.slug) ?? [], decryptFileKey: latestFileKey!, - isPaused: false + isPaused: false, + secretPath }); - const method = useForm({ - // why any: well yup inferred ts expects other keys to defined as undefined - defaultValues: secrets as any, - values: secrets as any, - mode: 'onBlur', - resolver: yupResolver(schema) + const folders = useGetProjectFoldersBatch({ + folders: + userAvailableEnvs?.map((env) => ({ + environment: env.slug, + workspaceId + })) ?? [], + parentFolderPath: secretPath }); + const foldersGroupedByEnv = useMemo(() => { + const res: Record> = {}; + folders.forEach(({ data }) => { + data?.folders + ?.filter(({ name }) => name.toLowerCase().includes(searchFilter)) + ?.forEach((folder) => { + if (!res?.[folder.name]) res[folder.name] = {}; + res[folder.name][data.environment] = true; + }); + }); + return res; + }, [folders, userAvailableEnvs, searchFilter]); + const numSecretsMissingPerEnv = useMemo(() => { // first get all sec in the env then subtract with total to get missing ones const secPerEnvMissing: Record = Object.fromEntries( @@ -81,7 +86,43 @@ export const DashboardEnvOverview = ({ onEnvChange }: { onEnvChange: any }) => { return secPerEnvMissing; }, [secrets, userAvailableEnvs]); - const isReadOnly = selectedEnv?.isWriteDenied; + const onExploreEnv = (slug: string) => { + const query: Record = { ...router.query, env: slug }; + delete query.secretPath; + // the dir return will have the present directory folder id + // use that when clicking on explore to redirect user to there + const envFolder = folders.find(({ data }) => slug === data?.environment); + const dir = envFolder?.data?.dir?.pop(); + if (dir) { + query.folderId = dir.id; + } + + router.push({ + pathname: router.pathname, + query + }); + }; + + const onFolderClick = (path: string) => { + router.push({ + pathname: router.pathname, + query: { + ...router.query, + secretPath: `${router.query?.secretPath || ''}/${path}` + } + }); + }; + + const onFolderCrumbClick = (index: number) => { + const newSecPath = secretPath.split('/').filter(Boolean).slice(0, index).join('/'); + const query = { ...router.query, secretPath: `/${newSecPath}` } as Record; + // root condition + if (index === 0) delete query.secretPath; + router.push({ + pathname: router.pathname, + query + }); + }; if (isSecretsLoading || isEnvListLoading) { return ( @@ -91,165 +132,195 @@ export const DashboardEnvOverview = ({ onEnvChange }: { onEnvChange: any }) => { ); } + const filteredSecrets = Object.keys(secrets?.secrets || {})?.filter((secret: any) => + secret.toUpperCase().includes(searchFilter.toUpperCase()) + ); // when secrets is not loading and secrets list is empty - const isDashboardSecretEmpty = !isSecretsLoading && !Object.keys(secrets?.secrets || {})?.filter((secret: any) => secret.toUpperCase().includes(searchFilter.toUpperCase()))?.length; + const isDashboardSecretEmpty = !isSecretsLoading && !filteredSecrets?.length; + const isFoldersEmtpy = + !folders.some(({ isLoading: isFolderLoading }) => isFolderLoading) && + !Object.keys(foldersGroupedByEnv).length; + const isDashboardEmpty = isFoldersEmtpy && isDashboardSecretEmpty; return (
- -
- {/* breadcrumb row */} -
- +
+ +
+
+

Secrets Overview

+

+ Inject your secrets using + + Infisical CLI + + or + + Infisical SDKs + +

+
+
+
+
onFolderCrumbClick(0)} + onKeyDown={() => null} + role="button" + tabIndex={0} + > +
-
-

Secrets Overview

-

- Inject your secrets using - ( +

-
- setSearchFilter(e.target.value)} - leftIcon={} - /> -
-
-
-
-
{0}
+ {path}
-
-
-
Secret
-
-
- {numSecretsMissingPerEnv && - userAvailableEnvs?.map((env) => { - return ( -
-
- {env.name} - {numSecretsMissingPerEnv[env.slug] > 0 && ( -
- - - {numSecretsMissingPerEnv[env.slug]} - - -
- )} + ))} +
+
+ setSearchFilter(e.target.value)} + leftIcon={} + /> +
+
+
+
+
+
{0}
+
+
+
+
Secret
+
+
+ {numSecretsMissingPerEnv && + userAvailableEnvs?.map((env) => { + return ( +
+
+ {env.name} + {numSecretsMissingPerEnv[env.slug] > 0 && ( +
+ + + {numSecretsMissingPerEnv[env.slug]} + +
-
- ); - })} -
-
- {!isDashboardSecretEmpty && ( - - - - {Object.keys(secrets?.secrets || {})?.filter((secret: any) => secret.toUpperCase().includes(searchFilter.toUpperCase())).map((key, index) => ( - - ))} - -
-
- )} - {isDashboardSecretEmpty && ( -
-
- - No secrets found. - To add more secrets you can explore any environment. + )}
- )} - {/* In future, we should add an option to add environments here -
- -
*/} -
-
-
-
0
+ ); + })} +
+
+ {!isDashboardEmpty && ( + + + + {Object.keys(foldersGroupedByEnv || {}).map((folderName, index) => ( + + ))} + {Object.keys(secrets?.secrets || {}) + ?.filter((secret: any) => + secret.toUpperCase().includes(searchFilter.toUpperCase()) + ) + .map((key) => ( + + ))} + +
+
+ )} + {isDashboardEmpty && ( +
+
+ + No secrets/folders found. + To add more secrets you can explore any environment.
-
- 0 - -
- {userAvailableEnvs?.map((env) => { - return ( -
- -
- ); - })}
+ )} +
+
+
+
0
- - +
+ 0 + +
+ {userAvailableEnvs?.map((env) => { + return ( +
+ +
+ ); + })} +
+
); }; diff --git a/frontend/src/views/DashboardPage/components/EnvComparisonRow/EnvComparisonRow.tsx b/frontend/src/views/DashboardPage/components/EnvComparisonRow/EnvComparisonRow.tsx index cb12a3d9a..6ef1eb45a 100644 --- a/frontend/src/views/DashboardPage/components/EnvComparisonRow/EnvComparisonRow.tsx +++ b/frontend/src/views/DashboardPage/components/EnvComparisonRow/EnvComparisonRow.tsx @@ -1,11 +1,10 @@ /* eslint-disable react/jsx-no-useless-fragment */ import { useCallback, useState } from 'react'; -import { faCircle, faEye, faEyeSlash, faMinus } from '@fortawesome/free-solid-svg-icons'; +import { faCircle, faEye, faEyeSlash, faKey, faMinus } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { twMerge } from 'tailwind-merge'; type Props = { - index: number; secrets: any[] | undefined; // permission and external state's that decided to hide or show isReadOnly?: boolean; @@ -30,7 +29,7 @@ const DashboardInput = ({ if (val === undefined) return ( - + ); if (val?.length === 0) @@ -110,7 +109,6 @@ const DashboardInput = ({ }; export const EnvComparisonRow = ({ - index, secrets, isSecretValueHidden, isReadOnly, @@ -126,7 +124,9 @@ export const EnvComparisonRow = ({ return ( -
{index + 1}
+
+ +
diff --git a/frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx b/frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx new file mode 100644 index 000000000..b63c05dc2 --- /dev/null +++ b/frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx @@ -0,0 +1,42 @@ +import { faCheck, faFolder, faX } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; + +type Props = { + folderInEnv: Record; + userAvailableEnvs?: Array<{ slug: string; name: string }>; + folderName: string; + onClick: (folderName: string) => void; +}; + +export const FolderComparisonRow = ({ + folderInEnv = {}, + userAvailableEnvs = [], + folderName, + onClick +}: Props) => ( + onClick(folderName)} + > + +
+ +
+ + +
{folderName}
+ + {userAvailableEnvs?.map(({ slug }) => ( + + + + ))} + +); From 3d70333f9c348ef3bb1d84677e252ce894f5e702 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 13 Jun 2023 15:31:55 +0100 Subject: [PATCH 21/55] Update password-reset email response --- backend/src/controllers/v1/passwordController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/controllers/v1/passwordController.ts b/backend/src/controllers/v1/passwordController.ts index bdeae0fd4..da1903eba 100644 --- a/backend/src/controllers/v1/passwordController.ts +++ b/backend/src/controllers/v1/passwordController.ts @@ -36,8 +36,8 @@ export const emailPasswordReset = async (req: Request, res: Response) => { if (!user || !user?.publicKey) { // case: user has already completed account - return res.status(403).send({ - message: "If an account exists with this email, a password reset link has been sent" + return res.status(200).send({ + message:"If an account exists with this email, a password reset link has been sent" }); } From b1b32a34c9982685039237230cb1a1b544a94aa4 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Tue, 13 Jun 2023 20:16:14 +0530 Subject: [PATCH 22/55] feat(folder-sec-overview): made folder cell fully select --- .../components/EnvComparisonRow/FolderComparisonRow.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx b/frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx index b63c05dc2..a8870afc9 100644 --- a/frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx +++ b/frontend/src/views/DashboardPage/components/EnvComparisonRow/FolderComparisonRow.tsx @@ -18,13 +18,13 @@ export const FolderComparisonRow = ({ className="group flex min-w-full cursor-pointer flex-row items-center hover:bg-mineshaft-800" onClick={() => onClick(folderName)} > - +
-
{folderName}
+
{folderName}
{userAvailableEnvs?.map(({ slug }) => ( Date: Tue, 13 Jun 2023 18:28:30 -0400 Subject: [PATCH 23/55] add terraform docs --- docs/integrations/frameworks/terraform.mdx | 97 +++++++++++++++++----- 1 file changed, 77 insertions(+), 20 deletions(-) diff --git a/docs/integrations/frameworks/terraform.mdx b/docs/integrations/frameworks/terraform.mdx index 7161ec586..0826a833e 100644 --- a/docs/integrations/frameworks/terraform.mdx +++ b/docs/integrations/frameworks/terraform.mdx @@ -1,34 +1,91 @@ --- title: "Terraform" -description: "How to use Infisical to inject environment variables and secrets into terraform." +description: "Fetch Secrets From Infisical With Terraform" --- -Prerequisites: +This guide provides step-by-step guidance on how to fetch secrets from Infisical using Terraform. -- Set up and add envars to [Infisical Cloud](https://app.infisical.com) -- [Install the CLI](/cli/overview) +## Prerequisites -## Initialize Infisical for your [Terraform](https://www.terraform.io/) project +- Basic understanding of Terraform +- Install [Terraform](https://www.terraform.io/downloads.html) -```bash -# navigate to the root of your of your project -cd /path/to/project +## Steps -# then initialize Infisical -infisical init +### 1. Define Required Providers + +Specify `infisical` in the `required_providers` block within the `terraform` block of your configuration file. If you would like to use a specific version of the provider, uncomment and replace `` with the version of the Infisical provider that you want to use. + +```hcl main.tf +terraform { + required_providers { + infisical = { + # version = + source = "infisical/infisical" + } + } +} ``` -## Run terraform as usual but with Infisical +### 2. Configure the Infisical Provider -```bash -infisical run -- +Set up the Infisical provider by specifying the `host` and `service_token`. Replace `<>` in `service_token` with your actual token. The `host` is only required if you are using a self-hosted instance of Infisical. -# Example -infisical run -- terraform plan +```hcl main.tf +provider "infisical" { + host = "https://app.infisical.com" # Only required if using self hosted instance of Infisical, default is https://app.infisical.com + service_token = "<>" # Get token https://infisical.com/docs/documentation/platform/token +} ``` - - To inject any arbitrary variable to terraform, you have - to prefix them with `TF_VAR`. Read more about that - [here](https://developer.hashicorp.com/terraform/cli/config/environment-variables#tf_var_name). - + + It is recommended to use Terraform variables to pass your service token dynamically to avoid hard coding it + + +### 3. Fetch Infisical Secrets + +Use the `infisical_secrets` data source to fetch your secrets. This is defined with an empty block `{}` as the provider automatically fetches all secrets associated with your service token. + +```hcl main.tf +data "infisical_secrets" "my-secrets" {} +``` + +### 4. Define Outputs + +As an example, we are going to output your fetched secrets. Replace `SECRET-NAME` with the actual name of your secret. + +For a single secret: + +```hcl main.tf +output "single-secret" { + value = data.infisical_secrets.my-secrets.secrets["SECRET-NAME"] +} +``` + +For all secrets: + +```hcl +output "all-secrets" { + value = data.infisical_secrets.my-secrets.secrets +} +``` + +### 5. Run Terraform + +Once your configuration is complete, initialize your Terraform working directory: + +```bash +$ terraform init +``` + +Then, run the plan command to view the fetched secrets: + +```bash +$ terraform plan +``` + +Terraform will now fetch your secrets from Infisical and display them as output according to your configuration. + +## Conclusion + +You have now successfully set up and used the Infisical provider with Terraform to fetch secrets. For more information, visit the [Infisical documentation](https://registry.terraform.io/providers/Infisical/infisical/latest/docs). From 786778fef62698800e1cb6af55dd64bc281989a5 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 13 Jun 2023 21:56:15 -0400 Subject: [PATCH 24/55] isolate gamma environment --- .github/values.yaml | 4 +- .github/workflows/build-staging-img.yml | 149 ++++++++++++++++++++++++ 2 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build-staging-img.yml diff --git a/.github/values.yaml b/.github/values.yaml index 819df5066..bab85c47e 100644 --- a/.github/values.yaml +++ b/.github/values.yaml @@ -6,7 +6,7 @@ frontend: secrets.infisical.com/auto-reload: "true" replicaCount: 2 image: - repository: infisical/frontend + repository: infisical/staging_deployment_frontend tag: "latest" pullPolicy: Always kubeSecretRef: managed-secret-frontend @@ -25,7 +25,7 @@ backend: secrets.infisical.com/auto-reload: "true" replicaCount: 2 image: - repository: infisical/backend + repository: infisical/staging_deployment_backend tag: "latest" pullPolicy: Always kubeSecretRef: managed-backend-secret diff --git a/.github/workflows/build-staging-img.yml b/.github/workflows/build-staging-img.yml new file mode 100644 index 000000000..4f17aae65 --- /dev/null +++ b/.github/workflows/build-staging-img.yml @@ -0,0 +1,149 @@ +name: Build, Publish and Deploy to Gamma +on: + workflow_dispatch: + push: + paths: + - "backend/**" + - "frontend/**" + +jobs: + backend-image: + name: Build backend image + runs-on: ubuntu-latest + steps: + - name: ☁️ Checkout source + uses: actions/checkout@v3 + - name: 📦 Install dependencies to test all dependencies + run: npm ci --only-production + working-directory: backend + - name: 🧪 Run tests + run: npm run test:ci + working-directory: backend + - name: Save commit hashes for tag + id: commit + uses: pr-mpt/actions-commit-hash@v2 + - name: 🔧 Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: 🐋 Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Set up Depot CLI + uses: depot/setup-action@v1 + - name: 📦 Build backend and export to Docker + uses: depot/build-push-action@v1 + with: + project: 64mmf0n610 + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} + load: true + context: backend + tags: infisical/staging_deployment_backend:test + - name: ⏻ Spawn backend container and dependencies + run: | + docker compose -f .github/resources/docker-compose.be-test.yml up --wait --quiet-pull + - name: 🧪 Test backend image + run: | + ./.github/resources/healthcheck.sh infisical-backend-test + - name: ⏻ Shut down backend container and dependencies + run: | + docker compose -f .github/resources/docker-compose.be-test.yml down + - name: 🏗️ Build backend and push + uses: depot/build-push-action@v1 + with: + project: 64mmf0n610 + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} + push: true + context: backend + tags: | + infisical/staging_deployment_backend:${{ steps.commit.outputs.short }} + infisical/staging_deployment_backend:latest + platforms: linux/amd64,linux/arm64 + + frontend-image: + name: Build frontend image + runs-on: ubuntu-latest + steps: + - name: ☁️ Checkout source + uses: actions/checkout@v3 + - name: Save commit hashes for tag + id: commit + uses: pr-mpt/actions-commit-hash@v2 + - name: 🔧 Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: 🐋 Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Set up Depot CLI + uses: depot/setup-action@v1 + - name: 📦 Build frontend and export to Docker + uses: depot/build-push-action@v1 + with: + load: true + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} + project: 64mmf0n610 + context: frontend + tags: infisical/staging_deployment_frontend:test + build-args: | + POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} + - name: ⏻ Spawn frontend container + run: | + docker run -d --rm --name infisical-frontend-test infisical/staging_deployment_frontend:test + - name: 🧪 Test frontend image + run: | + ./.github/resources/healthcheck.sh infisical-frontend-test + - name: ⏻ Shut down frontend container + run: | + docker stop infisical-frontend-test + - name: 🏗️ Build frontend and push + uses: depot/build-push-action@v1 + with: + project: 64mmf0n610 + push: true + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} + context: frontend + tags: | + infisical/staging_deployment_frontend:${{ steps.commit.outputs.short }} + infisical/staging_deployment_frontend:latest + platforms: linux/amd64,linux/arm64 + build-args: | + POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} + gamma-deployment: + name: Deploy to gamma + runs-on: ubuntu-latest + needs: [frontend-image, backend-image] + steps: + - name: ☁️ Checkout source + uses: actions/checkout@v3 + - name: Install Helm + uses: azure/setup-helm@v3 + with: + version: v3.10.0 + - name: Install infisical helm chart + run: | + helm repo add infisical-helm-charts 'https://dl.cloudsmith.io/public/infisical/helm-charts/helm/charts/' + helm repo update + - name: Install kubectl + uses: azure/setup-kubectl@v3 + - name: Install doctl + uses: digitalocean/action-doctl@v2 + with: + token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} + - name: Save DigitalOcean kubeconfig with short-lived credentials + run: doctl kubernetes cluster kubeconfig save --expiry-seconds 600 k8s-1-25-4-do-0-nyc1-1670645170179 + - name: switch to gamma namespace + run: kubectl config set-context --current --namespace=gamma + - name: test kubectl + run: kubectl get ingress + - name: Download helm values to file and upgrade gamma deploy + run: | + wget https://raw.githubusercontent.com/Infisical/infisical/main/.github/values.yaml + helm upgrade infisical infisical-helm-charts/infisical --values values.yaml --recreate-pods + if [[ $(helm status infisical) == *"FAILED"* ]]; then + echo "Helm upgrade failed" + exit 1 + else + echo "Helm upgrade was successful" + fi From 9742fdc77096b3bab1b3cfe5364da0aef5c30ade Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 13 Jun 2023 22:00:51 -0400 Subject: [PATCH 25/55] rename docker image --- .github/workflows/build-staging-img.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-staging-img.yml b/.github/workflows/build-staging-img.yml index 4f17aae65..ca718a47d 100644 --- a/.github/workflows/build-staging-img.yml +++ b/.github/workflows/build-staging-img.yml @@ -38,7 +38,7 @@ jobs: token: ${{ secrets.DEPOT_PROJECT_TOKEN }} load: true context: backend - tags: infisical/staging_deployment_backend:test + tags: infisical/backend:test - name: ⏻ Spawn backend container and dependencies run: | docker compose -f .github/resources/docker-compose.be-test.yml up --wait --quiet-pull From a4fb2378bb8c93f99eee1f06115b9b8e39fbd8eb Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 13 Jun 2023 22:06:53 -0400 Subject: [PATCH 26/55] wait for helm upgrade before mark complete --- .github/workflows/build-staging-img.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-staging-img.yml b/.github/workflows/build-staging-img.yml index ca718a47d..73295fc54 100644 --- a/.github/workflows/build-staging-img.yml +++ b/.github/workflows/build-staging-img.yml @@ -140,7 +140,7 @@ jobs: - name: Download helm values to file and upgrade gamma deploy run: | wget https://raw.githubusercontent.com/Infisical/infisical/main/.github/values.yaml - helm upgrade infisical infisical-helm-charts/infisical --values values.yaml --recreate-pods + helm upgrade infisical infisical-helm-charts/infisical --values values.yaml --wait if [[ $(helm status infisical) == *"FAILED"* ]]; then echo "Helm upgrade failed" exit 1 From 776cecc3efa346392abd28fd22ba61831460d664 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 13 Jun 2023 22:16:26 -0400 Subject: [PATCH 27/55] create prod release action --- ...age.yml => build-docker-image-to-prod.yml} | 39 +------------------ .github/workflows/build-staging-img.yml | 7 +--- 2 files changed, 2 insertions(+), 44 deletions(-) rename .github/workflows/{docker-image.yml => build-docker-image-to-prod.yml} (73%) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/build-docker-image-to-prod.yml similarity index 73% rename from .github/workflows/docker-image.yml rename to .github/workflows/build-docker-image-to-prod.yml index 87797c5f7..322a553c4 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/build-docker-image-to-prod.yml @@ -1,4 +1,4 @@ -name: Build, Publish and Deploy to Gamma +name: Release production images (frontend, backend) on: push: tags: @@ -116,40 +116,3 @@ jobs: platforms: linux/amd64,linux/arm64 build-args: | POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} - gamma-deployment: - name: Deploy to gamma - runs-on: ubuntu-latest - needs: [frontend-image, backend-image] - steps: - - name: ☁️ Checkout source - uses: actions/checkout@v3 - - name: Install Helm - uses: azure/setup-helm@v3 - with: - version: v3.10.0 - - name: Install infisical helm chart - run: | - helm repo add infisical-helm-charts 'https://dl.cloudsmith.io/public/infisical/helm-charts/helm/charts/' - helm repo update - - name: Install kubectl - uses: azure/setup-kubectl@v3 - - name: Install doctl - uses: digitalocean/action-doctl@v2 - with: - token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} - - name: Save DigitalOcean kubeconfig with short-lived credentials - run: doctl kubernetes cluster kubeconfig save --expiry-seconds 600 k8s-1-25-4-do-0-nyc1-1670645170179 - - name: switch to gamma namespace - run: kubectl config set-context --current --namespace=gamma - - name: test kubectl - run: kubectl get ingress - - name: Download helm values to file and upgrade gamma deploy - run: | - wget https://raw.githubusercontent.com/Infisical/infisical/main/.github/values.yaml - helm upgrade infisical infisical-helm-charts/infisical --values values.yaml --recreate-pods - if [[ $(helm status infisical) == *"FAILED"* ]]; then - echo "Helm upgrade failed" - exit 1 - else - echo "Helm upgrade was successful" - fi diff --git a/.github/workflows/build-staging-img.yml b/.github/workflows/build-staging-img.yml index 73295fc54..0e50d0906 100644 --- a/.github/workflows/build-staging-img.yml +++ b/.github/workflows/build-staging-img.yml @@ -1,10 +1,5 @@ name: Build, Publish and Deploy to Gamma -on: - workflow_dispatch: - push: - paths: - - "backend/**" - - "frontend/**" +on: [workflow_dispatch] jobs: backend-image: From 92647341a9453c5416ea8fccca14f8384c8543cd Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Wed, 14 Jun 2023 11:52:48 +0100 Subject: [PATCH 28/55] Update getPlan with workspace-specific consideration and add environmentLimit to returned plan --- .../controllers/v1/membershipOrgController.ts | 2 +- .../src/controllers/v1/workspaceController.ts | 2 +- .../controllers/v1/organizationsController.ts | 3 ++- backend/src/ee/routes/v1/organizations.ts | 3 ++- backend/src/ee/services/EELicenseService.ts | 24 ++++++++++++------- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/backend/src/controllers/v1/membershipOrgController.ts b/backend/src/controllers/v1/membershipOrgController.ts index eafd7fae2..0d4c1436d 100644 --- a/backend/src/controllers/v1/membershipOrgController.ts +++ b/backend/src/controllers/v1/membershipOrgController.ts @@ -99,7 +99,7 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { throw new Error('Failed to validate organization membership'); } - const plan = await EELicenseService.getOrganizationPlan(organizationId); + const plan = await EELicenseService.getPlan(organizationId); if (plan.memberLimit !== null) { // case: limit imposed on number of members allowed diff --git a/backend/src/controllers/v1/workspaceController.ts b/backend/src/controllers/v1/workspaceController.ts index 796a7bebc..2faac0d68 100644 --- a/backend/src/controllers/v1/workspaceController.ts +++ b/backend/src/controllers/v1/workspaceController.ts @@ -116,7 +116,7 @@ export const createWorkspace = async (req: Request, res: Response) => { throw new Error("Failed to validate organization membership"); } - const plan = await EELicenseService.getOrganizationPlan(organizationId); + const plan = await EELicenseService.getPlan(organizationId); if (plan.workspaceLimit !== null) { // case: limit imposed on number of workspaces allowed diff --git a/backend/src/ee/controllers/v1/organizationsController.ts b/backend/src/ee/controllers/v1/organizationsController.ts index 2dd212e77..2d2867d71 100644 --- a/backend/src/ee/controllers/v1/organizationsController.ts +++ b/backend/src/ee/controllers/v1/organizationsController.ts @@ -8,8 +8,9 @@ import { EELicenseService } from '../../services'; */ export const getOrganizationPlan = async (req: Request, res: Response) => { const { organizationId } = req.params; + const workspaceId = req.query.workspaceId as string; - const plan = await EELicenseService.getOrganizationPlan(organizationId); + const plan = await EELicenseService.getPlan(organizationId, workspaceId); return res.status(200).send({ plan, diff --git a/backend/src/ee/routes/v1/organizations.ts b/backend/src/ee/routes/v1/organizations.ts index fd9fd08e9..711b5a17f 100644 --- a/backend/src/ee/routes/v1/organizations.ts +++ b/backend/src/ee/routes/v1/organizations.ts @@ -5,7 +5,7 @@ import { requireOrganizationAuth, validateRequest } from '../../../middleware'; -import { param, body } from 'express-validator'; +import { param, body, query } from 'express-validator'; import { organizationsController } from '../../controllers/v1'; import { OWNER, ADMIN, MEMBER, ACCEPTED @@ -21,6 +21,7 @@ router.get( acceptedStatuses: [ACCEPTED] }), param('organizationId').exists().trim(), + query('workspaceId').optional().isString(), validateRequest, organizationsController.getOrganizationPlan ); diff --git a/backend/src/ee/services/EELicenseService.ts b/backend/src/ee/services/EELicenseService.ts index c98a5a449..85a27de99 100644 --- a/backend/src/ee/services/EELicenseService.ts +++ b/backend/src/ee/services/EELicenseService.ts @@ -22,6 +22,8 @@ interface FeatureSet { workspacesUsed: number; memberLimit: number | null; membersUsed: number; + environmentLimit: number | null; + environmentsUsed: number; secretVersioning: boolean; pitRecovery: boolean; rbac: boolean; @@ -51,6 +53,8 @@ class EELicenseService { workspacesUsed: 0, memberLimit: null, membersUsed: 0, + environmentLimit: null, + environmentsUsed: 0, secretVersioning: true, pitRecovery: true, rbac: true, @@ -69,10 +73,10 @@ class EELicenseService { }); } - public async getOrganizationPlan(organizationId: string): Promise { + public async getPlan(organizationId: string, workspaceId?: string): Promise { try { if (this.instanceType === 'cloud') { - const cachedPlan = this.localFeatureSet.get(organizationId); + const cachedPlan = this.localFeatureSet.get(`${organizationId}-${workspaceId ?? ''}`); if (cachedPlan) { return cachedPlan; } @@ -80,12 +84,16 @@ class EELicenseService { const organization = await Organization.findById(organizationId); if (!organization) throw OrganizationNotFoundError(); - const { data: { currentPlan } } = await licenseServerKeyRequest.get( - `${await getLicenseServerUrl()}/api/license-server/v1/customers/${organization.customerId}/cloud-plan` - ); + let url = `${await getLicenseServerUrl()}/api/license-server/v1/customers/${organization.customerId}/cloud-plan`; + + if (workspaceId) { + url += `?workspaceId=${workspaceId}`; + } + + const { data: { currentPlan } } = await licenseServerKeyRequest.get(url); // cache fetched plan for organization - this.localFeatureSet.set(organizationId, currentPlan); + this.localFeatureSet.set(`${organizationId}-${workspaceId ?? ''}`, currentPlan); return currentPlan; } @@ -96,10 +104,10 @@ class EELicenseService { return this.globalFeatureSet; } - public async refreshOrganizationPlan(organizationId: string) { + public async refreshOrganizationPlan(organizationId: string, workspaceId?: string) { if (this.instanceType === 'cloud') { this.localFeatureSet.del(organizationId); - await this.getOrganizationPlan(organizationId); + await this.getPlan(organizationId, workspaceId); } } From 82a026a426ebd027cd21ad0917c1557ccd25c7fa Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Wed, 14 Jun 2023 12:28:01 +0100 Subject: [PATCH 29/55] Update refreshPlan to consider workspace --- backend/src/controllers/v2/environmentController.ts | 7 ++++++- backend/src/ee/services/EELicenseService.ts | 4 ++-- backend/src/helpers/organization.ts | 2 +- backend/src/helpers/workspace.ts | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/backend/src/controllers/v2/environmentController.ts b/backend/src/controllers/v2/environmentController.ts index d4f91bace..d3ff5d0ab 100644 --- a/backend/src/controllers/v2/environmentController.ts +++ b/backend/src/controllers/v2/environmentController.ts @@ -8,6 +8,7 @@ import { Membership, } from '../../models'; import { SecretVersion } from '../../ee/models'; +import { EELicenseService } from '../../ee/services'; import { BadRequestError } from '../../utils/errors'; import _ from 'lodash'; import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from '../../variables'; @@ -40,6 +41,8 @@ export const createWorkspaceEnvironment = async ( }); await workspace.save(); + await EELicenseService.refreshPlan(workspace.organization.toString(), workspaceId); + return res.status(200).send({ message: 'Successfully created new environment', workspace: workspaceId, @@ -186,7 +189,9 @@ export const deleteWorkspaceEnvironment = async ( await Membership.updateMany( { workspace: workspaceId }, { $pull: { deniedPermissions: { environmentSlug: environmentSlug } } } - ) + ); + + await EELicenseService.refreshPlan(workspace.organization.toString(), workspaceId); return res.status(200).send({ message: 'Successfully deleted environment', diff --git a/backend/src/ee/services/EELicenseService.ts b/backend/src/ee/services/EELicenseService.ts index 85a27de99..e8fe9253e 100644 --- a/backend/src/ee/services/EELicenseService.ts +++ b/backend/src/ee/services/EELicenseService.ts @@ -104,9 +104,9 @@ class EELicenseService { return this.globalFeatureSet; } - public async refreshOrganizationPlan(organizationId: string, workspaceId?: string) { + public async refreshPlan(organizationId: string, workspaceId?: string) { if (this.instanceType === 'cloud') { - this.localFeatureSet.del(organizationId); + this.localFeatureSet.del(`${organizationId}-${workspaceId ?? ''}`); await this.getPlan(organizationId, workspaceId); } } diff --git a/backend/src/helpers/organization.ts b/backend/src/helpers/organization.ts index 3e7f169d0..b88fbdf12 100644 --- a/backend/src/helpers/organization.ts +++ b/backend/src/helpers/organization.ts @@ -170,7 +170,7 @@ export const updateSubscriptionOrgQuantity = async ({ ); } - await EELicenseService.refreshOrganizationPlan(organizationId); + await EELicenseService.refreshPlan(organizationId); return stripeSubscription; }; \ No newline at end of file diff --git a/backend/src/helpers/workspace.ts b/backend/src/helpers/workspace.ts index 8b15d1baf..694540f86 100644 --- a/backend/src/helpers/workspace.ts +++ b/backend/src/helpers/workspace.ts @@ -41,7 +41,7 @@ export const createWorkspace = async ({ workspaceId: workspace._id }); - await EELicenseService.refreshOrganizationPlan(organizationId); + await EELicenseService.refreshPlan(organizationId); return workspace; }; From 04b7383bbeb218aa9c73cb84aa2e143e0376d979 Mon Sep 17 00:00:00 2001 From: Eklal Budhathoki Date: Thu, 15 Jun 2023 00:17:00 +0545 Subject: [PATCH 30/55] fix: minor typos in code --- frontend/src/pages/password-reset.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/password-reset.tsx b/frontend/src/pages/password-reset.tsx index 450cd82de..bdc83fea6 100644 --- a/frontend/src/pages/password-reset.tsx +++ b/frontend/src/pages/password-reset.tsx @@ -169,7 +169,7 @@ export default function PasswordReset() {

- You can find it in your emrgency kit. You had to download the enrgency kit during signup. + You can find it in your emergency kit. You had to download the emergency kit during signup.

From ccf0877b81ce7d1aff5849388632ee1fcd5f31fa Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 14 Jun 2023 17:15:37 -0400 Subject: [PATCH 31/55] Revert "Revert "add refresh token to cli"" This reverts commit 6b0e0f70d299ed8bf4fa23e4d70f8426e0a40a5f. --- cli/packages/api/api.go | 37 ++++++++++++++++++++++++++++++++ cli/packages/api/model.go | 5 +++++ cli/packages/cmd/login.go | 11 +++++----- cli/packages/models/cli.go | 7 +++--- cli/packages/util/credentials.go | 15 +++++++++++++ cli/packages/util/helper.go | 17 +++------------ 6 files changed, 70 insertions(+), 22 deletions(-) diff --git a/cli/packages/api/api.go b/cli/packages/api/api.go index 5f8bc7aae..4ace4c387 100644 --- a/cli/packages/api/api.go +++ b/cli/packages/api/api.go @@ -2,6 +2,7 @@ package api import ( "fmt" + "net/http" "github.com/Infisical/infisical-merge/packages/config" "github.com/go-resty/resty/v2" @@ -179,6 +180,19 @@ func CallLogin2V2(httpClient *resty.Client, request GetLoginTwoV2Request) (GetLo SetBody(request). Post(fmt.Sprintf("%v/v2/auth/login2", config.INFISICAL_URL)) + cookies := response.Cookies() + // Find a cookie by name + cookieName := "jid" + var refreshToken *http.Cookie + for _, cookie := range cookies { + if cookie.Name == cookieName { + refreshToken = cookie + break + } + } + + loginTwoV2Response.RefreshToken = refreshToken.Value + if err != nil { return GetLoginTwoV2Response{}, fmt.Errorf("CallLogin2V2: Unable to complete api request [err=%s]", err) } @@ -247,3 +261,26 @@ func CallGetAccessibleEnvironments(httpClient *resty.Client, request GetAccessib return accessibleEnvironmentsResponse, nil } + +func CallGetNewAccessTokenWithRefreshToken(httpClient *resty.Client, refreshToken string) (GetNewAccessTokenWithRefreshTokenResponse, error) { + var newAccessToken GetNewAccessTokenWithRefreshTokenResponse + response, err := httpClient. + R(). + SetResult(&newAccessToken). + SetHeader("User-Agent", USER_AGENT). + SetCookie(&http.Cookie{ + Name: "jid", + Value: refreshToken, + }). + Post(fmt.Sprintf("%v/v1/auth/token", config.INFISICAL_URL)) + + if err != nil { + return GetNewAccessTokenWithRefreshTokenResponse{}, err + } + + if response.IsError() { + return GetNewAccessTokenWithRefreshTokenResponse{}, fmt.Errorf("CallGetNewAccessTokenWithRefreshToken: Unsuccessful response: [response=%v]", response) + } + + return newAccessToken, nil +} diff --git a/cli/packages/api/model.go b/cli/packages/api/model.go index 71354c84c..bce2a34d6 100644 --- a/cli/packages/api/model.go +++ b/cli/packages/api/model.go @@ -281,6 +281,7 @@ type GetLoginTwoV2Response struct { ProtectedKey string `json:"protectedKey"` ProtectedKeyIV string `json:"protectedKeyIV"` ProtectedKeyTag string `json:"protectedKeyTag"` + RefreshToken string `json:"RefreshToken"` } type VerifyMfaTokenRequest struct { @@ -314,3 +315,7 @@ type VerifyMfaTokenErrorResponse struct { Application string `json:"application"` Extra []interface{} `json:"extra"` } + +type GetNewAccessTokenWithRefreshTokenResponse struct { + Token string `json:"token"` +} diff --git a/cli/packages/cmd/login.go b/cli/packages/cmd/login.go index f20a17853..ab0f531c2 100644 --- a/cli/packages/cmd/login.go +++ b/cli/packages/cmd/login.go @@ -97,7 +97,7 @@ var loginCmd = &cobra.Command{ loginOneResponse, loginTwoResponse, err := getFreshUserCredentials(email, password) if err != nil { - fmt.Println("Unable to authenticate with the provided credentials, please try again") + log.Warn().Msg("Unable to authenticate with the provided credentials, please ensure your email and password are correct") log.Debug().Err(err) return } @@ -244,9 +244,10 @@ var loginCmd = &cobra.Command{ } userCredentialsToBeStored := &models.UserCredentials{ - Email: email, - PrivateKey: string(decryptedPrivateKey), - JTWToken: loginTwoResponse.Token, + Email: email, + PrivateKey: string(decryptedPrivateKey), + JTWToken: loginTwoResponse.Token, + RefreshToken: loginTwoResponse.RefreshToken, } err = util.StoreUserCredsInKeyRing(userCredentialsToBeStored) @@ -414,7 +415,7 @@ func getFreshUserCredentials(email string, password string) (*api.GetLoginOneV2R }) if err != nil { - util.HandleError(err) + return nil, nil, err } // **** Login 2 diff --git a/cli/packages/models/cli.go b/cli/packages/models/cli.go index b9b0ab7b5..22f72e2da 100644 --- a/cli/packages/models/cli.go +++ b/cli/packages/models/cli.go @@ -5,9 +5,10 @@ import ( ) type UserCredentials struct { - Email string `json:"email"` - PrivateKey string `json:"privateKey"` - JTWToken string `json:"JTWToken"` + Email string `json:"email"` + PrivateKey string `json:"privateKey"` + JTWToken string `json:"JTWToken"` + RefreshToken string `json:"RefreshToken"` } // The file struct for Infisical config file diff --git a/cli/packages/util/credentials.go b/cli/packages/util/credentials.go index 9147a717a..6b203c2e3 100644 --- a/cli/packages/util/credentials.go +++ b/cli/packages/util/credentials.go @@ -9,6 +9,7 @@ import ( "github.com/Infisical/infisical-merge/packages/config" "github.com/Infisical/infisical-merge/packages/models" "github.com/go-resty/resty/v2" + "github.com/rs/zerolog/log" ) type LoggedInUserDetails struct { @@ -96,6 +97,20 @@ func GetCurrentLoggedInUserDetails() (LoggedInUserDetails, error) { } isAuthenticated := api.CallIsAuthenticated(httpClient) + + if !isAuthenticated { + accessTokenResponse, _ := api.CallGetNewAccessTokenWithRefreshToken(httpClient, userCreds.RefreshToken) + if accessTokenResponse.Token != "" { + isAuthenticated = true + userCreds.JTWToken = accessTokenResponse.Token + } + } + + err = StoreUserCredsInKeyRing(&userCreds) + if err != nil { + log.Debug().Msg("unable to store your user credentials with new access token") + } + if !isAuthenticated { return LoggedInUserDetails{ IsUserLoggedIn: true, // was logged in diff --git a/cli/packages/util/helper.go b/cli/packages/util/helper.go index 8527c4059..d96ac3899 100644 --- a/cli/packages/util/helper.go +++ b/cli/packages/util/helper.go @@ -74,23 +74,12 @@ func ConfigContainsEmail(users []models.LoggedInUser, email string) bool { } func RequireLogin() { - currentUserDetails, err := GetCurrentLoggedInUserDetails() + // get the config file that stores the current logged in user email + configFile, _ := GetConfigFile() - if err != nil { - HandleError(err, "unable to retrieve your login details") - } - - if !currentUserDetails.IsUserLoggedIn { + if configFile.LoggedInUserEmail == "" { PrintErrorMessageAndExit("You must be logged in to run this command. To login, run [infisical login]") } - - if currentUserDetails.LoginExpired { - PrintErrorMessageAndExit("Your login expired, please login in again. To login, run [infisical login]") - } - - if currentUserDetails.UserCredentials.Email == "" && currentUserDetails.UserCredentials.JTWToken == "" && currentUserDetails.UserCredentials.PrivateKey == "" { - PrintErrorMessageAndExit("One or more of your login details is empty. Please try logging in again via by running [infisical login]") - } } func RequireServiceToken() { From 7088b3c9d89ea2c24ca632a9fda16bd04b161a04 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 14 Jun 2023 17:31:47 -0400 Subject: [PATCH 32/55] patch refresh token cli --- cli/packages/api/api.go | 21 ++++++++++++++++++++- cli/packages/api/model.go | 1 + cli/packages/cmd/login.go | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/cli/packages/api/api.go b/cli/packages/api/api.go index 4ace4c387..87832a537 100644 --- a/cli/packages/api/api.go +++ b/cli/packages/api/api.go @@ -160,6 +160,22 @@ func CallVerifyMfaToken(httpClient *resty.Client, request VerifyMfaTokenRequest) SetBody(request). Post(fmt.Sprintf("%v/v2/auth/mfa/verify", config.INFISICAL_URL)) + cookies := response.Cookies() + // Find a cookie by name + cookieName := "jid" + var refreshToken *http.Cookie + for _, cookie := range cookies { + if cookie.Name == cookieName { + refreshToken = cookie + break + } + } + + // When MFA is enabled + if refreshToken != nil { + verifyMfaTokenResponse.RefreshToken = refreshToken.Value + } + if err != nil { return nil, nil, fmt.Errorf("CallVerifyMfaToken: Unable to complete api request [err=%s]", err) } @@ -191,7 +207,10 @@ func CallLogin2V2(httpClient *resty.Client, request GetLoginTwoV2Request) (GetLo } } - loginTwoV2Response.RefreshToken = refreshToken.Value + // When MFA is enabled + if refreshToken != nil { + loginTwoV2Response.RefreshToken = refreshToken.Value + } if err != nil { return GetLoginTwoV2Response{}, fmt.Errorf("CallLogin2V2: Unable to complete api request [err=%s]", err) diff --git a/cli/packages/api/model.go b/cli/packages/api/model.go index bce2a34d6..30896b819 100644 --- a/cli/packages/api/model.go +++ b/cli/packages/api/model.go @@ -299,6 +299,7 @@ type VerifyMfaTokenResponse struct { ProtectedKey string `json:"protectedKey"` ProtectedKeyIV string `json:"protectedKeyIV"` ProtectedKeyTag string `json:"protectedKeyTag"` + RefreshToken string `json:"refreshToken"` } type VerifyMfaTokenErrorResponse struct { diff --git a/cli/packages/cmd/login.go b/cli/packages/cmd/login.go index ab0f531c2..1329b1d2a 100644 --- a/cli/packages/cmd/login.go +++ b/cli/packages/cmd/login.go @@ -143,7 +143,7 @@ var loginCmd = &cobra.Command{ loginTwoResponse.Tag = verifyMFAresponse.Tag loginTwoResponse.Token = verifyMFAresponse.Token loginTwoResponse.EncryptionVersion = verifyMFAresponse.EncryptionVersion - + loginTwoResponse.RefreshToken = verifyMFAresponse.RefreshToken break } } From 391e37d49e3cbe388c5476ac221c0cbce457a5e8 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Wed, 14 Jun 2023 21:27:37 -0700 Subject: [PATCH 33/55] fixed bugs with env and password reset --- backend/src/ee/services/EELicenseService.ts | 4 +--- frontend/src/components/login/InitialLoginStep.tsx | 10 ++++++++-- frontend/src/hooks/api/subscriptions/types.ts | 2 +- .../ProjectSettingsPage/ProjectSettingsPage.tsx | 7 +++---- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/backend/src/ee/services/EELicenseService.ts b/backend/src/ee/services/EELicenseService.ts index e8fe9253e..89e71e57b 100644 --- a/backend/src/ee/services/EELicenseService.ts +++ b/backend/src/ee/services/EELicenseService.ts @@ -30,7 +30,6 @@ interface FeatureSet { customRateLimits: boolean; customAlerts: boolean; auditLogs: boolean; - envLimit?: number | null; } /** @@ -60,8 +59,7 @@ class EELicenseService { rbac: true, customRateLimits: true, customAlerts: true, - auditLogs: false, - envLimit: null + auditLogs: false } public localFeatureSet: NodeCache; diff --git a/frontend/src/components/login/InitialLoginStep.tsx b/frontend/src/components/login/InitialLoginStep.tsx index 77e83434e..3dcdf968b 100644 --- a/frontend/src/components/login/InitialLoginStep.tsx +++ b/frontend/src/components/login/InitialLoginStep.tsx @@ -76,7 +76,7 @@ export default function InitialLoginStep({ {t('login.continue-with-google')}
*/} -
+
-
+
{t('login.create-account')}
+
+ Forgot password? + + Recover your account + +
} diff --git a/frontend/src/hooks/api/subscriptions/types.ts b/frontend/src/hooks/api/subscriptions/types.ts index 61736b4f4..af1b315d1 100644 --- a/frontend/src/hooks/api/subscriptions/types.ts +++ b/frontend/src/hooks/api/subscriptions/types.ts @@ -12,5 +12,5 @@ export type SubscriptionPlan = { tier: number; workspaceLimit: number; workspacesUsed: number; - envLimit: number; + environmentLimit: number; }; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx index ee9b85cc5..808a74bd8 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx @@ -41,12 +41,11 @@ import { CreateServiceToken, CreateUpdateEnvFormData, CreateWsTag, + E2EESection, EnvironmentSection, ProjectIndexSecretsSection, ProjectNameChangeSection, - ServiceTokenSection, - E2EESection -} from './components'; + ServiceTokenSection} from './components'; export const ProjectSettingsPage = () => { const { t } = useTranslation(); @@ -91,7 +90,7 @@ export const ProjectSettingsPage = () => { // get user subscription const { subscription } = useSubscription(); const host = window.location.origin; - const isEnvServiceAllowed = ((currentWorkspace?.environments || []).length < (subscription?.envLimit || 3) || host !== 'https://app.infisical.com'); + const isEnvServiceAllowed = (((currentWorkspace?.environments || []).length < (subscription?.environmentLimit || 3)) || host !== 'https://app.infisical.com'); const onRenameWorkspace = async (name: string) => { try { From 381806d84b53eec1e9d18efef33058a58ab187c8 Mon Sep 17 00:00:00 2001 From: Stijn-Kuijper Date: Thu, 15 Jun 2023 09:46:09 +0200 Subject: [PATCH 34/55] feat: initial getApps for Cloudflare Pages --- backend/src/integrations/apps.ts | 44 ++++++++++++++++++- backend/src/models/integrationAuth.ts | 6 ++- backend/src/variables/integration.ts | 5 ++- frontend/public/data/frequentConstants.ts | 3 +- .../cloudflare-pages/authorize.tsx | 4 +- 5 files changed, 54 insertions(+), 8 deletions(-) diff --git a/backend/src/integrations/apps.ts b/backend/src/integrations/apps.ts index f8ed77277..e7f745974 100644 --- a/backend/src/integrations/apps.ts +++ b/backend/src/integrations/apps.ts @@ -17,6 +17,7 @@ import { INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, INTEGRATION_CHECKLY, + INTEGRATION_CLOUDFLARE_PAGES, INTEGRATION_HEROKU_API_URL, INTEGRATION_GITLAB_API_URL, INTEGRATION_VERCEL_API_URL, @@ -27,7 +28,8 @@ import { INTEGRATION_CIRCLECI_API_URL, INTEGRATION_TRAVISCI_API_URL, INTEGRATION_SUPABASE_API_URL, - INTEGRATION_CHECKLY_API_URL + INTEGRATION_CHECKLY_API_URL, + INTEGRATION_CLOUDFLARE_PAGES_API_URL } from "../variables"; interface App { @@ -127,6 +129,12 @@ const getApps = async ({ accessToken, }); break; + case INTEGRATION_CLOUDFLARE_PAGES: + apps = await getAppsCloudflarePages({ + accessToken, + accountId: '' + }) + break; } return apps; @@ -636,4 +644,38 @@ const getAppsCheckly = async ({ accessToken }: { accessToken: string }) => { return apps; }; +/** + * Return list of projects for the Cloudflare Pages integration + * @param {Object} obj + * @param {String} obj.accessToken - api key for the Cloudflare API + * @returns {Object[]} apps - Cloudflare Pages projects + * @returns {String} apps.name - name of Cloudflare Pages project + */ +const getAppsCloudflarePages = async ({ + accessToken, + accountId +}: { + accessToken: string; + accountId?: string; +}) => { + const { data } = await standardRequest.get( + `${INTEGRATION_CLOUDFLARE_PAGES_API_URL}/client/v4/accounts/${accountId}/pages/projects`, + { + headers: { + Authorization: `Bearer ${accessToken}`, + "Accept": "application/json", + }, + } + ); + + const apps = data.map((a: any) => { + return { + name: a["project_name"], + appId: a.id, + }; + }); + + return apps; +} + export { getApps }; diff --git a/backend/src/models/integrationAuth.ts b/backend/src/models/integrationAuth.ts index cc28c9fd6..9e2cb0c19 100644 --- a/backend/src/models/integrationAuth.ts +++ b/backend/src/models/integrationAuth.ts @@ -15,6 +15,7 @@ import { INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, INTEGRATION_HASHICORP_VAULT, + INTEGRATION_CLOUDFLARE_PAGES, ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64 @@ -23,7 +24,7 @@ import { export interface IIntegrationAuth extends Document { _id: Types.ObjectId; workspace: Types.ObjectId; - integration: 'heroku' | 'vercel' | 'netlify' | 'github' | 'gitlab' | 'render' | 'railway' | 'flyio' | 'azure-key-vault' | 'circleci' | 'travisci' | 'supabase' | 'aws-parameter-store' | 'aws-secret-manager' | 'checkly'; + integration: 'heroku' | 'vercel' | 'netlify' | 'github' | 'gitlab' | 'render' | 'railway' | 'flyio' | 'azure-key-vault' | 'circleci' | 'travisci' | 'supabase' | 'aws-parameter-store' | 'aws-secret-manager' | 'checkly' | 'cloudflare-pages'; teamId: string; accountId: string; url: string; @@ -66,7 +67,8 @@ const integrationAuthSchema = new Schema( INTEGRATION_CIRCLECI, INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_HASHICORP_VAULT, + INTEGRATION_CLOUDFLARE_PAGES, ], required: true, }, diff --git a/backend/src/variables/integration.ts b/backend/src/variables/integration.ts index 8935e7b49..06bd74fdf 100644 --- a/backend/src/variables/integration.ts +++ b/backend/src/variables/integration.ts @@ -23,8 +23,8 @@ export const INTEGRATION_CIRCLECI = "circleci"; export const INTEGRATION_TRAVISCI = "travisci"; export const INTEGRATION_SUPABASE = 'supabase'; export const INTEGRATION_CHECKLY = 'checkly'; -export const INTEGRATION_CLOUDFLARE_PAGES = 'cloudflare-pages'; export const INTEGRATION_HASHICORP_VAULT = 'hashicorp-vault'; +export const INTEGRATION_CLOUDFLARE_PAGES = 'cloudflare-pages'; export const INTEGRATION_SET = new Set([ INTEGRATION_AZURE_KEY_VAULT, INTEGRATION_HEROKU, @@ -38,7 +38,8 @@ export const INTEGRATION_SET = new Set([ INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, INTEGRATION_CHECKLY, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_HASHICORP_VAULT, + INTEGRATION_CLOUDFLARE_PAGES ]); // integration types diff --git a/frontend/public/data/frequentConstants.ts b/frontend/public/data/frequentConstants.ts index e873f1a72..480061e1a 100644 --- a/frontend/public/data/frequentConstants.ts +++ b/frontend/public/data/frequentConstants.ts @@ -18,7 +18,8 @@ const integrationSlugNameMapping: Mapping = { 'travisci': 'TravisCI', 'supabase': 'Supabase', 'checkly': 'Checkly', - 'hashicorp-vault': 'Vault' + 'hashicorp-vault': 'Vault', + 'cloudflare-pages': 'Cloudflare Pages' } const envMapping: Mapping = { diff --git a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx index 71b6059e8..cbd20f018 100644 --- a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx +++ b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx @@ -26,8 +26,8 @@ export default function CloudflarePagesIntegrationPage() { const integrationAuth = await saveIntegrationAccessToken({ workspaceId: localStorage.getItem('projectData.id'), integration: 'cloudflare-pages', - accessId: accessKey, - accessToken: accountId, + accessId: accountId, + accessToken: accessKey, url: null, namespace: null }); From ccaf9a9ffcacb611704c56982b163d23bee14f63 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Thu, 15 Jun 2023 15:48:19 +0100 Subject: [PATCH 35/55] Update implementation for environment limit paywall --- .../controllers/v2/environmentController.ts | 19 ++++++++++++++++++- .../ProjectSettingsPage.tsx | 4 ++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/backend/src/controllers/v2/environmentController.ts b/backend/src/controllers/v2/environmentController.ts index d3ff5d0ab..bf6d7d3c5 100644 --- a/backend/src/controllers/v2/environmentController.ts +++ b/backend/src/controllers/v2/environmentController.ts @@ -9,7 +9,7 @@ import { } from '../../models'; import { SecretVersion } from '../../ee/models'; import { EELicenseService } from '../../ee/services'; -import { BadRequestError } from '../../utils/errors'; +import { BadRequestError, WorkspaceNotFoundError } from '../../utils/errors'; import _ from 'lodash'; import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from '../../variables'; @@ -23,9 +23,26 @@ export const createWorkspaceEnvironment = async ( req: Request, res: Response ) => { + const { workspaceId } = req.params; const { environmentName, environmentSlug } = req.body; const workspace = await Workspace.findById(workspaceId).exec(); + + if (!workspace) throw WorkspaceNotFoundError(); + + const plan = await EELicenseService.getPlan(workspace.organization.toString()); + + if (plan.environmentLimit !== null) { + // case: limit imposed on number of environments allowed + if (workspace.environments.length >= plan.environmentLimit) { + // case: number of environments used exceeds the number of environments allowed + + return res.status(400).send({ + message: 'Failed to create environment due to environment limit reached. Upgrade plan to create more environments.' + }); + } + } + if ( !workspace || workspace?.environments.find( diff --git a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx index 808a74bd8..9e9ead8b1 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx @@ -89,8 +89,8 @@ export const ProjectSettingsPage = () => { // get user subscription const { subscription } = useSubscription(); - const host = window.location.origin; - const isEnvServiceAllowed = (((currentWorkspace?.environments || []).length < (subscription?.environmentLimit || 3)) || host !== 'https://app.infisical.com'); + + const isEnvServiceAllowed = (subscription?.environmentLimit && currentWorkspace?.environments) ? (currentWorkspace.environments.length < subscription.environmentLimit) : true; const onRenameWorkspace = async (name: string) => { try { From 24714185910d07bc302678eb2ae5475cd47aac7e Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Thu, 15 Jun 2023 22:38:26 +0530 Subject: [PATCH 36/55] feat(folder-scoped-integration): implemented api changes for integrations to support folders --- .../controllers/v1/integrationController.ts | 62 ++- backend/src/helpers/bot.ts | 98 ++-- backend/src/helpers/integration.ts | 523 ++++++++++-------- backend/src/models/integration.ts | 54 +- backend/src/routes/v1/integration.ts | 124 +++-- backend/src/services/BotService.ts | 204 +++---- backend/src/utils/setup/backfillData.ts | 17 + backend/src/utils/setup/index.ts | 2 + 8 files changed, 599 insertions(+), 485 deletions(-) diff --git a/backend/src/controllers/v1/integrationController.ts b/backend/src/controllers/v1/integrationController.ts index 5119761d0..63828ef14 100644 --- a/backend/src/controllers/v1/integrationController.ts +++ b/backend/src/controllers/v1/integrationController.ts @@ -1,10 +1,11 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; -import { - Integration -} from '../../models'; -import { EventService } from '../../services'; -import { eventPushSecrets } from '../../events'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; +import { Integration } from "../../models"; +import { EventService } from "../../services"; +import { eventPushSecrets } from "../../events"; +import Folder from "../../models/folder"; +import { getFolderByPath } from "../../services/FolderService"; +import { BadRequestError } from "../../utils/errors"; /** * Create/initialize an (empty) integration for integration authorization @@ -25,9 +26,24 @@ export const createIntegration = async (req: Request, res: Response) => { targetServiceId, owner, path, - region + region, + secretPath, } = req.body; - + + const folders = await Folder.findOne({ + workspace: req.integrationAuth.workspace._id, + environment: sourceEnvironment, + }); + + if (folders) { + const folder = getFolderByPath(folders.nodes, secretPath); + if (!folder) { + throw BadRequestError({ + message: "Path for service token does not exist", + }); + } + } + // TODO: validate [sourceEnvironment] and [targetEnvironment] // initialize new integration after saving integration access token @@ -44,17 +60,18 @@ export const createIntegration = async (req: Request, res: Response) => { owner, path, region, + secretPath, integration: req.integrationAuth.integration, - integrationAuth: new Types.ObjectId(integrationAuthId) + integrationAuth: new Types.ObjectId(integrationAuthId), }).save(); - + if (integration) { // trigger event - push secrets EventService.handleEvent({ event: eventPushSecrets({ workspaceId: integration.workspace, - environment: sourceEnvironment - }) + environment: sourceEnvironment, + }), }); } @@ -70,7 +87,6 @@ export const createIntegration = async (req: Request, res: Response) => { * @returns */ export const updateIntegration = async (req: Request, res: Response) => { - // TODO: add integration-specific validation to ensure that each // integration has the correct fields populated in [Integration] @@ -81,8 +97,23 @@ export const updateIntegration = async (req: Request, res: Response) => { appId, targetEnvironment, owner, // github-specific integration param + secretPath, } = req.body; + const folders = await Folder.findOne({ + workspace: req.integration.workspace, + environment, + }); + + if (folders) { + const folder = getFolderByPath(folders.nodes, secretPath); + if (!folder) { + throw BadRequestError({ + message: "Path for service token does not exist", + }); + } + } + const integration = await Integration.findOneAndUpdate( { _id: req.integration._id, @@ -94,6 +125,7 @@ export const updateIntegration = async (req: Request, res: Response) => { appId, targetEnvironment, owner, + secretPath, }, { new: true, @@ -105,7 +137,7 @@ export const updateIntegration = async (req: Request, res: Response) => { EventService.handleEvent({ event: eventPushSecrets({ workspaceId: integration.workspace, - environment + environment, }), }); } diff --git a/backend/src/helpers/bot.ts b/backend/src/helpers/bot.ts index 439f7c531..8c3b5b816 100644 --- a/backend/src/helpers/bot.ts +++ b/backend/src/helpers/bot.ts @@ -1,29 +1,21 @@ import { Types } from "mongoose"; -import { - Bot, - BotKey, - Secret, - ISecret, - IUser -} from "../models"; +import { Bot, BotKey, Secret, ISecret, IUser } from "../models"; import { generateKeyPair, encryptSymmetric128BitHexKeyUTF8, decryptSymmetric128BitHexKeyUTF8, - decryptAsymmetric -} from '../utils/crypto'; + decryptAsymmetric, +} from "../utils/crypto"; import { SECRET_SHARED, ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 + ENCODING_SCHEME_BASE64, } from "../variables"; -import { - getEncryptionKey, - getRootEncryptionKey, - client -} from "../config"; +import { getEncryptionKey, getRootEncryptionKey, client } from "../config"; import { InternalServerError } from "../utils/errors"; +import Folder from "../models/folder"; +import { getFolderByPath } from "../services/FolderService"; /** * Create an inactive bot with name [name] for workspace with id [workspaceId] @@ -40,15 +32,14 @@ export const createBot = async ({ }) => { const encryptionKey = await getEncryptionKey(); const rootEncryptionKey = await getRootEncryptionKey(); - + const { publicKey, privateKey } = generateKeyPair(); - + if (rootEncryptionKey) { - const { - ciphertext, - iv, - tag - } = client.encryptSymmetric(privateKey, rootEncryptionKey); + const { ciphertext, iv, tag } = client.encryptSymmetric( + privateKey, + rootEncryptionKey + ); return await new Bot({ name, @@ -59,9 +50,8 @@ export const createBot = async ({ iv, tag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_BASE64 + keyEncoding: ENCODING_SCHEME_BASE64, }).save(); - } else if (encryptionKey) { const { ciphertext, iv, tag } = encryptSymmetric128BitHexKeyUTF8({ plaintext: privateKey, @@ -77,12 +67,12 @@ export const createBot = async ({ iv, tag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 + keyEncoding: ENCODING_SCHEME_UTF8, }).save(); } throw InternalServerError({ - message: 'Failed to create new bot due to missing encryption key' + message: "Failed to create new bot due to missing encryption key", }); }; @@ -92,11 +82,11 @@ export const createBot = async ({ */ export const getIsWorkspaceE2EEHelper = async (workspaceId: Types.ObjectId) => { const botKey = await BotKey.exists({ - workspace: workspaceId - }); - + workspace: workspaceId, + }); + return botKey ? false : true; -} +}; /** * Return decrypted secrets for workspace with id [workspaceId] @@ -108,16 +98,38 @@ export const getIsWorkspaceE2EEHelper = async (workspaceId: Types.ObjectId) => { export const getSecretsBotHelper = async ({ workspaceId, environment, + secretPath, }: { workspaceId: Types.ObjectId; environment: string; + secretPath: string; }) => { const content = {} as any; const key = await getKey({ workspaceId: workspaceId }); + + let folderId = "root"; + const folders = await Folder.findOne({ + workspace: workspaceId, + environment, + }); + + if (!folders && secretPath !== "/") { + throw InternalServerError({ message: "Folder not found" }); + } + + if (folders) { + const folder = getFolderByPath(folders.nodes, secretPath); + if (!folder) { + throw InternalServerError({ message: "Folder not found" }); + } + folderId = folder.id; + } + const secrets = await Secret.find({ workspace: workspaceId, environment, type: SECRET_SHARED, + folder: folderId, }); secrets.forEach((secret: ISecret) => { @@ -148,14 +160,17 @@ export const getSecretsBotHelper = async ({ * @param {String} obj.workspaceId - id of workspace * @returns {String} key - decrypted workspace key */ -export const getKey = async ({ workspaceId }: { workspaceId: Types.ObjectId }) => { +export const getKey = async ({ + workspaceId, +}: { + workspaceId: Types.ObjectId; +}) => { const encryptionKey = await getEncryptionKey(); const rootEncryptionKey = await getRootEncryptionKey(); const botKey = await BotKey.findOne({ workspace: workspaceId, - }) - .populate<{ sender: IUser }>("sender", "publicKey"); + }).populate<{ sender: IUser }>("sender", "publicKey"); if (!botKey) throw new Error("Failed to find bot key"); @@ -168,7 +183,12 @@ export const getKey = async ({ workspaceId }: { workspaceId: Types.ObjectId }) = if (rootEncryptionKey && bot.keyEncoding === ENCODING_SCHEME_BASE64) { // case: encoding scheme is base64 - const privateKeyBot = client.decryptSymmetric(bot.encryptedPrivateKey, rootEncryptionKey, bot.iv, bot.tag); + const privateKeyBot = client.decryptSymmetric( + bot.encryptedPrivateKey, + rootEncryptionKey, + bot.iv, + bot.tag + ); return decryptAsymmetric({ ciphertext: botKey.encryptedKey, @@ -177,15 +197,14 @@ export const getKey = async ({ workspaceId }: { workspaceId: Types.ObjectId }) = privateKey: privateKeyBot, }); } else if (encryptionKey && bot.keyEncoding === ENCODING_SCHEME_UTF8) { - // case: encoding scheme is utf8 const privateKeyBot = decryptSymmetric128BitHexKeyUTF8({ ciphertext: bot.encryptedPrivateKey, iv: bot.iv, tag: bot.tag, - key: encryptionKey + key: encryptionKey, }); - + return decryptAsymmetric({ ciphertext: botKey.encryptedKey, nonce: botKey.nonce, @@ -195,7 +214,8 @@ export const getKey = async ({ workspaceId }: { workspaceId: Types.ObjectId }) = } throw InternalServerError({ - message: "Failed to obtain bot's copy of workspace key needed for bot operations" + message: + "Failed to obtain bot's copy of workspace key needed for bot operations", }); }; @@ -254,4 +274,4 @@ export const decryptSymmetricHelper = async ({ }); return plaintext; -}; \ No newline at end of file +}; diff --git a/backend/src/helpers/integration.ts b/backend/src/helpers/integration.ts index b6f4b0915..baf41d762 100644 --- a/backend/src/helpers/integration.ts +++ b/backend/src/helpers/integration.ts @@ -1,26 +1,20 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; +import { Bot, Integration, IntegrationAuth } from "../models"; +import { exchangeCode, exchangeRefresh, syncSecrets } from "../integrations"; +import { BotService } from "../services"; import { - Bot, - Integration, - IntegrationAuth -} from '../models'; -import { exchangeCode, exchangeRefresh, syncSecrets } from '../integrations'; -import { BotService } from '../services'; -import { - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, - ALGORITHM_AES_256_GCM, - ENCODING_SCHEME_UTF8 -} from '../variables'; -import { - UnauthorizedRequestError, -} from '../utils/errors'; + INTEGRATION_VERCEL, + INTEGRATION_NETLIFY, + ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_UTF8, +} from "../variables"; +import { UnauthorizedRequestError } from "../utils/errors"; interface Update { - workspace: string; - integration: string; - teamId?: string; - accountId?: string; + workspace: string; + integration: string; + teamId?: string; + accountId?: string; } /** @@ -31,78 +25,83 @@ interface Update { * - Create bot sequence for integration * @param {Object} obj * @param {String} obj.workspaceId - id of workspace - * @param {String} obj.integration - name of integration + * @param {String} obj.integration - name of integration * @param {String} obj.code - code * @returns {IntegrationAuth} integrationAuth - integration auth after OAuth2 code-token exchange -*/ + */ export const handleOAuthExchangeHelper = async ({ - workspaceId, + workspaceId, + integration, + code, + environment, +}: { + workspaceId: string; + integration: string; + code: string; + environment: string; +}) => { + const bot = await Bot.findOne({ + workspace: workspaceId, + isActive: true, + }); + + if (!bot) + throw new Error("Bot must be enabled for OAuth2 code-token exchange"); + + // exchange code for access and refresh tokens + const res = await exchangeCode({ integration, code, - environment -}: { - workspaceId: string; - integration: string; - code: string; - environment: string; -}) => { - const bot = await Bot.findOne({ - workspace: workspaceId, - isActive: true + }); + + const update: Update = { + workspace: workspaceId, + integration, + }; + + switch (integration) { + case INTEGRATION_VERCEL: + update.teamId = res.teamId; + break; + case INTEGRATION_NETLIFY: + update.accountId = res.accountId; + break; + } + + const integrationAuth = await IntegrationAuth.findOneAndUpdate( + { + workspace: workspaceId, + integration, + }, + update, + { + new: true, + upsert: true, + } + ); + + if (res.refreshToken) { + // case: refresh token returned from exchange + // set integration auth refresh token + await setIntegrationAuthRefreshHelper({ + integrationAuthId: integrationAuth._id.toString(), + refreshToken: res.refreshToken, }); - - if (!bot) throw new Error('Bot must be enabled for OAuth2 code-token exchange'); - - // exchange code for access and refresh tokens - const res = await exchangeCode({ - integration, - code + } + + if (res.accessToken) { + // case: access token returned from exchange + // set integration auth access token + await setIntegrationAuthAccessHelper({ + integrationAuthId: integrationAuth._id.toString(), + accessId: null, + accessToken: res.accessToken, + accessExpiresAt: res.accessExpiresAt, }); - - const update: Update = { - workspace: workspaceId, - integration - } - - switch (integration) { - case INTEGRATION_VERCEL: - update.teamId = res.teamId; - break; - case INTEGRATION_NETLIFY: - update.accountId = res.accountId; - break; - } - - const integrationAuth = await IntegrationAuth.findOneAndUpdate({ - workspace: workspaceId, - integration - }, update, { - new: true, - upsert: true - }); - - if (res.refreshToken) { - // case: refresh token returned from exchange - // set integration auth refresh token - await setIntegrationAuthRefreshHelper({ - integrationAuthId: integrationAuth._id.toString(), - refreshToken: res.refreshToken - }); - } - - if (res.accessToken) { - // case: access token returned from exchange - // set integration auth access token - await setIntegrationAuthAccessHelper({ - integrationAuthId: integrationAuth._id.toString(), - accessId: null, - accessToken: res.accessToken, - accessExpiresAt: res.accessExpiresAt - }); - } - - return integrationAuth; -} + } + + return integrationAuth; +}; /** * Sync/push environment variables in workspace with id [workspaceId] to * all active integrations for that workspace @@ -110,48 +109,54 @@ export const handleOAuthExchangeHelper = async ({ * @param {Object} obj.workspaceId - id of workspace */ export const syncIntegrationsHelper = async ({ - workspaceId, - environment + workspaceId, + environment, }: { - workspaceId: Types.ObjectId; - environment?: string; + workspaceId: Types.ObjectId; + environment?: string; }) => { - const integrations = await Integration.find({ - workspace: workspaceId, - ...(environment ? { - environment - } : {}), - isActive: true, - app: { $ne: null } + const integrations = await Integration.find({ + workspace: workspaceId, + ...(environment + ? { + environment, + } + : {}), + isActive: true, + app: { $ne: null }, + }); + + // for each workspace integration, sync/push secrets + // to that integration + for await (const integration of integrations) { + // get workspace, environment (shared) secrets + const secrets = await BotService.getSecrets({ + // issue here? + workspaceId: integration.workspace, + environment: integration.environment, + secretPath: integration.secretPath, }); - // for each workspace integration, sync/push secrets - // to that integration - for await (const integration of integrations) { - // get workspace, environment (shared) secrets - const secrets = await BotService.getSecrets({ // issue here? - workspaceId: integration.workspace, - environment: integration.environment - }); + const integrationAuth = await IntegrationAuth.findById( + integration.integrationAuth + ); + if (!integrationAuth) throw new Error("Failed to find integration auth"); - const integrationAuth = await IntegrationAuth.findById(integration.integrationAuth); - if (!integrationAuth) throw new Error('Failed to find integration auth'); - - // get integration auth access token - const access = await getIntegrationAuthAccessHelper({ - integrationAuthId: integration.integrationAuth - }); + // get integration auth access token + const access = await getIntegrationAuthAccessHelper({ + integrationAuthId: integration.integrationAuth, + }); - // sync secrets to integration - await syncSecrets({ - integration, - integrationAuth, - secrets, - accessId: access.accessId === undefined ? null : access.accessId, - accessToken: access.accessToken - }); - } -} + // sync secrets to integration + await syncSecrets({ + integration, + integrationAuth, + secrets, + accessId: access.accessId === undefined ? null : access.accessId, + accessToken: access.accessToken, + }); + } +}; /** * Return decrypted refresh token using the bot's copy @@ -161,22 +166,29 @@ export const syncIntegrationsHelper = async ({ * @param {String} obj.integrationAuthId - id of integration auth * @param {String} refreshToken - decrypted refresh token */ -export const getIntegrationAuthRefreshHelper = async ({ integrationAuthId }: { integrationAuthId: Types.ObjectId }) => { - const integrationAuth = await IntegrationAuth - .findById(integrationAuthId) - .select('+refreshCiphertext +refreshIV +refreshTag'); +export const getIntegrationAuthRefreshHelper = async ({ + integrationAuthId, +}: { + integrationAuthId: Types.ObjectId; +}) => { + const integrationAuth = await IntegrationAuth.findById( + integrationAuthId + ).select("+refreshCiphertext +refreshIV +refreshTag"); - if (!integrationAuth) throw UnauthorizedRequestError({message: 'Failed to locate Integration Authentication credentials'}); - - const refreshToken = await BotService.decryptSymmetric({ - workspaceId: integrationAuth.workspace, - ciphertext: integrationAuth.refreshCiphertext as string, - iv: integrationAuth.refreshIV as string, - tag: integrationAuth.refreshTag as string + if (!integrationAuth) + throw UnauthorizedRequestError({ + message: "Failed to locate Integration Authentication credentials", }); - - return refreshToken; -} + + const refreshToken = await BotService.decryptSymmetric({ + workspaceId: integrationAuth.workspace, + ciphertext: integrationAuth.refreshCiphertext as string, + iv: integrationAuth.refreshIV as string, + tag: integrationAuth.refreshTag as string, + }); + + return refreshToken; +}; /** * Return decrypted access token using the bot's copy @@ -186,50 +198,65 @@ export const getIntegrationAuthRefreshHelper = async ({ integrationAuthId }: { i * @param {String} obj.integrationAuthId - id of integration auth * @returns {String} accessToken - decrypted access token */ -export const getIntegrationAuthAccessHelper = async ({ integrationAuthId }: { integrationAuthId: Types.ObjectId }) => { - let accessId; - let accessToken; - const integrationAuth = await IntegrationAuth - .findById(integrationAuthId) - .select('workspace integration +accessCiphertext +accessIV +accessTag +accessExpiresAt + refreshCiphertext +accessIdCiphertext +accessIdIV +accessIdTag'); +export const getIntegrationAuthAccessHelper = async ({ + integrationAuthId, +}: { + integrationAuthId: Types.ObjectId; +}) => { + let accessId; + let accessToken; + const integrationAuth = await IntegrationAuth.findById( + integrationAuthId + ).select( + "workspace integration +accessCiphertext +accessIV +accessTag +accessExpiresAt + refreshCiphertext +accessIdCiphertext +accessIdIV +accessIdTag" + ); - if (!integrationAuth) throw UnauthorizedRequestError({message: 'Failed to locate Integration Authentication credentials'}); - - accessToken = await BotService.decryptSymmetric({ - workspaceId: integrationAuth.workspace, - ciphertext: integrationAuth.accessCiphertext as string, - iv: integrationAuth.accessIV as string, - tag: integrationAuth.accessTag as string + if (!integrationAuth) + throw UnauthorizedRequestError({ + message: "Failed to locate Integration Authentication credentials", }); - if (integrationAuth?.accessExpiresAt && integrationAuth?.refreshCiphertext) { - // there is a access token expiration date - // and refresh token to exchange with the OAuth2 server - - if (integrationAuth.accessExpiresAt < new Date()) { - // access token is expired - const refreshToken = await getIntegrationAuthRefreshHelper({ integrationAuthId }); - accessToken = await exchangeRefresh({ - integrationAuth, - refreshToken - }); - } + accessToken = await BotService.decryptSymmetric({ + workspaceId: integrationAuth.workspace, + ciphertext: integrationAuth.accessCiphertext as string, + iv: integrationAuth.accessIV as string, + tag: integrationAuth.accessTag as string, + }); + + if (integrationAuth?.accessExpiresAt && integrationAuth?.refreshCiphertext) { + // there is a access token expiration date + // and refresh token to exchange with the OAuth2 server + + if (integrationAuth.accessExpiresAt < new Date()) { + // access token is expired + const refreshToken = await getIntegrationAuthRefreshHelper({ + integrationAuthId, + }); + accessToken = await exchangeRefresh({ + integrationAuth, + refreshToken, + }); } - - if (integrationAuth?.accessIdCiphertext && integrationAuth?.accessIdIV && integrationAuth?.accessIdTag) { - accessId = await BotService.decryptSymmetric({ - workspaceId: integrationAuth.workspace, - ciphertext: integrationAuth.accessIdCiphertext as string, - iv: integrationAuth.accessIdIV as string, - tag: integrationAuth.accessIdTag as string - }); - } - - return ({ - accessId, - accessToken + } + + if ( + integrationAuth?.accessIdCiphertext && + integrationAuth?.accessIdIV && + integrationAuth?.accessIdTag + ) { + accessId = await BotService.decryptSymmetric({ + workspaceId: integrationAuth.workspace, + ciphertext: integrationAuth.accessIdCiphertext as string, + iv: integrationAuth.accessIdIV as string, + tag: integrationAuth.accessIdTag as string, }); -} + } + + return { + accessId, + accessToken, + }; +}; /** * Encrypt refresh token [refreshToken] using the bot's copy @@ -240,41 +267,43 @@ export const getIntegrationAuthAccessHelper = async ({ integrationAuthId }: { in * @param {String} obj.refreshToken - refresh token */ export const setIntegrationAuthRefreshHelper = async ({ - integrationAuthId, - refreshToken + integrationAuthId, + refreshToken, }: { - integrationAuthId: string; - refreshToken: string; + integrationAuthId: string; + refreshToken: string; }) => { - - let integrationAuth = await IntegrationAuth - .findById(integrationAuthId); - - if (!integrationAuth) throw new Error('Failed to find integration auth'); - - const obj = await BotService.encryptSymmetric({ - workspaceId: integrationAuth.workspace, - plaintext: refreshToken - }); - - integrationAuth = await IntegrationAuth.findOneAndUpdate({ - _id: integrationAuthId - }, { - refreshCiphertext: obj.ciphertext, - refreshIV: obj.iv, - refreshTag: obj.tag, - algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 - }, { - new: true - }); - - return integrationAuth; -} + let integrationAuth = await IntegrationAuth.findById(integrationAuthId); + + if (!integrationAuth) throw new Error("Failed to find integration auth"); + + const obj = await BotService.encryptSymmetric({ + workspaceId: integrationAuth.workspace, + plaintext: refreshToken, + }); + + integrationAuth = await IntegrationAuth.findOneAndUpdate( + { + _id: integrationAuthId, + }, + { + refreshCiphertext: obj.ciphertext, + refreshIV: obj.iv, + refreshTag: obj.tag, + algorithm: ALGORITHM_AES_256_GCM, + keyEncoding: ENCODING_SCHEME_UTF8, + }, + { + new: true, + } + ); + + return integrationAuth; +}; /** * Encrypt access token [accessToken] and (optionally) access id [accessId] - * using the bot's copy of the workspace key for workspace belonging to + * using the bot's copy of the workspace key for workspace belonging to * integration auth with id [integrationAuthId] and store it along with [accessExpiresAt] * @param {Object} obj * @param {String} obj.integrationAuthId - id of integration auth @@ -282,48 +311,52 @@ export const setIntegrationAuthRefreshHelper = async ({ * @param {Date} obj.accessExpiresAt - expiration date of access token */ export const setIntegrationAuthAccessHelper = async ({ - integrationAuthId, - accessId, - accessToken, - accessExpiresAt + integrationAuthId, + accessId, + accessToken, + accessExpiresAt, }: { - integrationAuthId: string; - accessId: string | null; - accessToken: string; - accessExpiresAt: Date | undefined; + integrationAuthId: string; + accessId: string | null; + accessToken: string; + accessExpiresAt: Date | undefined; }) => { - let integrationAuth = await IntegrationAuth.findById(integrationAuthId); - - if (!integrationAuth) throw new Error('Failed to find integration auth'); - - const encryptedAccessTokenObj = await BotService.encryptSymmetric({ - workspaceId: integrationAuth.workspace, - plaintext: accessToken + let integrationAuth = await IntegrationAuth.findById(integrationAuthId); + + if (!integrationAuth) throw new Error("Failed to find integration auth"); + + const encryptedAccessTokenObj = await BotService.encryptSymmetric({ + workspaceId: integrationAuth.workspace, + plaintext: accessToken, + }); + + let encryptedAccessIdObj; + if (accessId) { + encryptedAccessIdObj = await BotService.encryptSymmetric({ + workspaceId: integrationAuth.workspace, + plaintext: accessId, }); - - let encryptedAccessIdObj; - if (accessId) { - encryptedAccessIdObj = await BotService.encryptSymmetric({ - workspaceId: integrationAuth.workspace, - plaintext: accessId - }); + } + + integrationAuth = await IntegrationAuth.findOneAndUpdate( + { + _id: integrationAuthId, + }, + { + accessIdCiphertext: encryptedAccessIdObj?.ciphertext ?? undefined, + accessIdIV: encryptedAccessIdObj?.iv ?? undefined, + accessIdTag: encryptedAccessIdObj?.tag ?? undefined, + accessCiphertext: encryptedAccessTokenObj.ciphertext, + accessIV: encryptedAccessTokenObj.iv, + accessTag: encryptedAccessTokenObj.tag, + accessExpiresAt, + algorithm: ALGORITHM_AES_256_GCM, + keyEncoding: ENCODING_SCHEME_UTF8, + }, + { + new: true, } - - integrationAuth = await IntegrationAuth.findOneAndUpdate({ - _id: integrationAuthId - }, { - accessIdCiphertext: encryptedAccessIdObj?.ciphertext ?? undefined, - accessIdIV: encryptedAccessIdObj?.iv ?? undefined, - accessIdTag: encryptedAccessIdObj?.tag ?? undefined, - accessCiphertext: encryptedAccessTokenObj.ciphertext, - accessIV: encryptedAccessTokenObj.iv, - accessTag: encryptedAccessTokenObj.tag, - accessExpiresAt, - algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 - }, { - new: true - }); - - return integrationAuth; -} \ No newline at end of file + ); + + return integrationAuth; +}; diff --git a/backend/src/models/integration.ts b/backend/src/models/integration.ts index d4fbae807..c23cf69f1 100644 --- a/backend/src/models/integration.ts +++ b/backend/src/models/integration.ts @@ -15,7 +15,7 @@ import { INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, INTEGRATION_CHECKLY, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_HASHICORP_VAULT, } from "../variables"; export interface IIntegration { @@ -33,23 +33,24 @@ export interface IIntegration { targetServiceId: string; path: string; region: string; + secretPath: string; integration: - | 'azure-key-vault' - | 'aws-parameter-store' - | 'aws-secret-manager' - | 'heroku' - | 'vercel' - | 'netlify' - | 'github' - | 'gitlab' - | 'render' - | 'railway' - | 'flyio' - | 'circleci' - | 'travisci' - | 'supabase' - | 'checkly' - | 'hashicorp-vault'; + | "azure-key-vault" + | "aws-parameter-store" + | "aws-secret-manager" + | "heroku" + | "vercel" + | "netlify" + | "github" + | "gitlab" + | "render" + | "railway" + | "flyio" + | "circleci" + | "travisci" + | "supabase" + | "checkly" + | "hashicorp-vault"; integrationAuth: Types.ObjectId; } @@ -71,7 +72,7 @@ const integrationSchema = new Schema( url: { // for custom self-hosted integrations (e.g. self-hosted GitHub enterprise) type: String, - default: null + default: null, }, app: { // name of app in provider @@ -90,17 +91,17 @@ const integrationSchema = new Schema( }, targetEnvironmentId: { type: String, - default: null + default: null, }, targetService: { // railway-specific service type: String, - default: null + default: null, }, targetServiceId: { // railway-specific service type: String, - default: null + default: null, }, owner: { // github-specific repo owner-login @@ -111,12 +112,12 @@ const integrationSchema = new Schema( // aws-parameter-store-specific path // (also) vercel preview-branch type: String, - default: null + default: null, }, region: { // aws-parameter-store-specific path type: String, - default: null + default: null, }, integration: { type: String, @@ -136,7 +137,7 @@ const integrationSchema = new Schema( INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, INTEGRATION_CHECKLY, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_HASHICORP_VAULT, ], required: true, }, @@ -145,6 +146,11 @@ const integrationSchema = new Schema( ref: "IntegrationAuth", required: true, }, + secretPath: { + type: String, + required: true, + default: "/", + }, }, { timestamps: true, diff --git a/backend/src/routes/v1/integration.ts b/backend/src/routes/v1/integration.ts index b8e0b38bd..c4ba329c0 100644 --- a/backend/src/routes/v1/integration.ts +++ b/backend/src/routes/v1/integration.ts @@ -1,75 +1,77 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { - requireAuth, - requireIntegrationAuth, - requireIntegrationAuthorizationAuth, - validateRequest -} from '../../middleware'; + requireAuth, + requireIntegrationAuth, + requireIntegrationAuthorizationAuth, + validateRequest, +} from "../../middleware"; import { - ADMIN, - MEMBER, - AUTH_MODE_JWT, - AUTH_MODE_API_KEY -} from '../../variables'; -import { body, param } from 'express-validator'; -import { integrationController } from '../../controllers/v1'; + ADMIN, + MEMBER, + AUTH_MODE_JWT, + AUTH_MODE_API_KEY, +} from "../../variables"; +import { body, param } from "express-validator"; +import { integrationController } from "../../controllers/v1"; router.post( - '/', - requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] - }), - requireIntegrationAuthorizationAuth({ - acceptedRoles: [ADMIN, MEMBER], - location: 'body' - }), - body('integrationAuthId').exists().isString().trim(), - body('app').trim(), - body('isActive').exists().isBoolean(), - body('appId').trim(), - body('sourceEnvironment').trim(), - body('targetEnvironment').trim(), - body('targetEnvironmentId').trim(), - body('targetService').trim(), - body('targetServiceId').trim(), - body('owner').trim(), - body('path').trim(), - body('region').trim(), - validateRequest, - integrationController.createIntegration + "/", + requireAuth({ + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], + }), + requireIntegrationAuthorizationAuth({ + acceptedRoles: [ADMIN, MEMBER], + location: "body", + }), + body("integrationAuthId").exists().isString().trim(), + body("app").trim(), + body("isActive").exists().isBoolean(), + body("appId").trim(), + body("secretPath").default("/").isString().trim(), + body("sourceEnvironment").trim(), + body("targetEnvironment").trim(), + body("targetEnvironmentId").trim(), + body("targetService").trim(), + body("targetServiceId").trim(), + body("owner").trim(), + body("path").trim(), + body("region").trim(), + validateRequest, + integrationController.createIntegration ); router.patch( - '/:integrationId', - requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] - }), - requireIntegrationAuth({ - acceptedRoles: [ADMIN, MEMBER] - }), - param('integrationId').exists().trim(), - body('isActive').exists().isBoolean(), - body('app').exists().trim(), - body('environment').exists().trim(), - body('appId').exists(), - body('targetEnvironment').exists(), - body('owner').exists(), - validateRequest, - integrationController.updateIntegration + "/:integrationId", + requireAuth({ + acceptedAuthModes: [AUTH_MODE_JWT], + }), + requireIntegrationAuth({ + acceptedRoles: [ADMIN, MEMBER], + }), + param("integrationId").exists().trim(), + body("isActive").exists().isBoolean(), + body("app").exists().trim(), + body("secretPath").default("/").isString().trim(), + body("environment").exists().trim(), + body("appId").exists(), + body("targetEnvironment").exists(), + body("owner").exists(), + validateRequest, + integrationController.updateIntegration ); router.delete( - '/:integrationId', - requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] - }), - requireIntegrationAuth({ - acceptedRoles: [ADMIN, MEMBER] - }), - param('integrationId').exists().trim(), - validateRequest, - integrationController.deleteIntegration + "/:integrationId", + requireAuth({ + acceptedAuthModes: [AUTH_MODE_JWT], + }), + requireIntegrationAuth({ + acceptedRoles: [ADMIN, MEMBER], + }), + param("integrationId").exists().trim(), + validateRequest, + integrationController.deleteIntegration ); export default router; diff --git a/backend/src/services/BotService.ts b/backend/src/services/BotService.ts index 7081a64cb..0e3768a9c 100644 --- a/backend/src/services/BotService.ts +++ b/backend/src/services/BotService.ts @@ -1,110 +1,112 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - getSecretsBotHelper, - encryptSymmetricHelper, - decryptSymmetricHelper, - getKey, - getIsWorkspaceE2EEHelper -} from '../helpers/bot'; + getSecretsBotHelper, + encryptSymmetricHelper, + decryptSymmetricHelper, + getKey, + getIsWorkspaceE2EEHelper, +} from "../helpers/bot"; /** * Class to handle bot actions */ class BotService { - - /** - * Return whether or not workspace with id [workspaceId] is end-to-end encrypted - * @param workspaceId - id of workspace - * @returns {Boolean} - */ - static async getIsWorkspaceE2EE(workspaceId: Types.ObjectId) { - return await getIsWorkspaceE2EEHelper(workspaceId); - } + /** + * Return whether or not workspace with id [workspaceId] is end-to-end encrypted + * @param workspaceId - id of workspace + * @returns {Boolean} + */ + static async getIsWorkspaceE2EE(workspaceId: Types.ObjectId) { + return await getIsWorkspaceE2EEHelper(workspaceId); + } - /** - * Get workspace key for workspace with id [workspaceId] shared to bot. - * @param {Object} obj - * @param {Types.ObjectId} obj.workspaceId - id of workspace to get workspace key for - * @returns - */ - static async getWorkspaceKeyWithBot({ - workspaceId - }: { - workspaceId: Types.ObjectId; - }) { - return await getKey({ - workspaceId - }); - } - - /** - * Return decrypted secrets for workspace with id [workspaceId] and - * environment [environmen] shared to bot. - * @param {Object} obj - * @param {String} obj.workspaceId - id of workspace of secrets - * @param {String} obj.environment - environment for secrets - * @returns {Object} secretObj - object where keys are secret keys and values are secret values - */ - static async getSecrets({ - workspaceId, - environment - }: { - workspaceId: Types.ObjectId; - environment: string; - }) { - return await getSecretsBotHelper({ - workspaceId, - environment - }); - } - - /** - * Return symmetrically encrypted [plaintext] using the - * bot's copy of the workspace key for workspace with id [workspaceId] - * @param {Object} obj - * @param {String} obj.workspaceId - id of workspace - * @param {String} obj.plaintext - plaintext to encrypt - */ - static async encryptSymmetric({ - workspaceId, - plaintext - }: { - workspaceId: Types.ObjectId; - plaintext: string; - }) { - return await encryptSymmetricHelper({ - workspaceId, - plaintext - }); - } - - /** - * Return symmetrically decrypted [ciphertext] using the - * bot's copy of the workspace key for workspace with id [workspaceId] - * @param {Object} obj - * @param {String} obj.workspaceId - id of workspace - * @param {String} obj.ciphertext - ciphertext to decrypt - * @param {String} obj.iv - iv - * @param {String} obj.tag - tag - */ - static async decryptSymmetric({ - workspaceId, - ciphertext, - iv, - tag - }: { - workspaceId: Types.ObjectId; - ciphertext: string; - iv: string; - tag: string; - }) { - return await decryptSymmetricHelper({ - workspaceId, - ciphertext, - iv, - tag - }); - } + /** + * Get workspace key for workspace with id [workspaceId] shared to bot. + * @param {Object} obj + * @param {Types.ObjectId} obj.workspaceId - id of workspace to get workspace key for + * @returns + */ + static async getWorkspaceKeyWithBot({ + workspaceId, + }: { + workspaceId: Types.ObjectId; + }) { + return await getKey({ + workspaceId, + }); + } + + /** + * Return decrypted secrets for workspace with id [workspaceId] and + * environment [environmen] shared to bot. + * @param {Object} obj + * @param {String} obj.workspaceId - id of workspace of secrets + * @param {String} obj.environment - environment for secrets + * @returns {Object} secretObj - object where keys are secret keys and values are secret values + */ + static async getSecrets({ + workspaceId, + environment, + secretPath, + }: { + workspaceId: Types.ObjectId; + environment: string; + secretPath: string; + }) { + return await getSecretsBotHelper({ + workspaceId, + environment, + secretPath, + }); + } + + /** + * Return symmetrically encrypted [plaintext] using the + * bot's copy of the workspace key for workspace with id [workspaceId] + * @param {Object} obj + * @param {String} obj.workspaceId - id of workspace + * @param {String} obj.plaintext - plaintext to encrypt + */ + static async encryptSymmetric({ + workspaceId, + plaintext, + }: { + workspaceId: Types.ObjectId; + plaintext: string; + }) { + return await encryptSymmetricHelper({ + workspaceId, + plaintext, + }); + } + + /** + * Return symmetrically decrypted [ciphertext] using the + * bot's copy of the workspace key for workspace with id [workspaceId] + * @param {Object} obj + * @param {String} obj.workspaceId - id of workspace + * @param {String} obj.ciphertext - ciphertext to decrypt + * @param {String} obj.iv - iv + * @param {String} obj.tag - tag + */ + static async decryptSymmetric({ + workspaceId, + ciphertext, + iv, + tag, + }: { + workspaceId: Types.ObjectId; + ciphertext: string; + iv: string; + tag: string; + }) { + return await decryptSymmetricHelper({ + workspaceId, + ciphertext, + iv, + tag, + }); + } } -export default BotService; \ No newline at end of file +export default BotService; diff --git a/backend/src/utils/setup/backfillData.ts b/backend/src/utils/setup/backfillData.ts index 4bb163aae..af05cfab7 100644 --- a/backend/src/utils/setup/backfillData.ts +++ b/backend/src/utils/setup/backfillData.ts @@ -13,6 +13,7 @@ import { BackupPrivateKey, IntegrationAuth, ServiceTokenData, + Integration, } from "../../models"; import { generateKeyPair } from "../../utils/crypto"; import { client, getEncryptionKey, getRootEncryptionKey } from "../../config"; @@ -424,3 +425,19 @@ export const backfillServiceToken = async () => { ); console.log("Migration: Service token migration v1 complete"); }; + +export const backfillIntegration = async () => { + await Integration.updateMany( + { + secretPath: { + $exists: false, + }, + }, + { + $set: { + secretPath: "/", + }, + } + ); + console.log("Migration: Integration migration v1 complete"); +}; diff --git a/backend/src/utils/setup/index.ts b/backend/src/utils/setup/index.ts index bec142e9e..d7f333b17 100644 --- a/backend/src/utils/setup/index.ts +++ b/backend/src/utils/setup/index.ts @@ -13,6 +13,7 @@ import { backfillEncryptionMetadata, backfillSecretFolders, backfillServiceToken, + backfillIntegration, } from "./backfillData"; import { reencryptBotPrivateKeys, @@ -77,6 +78,7 @@ export const setup = async () => { await backfillEncryptionMetadata(); await backfillSecretFolders(); await backfillServiceToken(); + await backfillIntegration(); // re-encrypt any data previously encrypted under server hex 128-bit ENCRYPTION_KEY // to base64 256-bit ROOT_ENCRYPTION_KEY From a743c12c1bf6eac3311502e9bd9ab791a5ea99ce Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Thu, 15 Jun 2023 22:46:15 +0530 Subject: [PATCH 37/55] feat(folder-scoped-integrations): implemented ui for folders in integration page --- .../components/integrations/Integration.tsx | 68 ++++++---- .../integrations/IntegrationSection.tsx | 1 + .../api/integrations/createIntegration.ts | 55 ++++---- frontend/src/pages/integrations/[id].tsx | 1 + .../aws-parameter-store/create.tsx | 15 ++- .../aws-secret-manager/create.tsx | 11 +- .../integrations/azure-key-vault/create.tsx | 11 +- .../src/pages/integrations/checkly/create.tsx | 31 ++++- .../pages/integrations/circleci/create.tsx | 22 ++- .../src/pages/integrations/flyio/create.tsx | 22 ++- .../src/pages/integrations/github/create.tsx | 21 ++- .../src/pages/integrations/gitlab/create.tsx | 35 +++-- .../integrations/hashicorp-vault/create.tsx | 127 ++++++++++-------- .../src/pages/integrations/heroku/create.tsx | 21 ++- .../src/pages/integrations/netlify/create.tsx | 22 ++- .../src/pages/integrations/railway/create.tsx | 21 ++- .../src/pages/integrations/render/create.tsx | 22 ++- .../pages/integrations/supabase/create.tsx | 21 ++- .../pages/integrations/travisci/create.tsx | 22 ++- .../src/pages/integrations/vercel/create.tsx | 21 ++- 20 files changed, 417 insertions(+), 153 deletions(-) diff --git a/frontend/src/components/integrations/Integration.tsx b/frontend/src/components/integrations/Integration.tsx index 6a657c1a0..7bfd0d0c0 100644 --- a/frontend/src/components/integrations/Integration.tsx +++ b/frontend/src/components/integrations/Integration.tsx @@ -4,7 +4,11 @@ import { useRouter } from 'next/router'; import { faArrowRight, faCheck, faXmark } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; // TODO: This needs to be moved from public folder -import { contextNetlifyMapping, integrationSlugNameMapping, reverseContextNetlifyMapping } from 'public/data/frequentConstants'; +import { + contextNetlifyMapping, + integrationSlugNameMapping, + reverseContextNetlifyMapping +} from 'public/data/frequentConstants'; import Button from '@app/components/basic/buttons/Button'; import ListBox from '@app/components/basic/Listbox'; @@ -27,6 +31,7 @@ interface Integration { targetEnvironment: string; workspace: string; integrationAuth: string; + secretPath: string; } interface IntegrationApp { @@ -55,7 +60,6 @@ const IntegrationTile = ({ environments = [], handleDeleteIntegration }: Props) => { - const [integrationEnvironment, setIntegrationEnvironment] = useState( environments.find(({ slug }) => slug === integration?.environment) || { name: '', @@ -74,16 +78,16 @@ const IntegrationTile = ({ }); setApps(tempApps); - + if (integration?.app) { setIntegrationApp(integration.app); } else if (integration?.path && integration?.region) { setIntegrationApp(`${integration.path} (${integration.region})`); } else if (tempApps.length > 0) { - setIntegrationApp(tempApps[0].name) - } else { - setIntegrationApp(''); - } + setIntegrationApp(tempApps[0].name); + } else { + setIntegrationApp(''); + } switch (integration.integration) { case 'vercel': @@ -212,12 +216,15 @@ const IntegrationTile = ({ return
; }; - if (!integrationApp && integration.integration !== "checkly") return
; - - const isSelected = integration.integration === 'hashicorp-vault' ? `${integration.app} - path: ${integration.path}` : integrationApp; + if (!integrationApp && integration.integration !== 'checkly') return
; + + const isSelected = + integration.integration === 'hashicorp-vault' + ? `${integration.app} - path: ${integration.path}` + : integrationApp; return ( -
+

ENVIRONMENT

@@ -235,33 +242,46 @@ const IntegrationTile = ({ isFull />
+
+

SECRET PATH

+
+ {/* {integration.integration.charAt(0).toUpperCase() + integration.integration.slice(1)} */} + {integration.secretPath} +
+
-

INTEGRATION

-
+

INTEGRATION

+
{/* {integration.integration.charAt(0).toUpperCase() + integration.integration.slice(1)} */} {integrationSlugNameMapping[integration.integration]}
APP
- {integrationApp ?
- app.name) : null} - isSelected={isSelected} - onChange={(app) => { - setIntegrationApp(app); - }} - /> -
:
-
} + {integrationApp ? ( +
+ app.name) : null} + isSelected={isSelected} + onChange={(app) => { + setIntegrationApp(app); + }} + /> +
+ ) : ( +
+ - +
+ )}
{renderIntegrationSpecificParams(integration)}
-
+
{integration.isActive ? ( -
+
In Sync
diff --git a/frontend/src/components/integrations/IntegrationSection.tsx b/frontend/src/components/integrations/IntegrationSection.tsx index 9b8799b6a..cf1d7e9c4 100644 --- a/frontend/src/components/integrations/IntegrationSection.tsx +++ b/frontend/src/components/integrations/IntegrationSection.tsx @@ -23,6 +23,7 @@ interface Integration { targetEnvironment: string; workspace: string; integrationAuth: string; + secretPath: string; } const ProjectIntegrationSection = ({ diff --git a/frontend/src/pages/api/integrations/createIntegration.ts b/frontend/src/pages/api/integrations/createIntegration.ts index e3e7c010a..331adff51 100644 --- a/frontend/src/pages/api/integrations/createIntegration.ts +++ b/frontend/src/pages/api/integrations/createIntegration.ts @@ -3,6 +3,7 @@ import SecurityClient from '@app/components/utilities/SecurityClient'; interface Props { integrationAuthId: string; isActive: boolean; + secretPath: string; app: string | null; appId: string | null; sourceEnvironment: string; @@ -20,19 +21,20 @@ interface Props { * @param {String} obj.accessToken - id of integration authorization for which to create the integration * @returns */ -const createIntegration = ({ - integrationAuthId, - isActive, - app, - appId, - sourceEnvironment, - targetEnvironment, - targetEnvironmentId, - targetService, - targetServiceId, - owner, - path, - region +const createIntegration = ({ + integrationAuthId, + isActive, + app, + appId, + sourceEnvironment, + targetEnvironment, + targetEnvironmentId, + targetService, + targetServiceId, + owner, + path, + region, + secretPath }: Props) => SecurityClient.fetchCall('/api/v1/integration', { method: 'POST', @@ -40,18 +42,19 @@ const createIntegration = ({ 'Content-Type': 'application/json' }, body: JSON.stringify({ - integrationAuthId, - isActive, - app, - appId, - sourceEnvironment, - targetEnvironment, - targetEnvironmentId, - targetService, - targetServiceId, - owner, - path, - region + integrationAuthId, + isActive, + app, + appId, + sourceEnvironment, + targetEnvironment, + targetEnvironmentId, + targetService, + targetServiceId, + owner, + path, + region, + secretPath }) }).then(async (res) => { if (res && res.status === 200) { @@ -61,4 +64,4 @@ const createIntegration = ({ return undefined; }); -export default createIntegration; \ No newline at end of file +export default createIntegration; diff --git a/frontend/src/pages/integrations/[id].tsx b/frontend/src/pages/integrations/[id].tsx index 435c904f5..1f7050c42 100644 --- a/frontend/src/pages/integrations/[id].tsx +++ b/frontend/src/pages/integrations/[id].tsx @@ -44,6 +44,7 @@ interface Integration { integration: string; targetEnvironment: string; workspace: string; + secretPath:string; integrationAuth: string; } diff --git a/frontend/src/pages/integrations/aws-parameter-store/create.tsx b/frontend/src/pages/integrations/aws-parameter-store/create.tsx index d06ac0061..4f84ff476 100644 --- a/frontend/src/pages/integrations/aws-parameter-store/create.tsx +++ b/frontend/src/pages/integrations/aws-parameter-store/create.tsx @@ -56,6 +56,7 @@ export default function AWSParameterStoreCreateIntegrationPage() { const { data: integrationAuth } = useGetIntegrationAuthById((integrationAuthId as string) ?? ''); const [selectedSourceEnvironment, setSelectedSourceEnvironment] = useState(''); + const [secretPath, setSecretPath] = useState('/'); const [selectedAWSRegion, setSelectedAWSRegion] = useState(''); const [path, setPath] = useState(''); const [pathErrorText, setPathErrorText] = useState(''); @@ -69,9 +70,9 @@ export default function AWSParameterStoreCreateIntegrationPage() { } }, [workspace]); - const isValidAWSParameterStorePath = (secretPath: string) => { + const isValidAWSParameterStorePath = (awsStorePath: string) => { const pattern = /^\/([\w-]+\/)*[\w-]+\/$/; - return pattern.test(secretPath) && secretPath.length <= 2048; + return pattern.test(awsStorePath) && awsStorePath.length <= 2048; }; const handleButtonClick = async () => { @@ -101,7 +102,8 @@ export default function AWSParameterStoreCreateIntegrationPage() { targetServiceId: null, owner: null, path, - region: selectedAWSRegion + region: selectedAWSRegion, + secretPath }); setIsLoading(false); @@ -133,6 +135,13 @@ export default function AWSParameterStoreCreateIntegrationPage() { ))} + + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + - - Checkly Integration + + + Checkly Integration + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setTargetEnvironment(e.target.value)} + + setTargetEnvironment(e.target.value)} /> diff --git a/frontend/src/pages/integrations/heroku/create.tsx b/frontend/src/pages/integrations/heroku/create.tsx index 53f9b3666..639f774d7 100644 --- a/frontend/src/pages/integrations/heroku/create.tsx +++ b/frontend/src/pages/integrations/heroku/create.tsx @@ -2,7 +2,15 @@ import { useEffect, useState } from 'react'; import { useRouter } from 'next/router'; import queryString from 'query-string'; -import { Button, Card, CardTitle, FormControl, Select, SelectItem } from '../../../components/v2'; +import { + Button, + Card, + CardTitle, + FormControl, + Input, + Select, + SelectItem +} from '../../../components/v2'; import { useGetIntegrationAuthApps, useGetIntegrationAuthById @@ -23,6 +31,7 @@ export default function HerokuCreateIntegrationPage() { const [selectedSourceEnvironment, setSelectedSourceEnvironment] = useState(''); const [targetApp, setTargetApp] = useState(''); + const [secretPath, setSecretPath] = useState('/'); const [isLoading, setIsLoading] = useState(false); @@ -60,7 +69,8 @@ export default function HerokuCreateIntegrationPage() { targetServiceId: null, owner: null, path: null, - region: null + region: null, + secretPath }); setIsLoading(false); @@ -94,6 +104,13 @@ export default function HerokuCreateIntegrationPage() { ))} + + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + + + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + + + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + + + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + setSecretPath(evt.target.value)} + placeholder="Provide a path, default is /" + /> + @@ -100,18 +101,18 @@ export default function CloudflarePagesIntegrationPage() { isDisabled={integrationAuthApps.length === 0} > {integrationAuthApps.length > 0 ? ( - integrationAuthApps.map((integrationAuthApp) => { - - {integrationAuthApp.name} - - }) - ) : ( - - No projects found + integrationAuthApps.map((integrationAuthApp) => ( + + {integrationAuthApp.name} + )) + ) : ( + + No apps found + )} From 17097965d95801ee43e0ee2366300b979d178351 Mon Sep 17 00:00:00 2001 From: Stijn-Kuijper Date: Mon, 19 Jun 2023 15:14:57 +0200 Subject: [PATCH 48/55] feat: cloudflare pages integration sync --- backend/src/integrations/sync.ts | 72 ++++++++++++++++++++++++++++++- backend/src/models/integration.ts | 5 ++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/backend/src/integrations/sync.ts b/backend/src/integrations/sync.ts index 76d009944..7d003b4f5 100644 --- a/backend/src/integrations/sync.ts +++ b/backend/src/integrations/sync.ts @@ -37,7 +37,9 @@ import { INTEGRATION_SUPABASE_API_URL, INTEGRATION_CHECKLY, INTEGRATION_CHECKLY_API_URL, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_HASHICORP_VAULT, + INTEGRATION_CLOUDFLARE_PAGES, + INTEGRATION_CLOUDFLARE_PAGES_API_URL } from "../variables"; import { standardRequest} from '../config/request'; @@ -210,6 +212,14 @@ const syncSecrets = async ({ accessToken }); break; + case INTEGRATION_CLOUDFLARE_PAGES: + await syncSecretsCloudflarePages({ + integration, + secrets, + accessId, + accessToken + }); + break; } }; @@ -1833,4 +1843,64 @@ const syncSecretsHashiCorpVault = async ({ ); }; +const syncSecretsCloudflarePages = async ({ + integration, + secrets, + accessId, + accessToken, +}: { + integration: IIntegration; + secrets: any; + accessId: string | null; + accessToken: string; +}) => { + // get secrets from cloudflare pages + const getSecretsRes = ( + await standardRequest.get( + `${INTEGRATION_CLOUDFLARE_PAGES_API_URL}/client/v4/accounts/${accessId}/pages/projects/${integration.app}`, + { + headers: { + Authorization: `Bearer ${accessToken}`, + "Accept": "application/json", + }, + } + ) + ) + .data.result['deployment_configs'].production['env_vars']; + + // copy the secrets object, so we can set deleted keys to null + const secretsObj: any = {...secrets}; + + for (const [key, val] of Object.entries(secretsObj)) { + secretsObj[key] = { value: val }; + } + + for await (const key of Object.keys(getSecretsRes)) { + if (!(key in secrets)) { + // case: secret deos not exist in infisical + // -> delete secret from cloudflare pages + secretsObj[key] = null; + } + } + + await standardRequest.patch( + `${INTEGRATION_CLOUDFLARE_PAGES_API_URL}/client/v4/accounts/${accessId}/pages/projects/${integration.app}`, + { + data: { + "deployment_configs": { + "production": { + "env_vars": secretsObj + } + } + } + }, + { + headers: { + Authorization: `Bearer ${accessToken}`, + "Accept": "application/json", + }, + } + ) +} + export { syncSecrets }; diff --git a/backend/src/models/integration.ts b/backend/src/models/integration.ts index c23cf69f1..678cdcc56 100644 --- a/backend/src/models/integration.ts +++ b/backend/src/models/integration.ts @@ -16,6 +16,7 @@ import { INTEGRATION_SUPABASE, INTEGRATION_CHECKLY, INTEGRATION_HASHICORP_VAULT, + INTEGRATION_CLOUDFLARE_PAGES } from "../variables"; export interface IIntegration { @@ -50,7 +51,8 @@ export interface IIntegration { | "travisci" | "supabase" | "checkly" - | "hashicorp-vault"; + | "hashicorp-vault" + | "cloudflare-pages"; integrationAuth: Types.ObjectId; } @@ -138,6 +140,7 @@ const integrationSchema = new Schema( INTEGRATION_SUPABASE, INTEGRATION_CHECKLY, INTEGRATION_HASHICORP_VAULT, + INTEGRATION_CLOUDFLARE_PAGES, ], required: true, }, From 59737f89c101a133f2629adddb7fd67d1493b27c Mon Sep 17 00:00:00 2001 From: Stijn-Kuijper Date: Mon, 19 Jun 2023 15:44:41 +0200 Subject: [PATCH 49/55] fix: cloudlfare pages sync request fix --- backend/src/integrations/sync.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/src/integrations/sync.ts b/backend/src/integrations/sync.ts index 7d003b4f5..81b445308 100644 --- a/backend/src/integrations/sync.ts +++ b/backend/src/integrations/sync.ts @@ -1883,14 +1883,14 @@ const syncSecretsCloudflarePages = async ({ } } - await standardRequest.patch( + console.log(secretsObj); // -> { test: { value: 'test' }, aaa: null, test_cf: null } + + const result = await standardRequest.patch( `${INTEGRATION_CLOUDFLARE_PAGES_API_URL}/client/v4/accounts/${accessId}/pages/projects/${integration.app}`, { - data: { - "deployment_configs": { - "production": { - "env_vars": secretsObj - } + "deployment_configs": { + "production": { + "env_vars": secretsObj } } }, @@ -1901,6 +1901,8 @@ const syncSecretsCloudflarePages = async ({ }, } ) + + console.log(result); } export { syncSecrets }; From 1760b319d36ab4db79c525e387f1f95d27b018a3 Mon Sep 17 00:00:00 2001 From: Stijn-Kuijper Date: Mon, 19 Jun 2023 16:00:53 +0200 Subject: [PATCH 50/55] cleanup --- backend/src/integrations/sync.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/backend/src/integrations/sync.ts b/backend/src/integrations/sync.ts index 81b445308..6dfe04930 100644 --- a/backend/src/integrations/sync.ts +++ b/backend/src/integrations/sync.ts @@ -1872,19 +1872,19 @@ const syncSecretsCloudflarePages = async ({ const secretsObj: any = {...secrets}; for (const [key, val] of Object.entries(secretsObj)) { - secretsObj[key] = { value: val }; + secretsObj[key] = { type: "secret_text", value: val }; } - for await (const key of Object.keys(getSecretsRes)) { - if (!(key in secrets)) { - // case: secret deos not exist in infisical - // -> delete secret from cloudflare pages - secretsObj[key] = null; + if (getSecretsRes) { // if there are no env vars set in cloudflare pages, none have to be deleted either + for await (const key of Object.keys(getSecretsRes)) { + if (!(key in secrets)) { + // case: secret deos not exist in infisical + // -> delete secret from cloudflare pages + secretsObj[key] = null; + } } } - console.log(secretsObj); // -> { test: { value: 'test' }, aaa: null, test_cf: null } - const result = await standardRequest.patch( `${INTEGRATION_CLOUDFLARE_PAGES_API_URL}/client/v4/accounts/${accessId}/pages/projects/${integration.app}`, { @@ -1901,8 +1901,6 @@ const syncSecretsCloudflarePages = async ({ }, } ) - - console.log(result); } export { syncSecrets }; From 381e40f9a333dad44624ff809e6c298c0588a27e Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Mon, 19 Jun 2023 22:38:38 +0530 Subject: [PATCH 51/55] doc(folders): updated docs about folders --- docs/documentation/platform/folder.mdx | 46 +++++++++++++++++++ docs/documentation/platform/pit-recovery.mdx | 6 +++ docs/documentation/platform/token.mdx | 2 +- docs/images/dashboard-add-folder.png | Bin 0 -> 287480 bytes docs/images/dashboard-folder-overview.png | Bin 0 -> 363071 bytes docs/images/dashboard-folders.png | Bin 0 -> 344750 bytes docs/images/integration-folders.png | Bin 0 -> 222509 bytes docs/images/project-folder-token.png | Bin 0 -> 316225 bytes docs/images/project-token-add.png | Bin 306998 -> 278711 bytes docs/images/project-token-added.png | Bin 348086 -> 344526 bytes docs/mint.json | 18 ++------ 11 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 docs/documentation/platform/folder.mdx create mode 100644 docs/images/dashboard-add-folder.png create mode 100644 docs/images/dashboard-folder-overview.png create mode 100644 docs/images/dashboard-folders.png create mode 100644 docs/images/integration-folders.png create mode 100644 docs/images/project-folder-token.png diff --git a/docs/documentation/platform/folder.mdx b/docs/documentation/platform/folder.mdx new file mode 100644 index 000000000..716cb4e46 --- /dev/null +++ b/docs/documentation/platform/folder.mdx @@ -0,0 +1,46 @@ +--- +title: "Folder" +description: "How Infisical structures secrets into folders" +--- + +Folders can be used to group secrets into multiple levels, which can help organize secrets in monorepos or microservice-based architectures. For example, you could create a folder for each environment, such as production, staging, and development. + +Within each environment folder, you could create subfolders for different types of secrets, such as database credentials, API keys, and SSH keys. This can help to keep your secrets organized and easy to find. + +## Dashboard + +![dashboard with folders](../../images/dashboard-folders.png) + +Only alphabets, numbers, and dashes are allowed in folder names. You can create a folder for each environment from the dashboard. + +![dashboard add folders](../../images/dashboard-add-folder.png) + +To create a nested folder or access the secrets of a folder, click on an existing folder to open it. You will then be able to modify the secrets of that folder and create new folders inside it. + +## Dashboard Secret Overview + +The overview screen provides a comprehensive view of all your secrets and folders, organized by environment. + +![dashboard secret overview with folders](../../images/dashboard-folder-overview.png) + +When you click on a folder, the overview will be updated to show only the secrets and folders in that folder. This makes it easy to find the information you need, no matter how deeply nested it is. + +## Integrations + +You can easily scope injected secrets to a folder during integrations by providing the secret path option. + +![integrations scoped with folders](../../images/integration-folders.png) + +For more information on integrations, [refer infisical integration](/integrations/overview) + +## Service Tokens + +You can scope the secrets that can be read and written using an Infisical token by providing the secret path option when creating the token. + +![folder scoped service token](../../images/project-folder-token.png) + +For more information, [refer infisical token section.](./token) + +## Point-In-Time Recovery + +For more information on how PIT recovery works on folders, [please refer to this section.](./pit-recovery) diff --git a/docs/documentation/platform/pit-recovery.mdx b/docs/documentation/platform/pit-recovery.mdx index eeba72d60..f741de8bb 100644 --- a/docs/documentation/platform/pit-recovery.mdx +++ b/docs/documentation/platform/pit-recovery.mdx @@ -22,3 +22,9 @@ Environment variables can be rolled back to any point in time via the "Rollback Rolling back environment variables to a past snapshot creates a new commit and snapshot at the top of the stack and updates secret versions. + +## Folders + +Any folder operation, such as creating, updating, or deleting a folder, will create a new commit. + +When you roll back the contents of a folder, the folder will be restored to its latest snapshot. The nested folders will also be restored to their respective latest versions. diff --git a/docs/documentation/platform/token.mdx b/docs/documentation/platform/token.mdx index caeb1641d..1fecb2fef 100644 --- a/docs/documentation/platform/token.mdx +++ b/docs/documentation/platform/token.mdx @@ -10,7 +10,7 @@ An Infisical Token is useful for: It's also useful for CI/CD environments and integrations such as [Docker](/integrations/platforms/docker) and [Docker Compose](/integrations/platforms/docker-compose). -To generate the the token, head over to your project settings as shown below. +To generate the the token, head over to your project settings as shown below. On creating a service token you can scope it to a path to limit the access. ![token add](../../images/project-token-add.png) diff --git a/docs/images/dashboard-add-folder.png b/docs/images/dashboard-add-folder.png new file mode 100644 index 0000000000000000000000000000000000000000..6040dcc3ff8726988a56f51c02e2939f29b743ec GIT binary patch literal 287480 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

5!pb=ciS3{y< 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℞ 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 apeBaom-(VE4!;0@dUp(Om*0H!{Qm>+r`+5C literal 0 HcmV?d00001 diff --git a/docs/images/dashboard-folder-overview.png b/docs/images/dashboard-folder-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..265f732feade1e360461b56aad4ff0401c4037b7 GIT binary patch literal 363071 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

+^A>)q@~vryIJoTH9@gYi)UkT@bO{ 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

iQTPV-fbL7{G#$mC27D9#?<+7N!3zeZ4M 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

Q0NldCZ0d%*5IaruBBroqosC_v!`UaF4 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 literal 0 HcmV?d00001 diff --git a/docs/images/project-folder-token.png b/docs/images/project-folder-token.png new file mode 100644 index 0000000000000000000000000000000000000000..4fda56d275b24e30b2de719aa8dae9f11ca886b9 GIT binary patch literal 316225 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

pFcy2gd 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

M| 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 literal 0 HcmV?d00001 diff --git a/docs/images/project-token-add.png b/docs/images/project-token-add.png index cd17b3027c7701a41f66ca66b1a5ebece9b4fc0c..f282399e6d0a9d57f6c07461fc78fec903f29f01 100644 GIT binary patch literal 278711 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%0A@~>=3k8rrf2Uo;*V5&8-};+ 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 literal 306998 zcmeFZcU)85wl+#tK?DR*0V#@rQWd3lkS4u^UZhL!B~%d*rAzOi)FeO<2%VrHz4zXG zFQJ!k7w<0T{q1x1`FOwo?!6m+Nmk~XbIrBpm~)J0JY&p!QBsh)gHM5vfq`*HM*58k z1_u5q2F4AeTQ`7`Sl#I8rFM^oUV6yGhkt%=JxUQ~A_HilL->piodZ5Sr_PrvVA&}duh3fwt* zM2tcB4BPu%`_kvY(4r#Z4=ttWYOjjh8F=39W>1FdrZ3^&>leT9Vu%>tVsvOskqc0y zT^E#k7KQNvD!S3s{yN5A#}_z^@*EVxtEA*zZ!{lZ2z=?hpN%0> zEV5B*t$n~l9h1ODb)PNnn+CQ!(T602T9}2H?Y-^KTsTyt zmZcVE=j1R;Dmm#zO6#UPu zlSFYMF`mz03AJFoo(XyXlK3OR&l{B_`r#(uADhL!(Dw%!E|n?}L42?lYGcESLCx6Q+^pC+^3fK<{`Fl9qyErNqq`Vw{usKp%hD2~ zs$BcOaj`#(;N@YmE+oGrVEJ&z9;53gl{>aDF^-t%)6du;m^ZUN%F$xAiwJ3A2aDj1 z5S01j7d_ax$vN|a=Z3ZjKMxU`pViEb3T$dj@`o7gziu64G|}Fw7d82eWg&Va^0~UO(mj8%4Etw0r~o|$aMv%|lX=~;{nXtsJi}i^;DZweFY^fBj~P0!Yfi1WQ9fBj(n zFH;{1MTRqydsA0*R)qF%o$`MQ?QPUFo_N6`$HIVHLZBM(yy4OB*M@9HTkmeXpefR1 zA+rj1`E|o+zQ|%^apca(iy+T%uwziu(!!G7GHB3aKym;yxSS^iTh7yf zrmM#*E33U?3P}>3d?P4XD|_+%Tkfx(8H@bk_dOMmU1e3Nex2xCt^CnEuoNofzI?kP zvz}FmddLu|O=(%|A=akpm}e=wWnG_gzr*nC%DweR{ouUY>)NZI*4c(9;o}AT&|LU~ z4904($m09*Q4I5tjClG;Fo0wP`$*KU7MNKyE2T^g(9$Z~J39P2 zr~)^gqptc6$5i?R5a)W@oz_o=(Kf1f{pPZWJ3m;9Y<_qPj+?liZ?KkBoB5VI6}K1h zzdLHt9~5dq{zP`73;biTo4@tVmeGy&PCLXJ!{(EDhn(D<4m&Eh-#8>Kmv%uKR+CFY zN?Iy^fkzsD)AyRjw+mKL2!&>~VVVSAOzWGDczQr$5bGU&1V%Nj zwdmr<<=Mm8lUcpHF`w!0y4f#kh>fR!CxPeoAd$UI%h~kD;aq5AZu~P=Lw4S@&oZGh z`LgG2gr*ulq@p!ts-q-%{Ro1)F ze2@9qt`DpKFvnYtNFJ_0)BU;ieaCNe2D7w#dH8*}samI6yjrzlR)$}d$_8v!53}jM zzv~r!`BeX@ZEW6SY?bl>u~Yw2_VHKM9B2K-E2hm(YK}O(la=a~>rOXO=O`boaQ!Z= zsjqekbqsZOxWzb;A%4n*E zJugw%y*I0TzFn$#DxJM+{be`!(Nas^UEaJv*2X5)b~4AKLSI|h>)C8iSOYRhhtitj zkW+FRGnIt?BjBZfHYU;o>a9T3{e(xk9jN~rd6)G zpw3yRb>eMHYz?YkT`Fu(=2ahU(@#WCE>F>TMDEUXHf#hLN2m)o39$KmKhN5LZ1qE@ zS$wTxc-s|@P7Ym!L);JZ()%y>+;+DOZsMm$r^nx+AQ&R#B|s3J5ly@Q*lGMJJKO$4 zL&7)j{KqvUgyDdgUNU)%6LfdDUD@z(tl zCkuQ2lt z5)5qM2ow0nz@)&y{o@z|Fyxf~JXXPc_V+qi7#Kko7&w2gqYZps{Y3&Vp!MHBv7uJ) zai9L`g(;)*bO!?iYt%wb(^*qqj?dW6hRx8#&d8L_-NydvIv4`(e88cNsk0%iyN$K2 z6Q8@_lRs+k0moOx>`!R_sN!rT_(W4)iB{as(Ug{p?FHM5CqnqNw6p?_CT4spZzTWT z9QY>qZTPM1|UF09v zd1LBi>}X-{Y++|hdv#qyBRdyo!6#3yI{N3|-|o}Y-QvG`vUU3VV*wAyeszZZCEE-3 z|EZa?h1tJpc6H`&&Hi|@`b=3{rtC6|8=K- zYYK8QbriR=0a`i>{g<%*-uTZa|Fz*CeQNzzpD(#yz5a8be>(N2rdJQar()`4XYFz| zh#*@FXCV#&_W!B)Ut4MYS2LlPuYtb)X!PgOe{G@pKeqUD>A$v6bhH2l!tm9rFR&s6QP;kWWeM6!Z4iL=}!vW})?ZqYxj zbh=@lFqt~JUsQdPw*19&sUz`~xe)13VIOcbzn8^q&=a4R!ect`$nW5a?+n`@f6*U(S+iX1KlyK<{JU zBz!^k1Wh$w;gBg*<}lB2;WU>ev-F4$sQ;l3&xA=c%cQ1G@Lsq7U$F)=o>-eIy_}I;4ZMYpMAhK?tWOgC{pmTF-iA{PGH4X) zI*iVH>ur4%#iow)Izg>EHP!6KJd>`0yEf?F%)IAQM;cibP1<#L$cU_D`jLGa0nx zoQ?sdHsjj(0YS1ka*4V*or!0)0=omgox67%^rM=oYY$-9p`?mJ7X~M`T}MrZRo))J z4Q~EIP!8rP>*dHJPx|$T&YBtUK2d@$y`ZD?z}wMPOMxFDXwr4`5V-rgRQ&@Ow=X4)RtE0%OZ|5WxqUf;)@-Q8UhQc}A3%*=y~ z>8{jjlV9}`d*gd#r7o2@B>A9VkYV4*h-Rh7W>N~T zljPy%I6JfY`Q!A?bAidjc=a2N!DO*6FpUwmI$hNER7u2U<@ifYge6(x*`@}`{kYEg z&3G0qCL%!&>2y+JVp=J}tsi%A3~HQZnA8hr9SR17R&CB?HkW1J*V+;}$2x4++VB^k zYLD7a4=Am>Uw*#k+=_I?N`oFlmEibm(6ZU-5AaEa0gAhK5fh($@y^B|FF#>mA)gX2 z$R^9T>C48lJfEzdWUuuQd!@btjn4Kuo7Cm? z*hpx$iuNpahD7aUxUwUfy}&3BT?Q5wxpdVZVz?I5g#|U|eW<;~4Lg&iWrLQjNlyX& z_SP7@fPjFfObhE?@s@+ou}@xuH7UG~Jc^1aW4m$1B;gm_*AzDKjwPnsV*|RG_2&~- z-bG)c84`nBtq32vqqrS)mJ=WJhyrlROXTPFMPPNk_-dC=u2tK+XGOhpJ z>UeQ_Ffc-G#e+xSy)}x%e8Q*qod$~Ev8Ao6n^LW6!LmVu;dL<%{6W#}1qRL; ztD{KCgyG71c0&Vx)+S<+pBgw=UZ$B}M$NY-Doxs(5FAD$A+3bH+S{ZQNfJ$=)R2No z$+lQlW5L*bpV|6AlZLTaj>E8CNO2tiz}rK#X~F9`E>VmT%h1Nwu@?_o1>M~C@`%aF z=x-8HMHx4Tw+9QOUo2A#ddRWq*Sx3J;paz>S_sO;Bg;1#^{A7QuZ!^9Q$JKkZvPaG zcxwbZ_V9Q{b_lYPPkKFSn1p`@_3Xd090sI2$r*NG6oZSyrm}rccaj7>UA1cL(*)2X z876hpL8pg9NAcWtQzr1)t$N)`$2F_zZ{$5H8nnJ>ud>@s&CTs}*fjBbWH6bFPxAEN zZN(E0R|$eDi4Hf`Rq#&tS6}s&Xb1;^S6ya+!G|v|3H^)a{06A2lCS;>yY2f z!K!mLoF2P-7vjx4bmg-2snI@@*HFxDWClT>r7I*p!^OY1)EL|bqmyb!SPctIwevurTgd%-V(`Lj z(9;($dLEWtsLl4K^1E3GCl<>T>Q+8+aB%ou$gWov^V(X;;G@644P4cKc6OFS{?$rv zb^5szB~w$?WI{x`y*YY(Z`ySBdn0waEh?@+1!5_0;i4hi8pjGt;d9X*a4Cm@$9-($ zv5zFK=}}Y&VnLyW2ncN<{z48&)k^BkKp)aJ(34Rih4wCDJ!_EF+i`NDGWv3S0Tj;0 z$2Z29&i_35&?H8gAZo60Vt{PtB*RWx`mYkhn&rWJLwqb)%W6pDQj#co!8Axke6 zzOnc2=;nf7;n5d-LKtz8ld9;9kGF@+lmOUdCvusdgQE=`+~A<8$wkg@Ryr}fNFC&` z?uUQ0HCC&0pIx6RI!7)Rwal)mn0%4{?OR`_l-p`QEGULqW9U)2Ym8s1V_#d4VbxQNXN@r4BK@29WuqN{y}v2!$vMqvU2_T7VTg z5w26L=W%jbN{|T#27(YXGE5UzcxO;fK|SOA^t(bZHOP}!Ldj_xQiAR)k zsL%E08d3KM_w-jY*725w=lv6aifoK$ld$v!E5^nZjJIbrr$te6+l~}MZt%NUvtORs zr!?dLWV(008?^07Z~}$a6A`(~O;0D=)va?az_!Q>K*y;Z2dds%I@>k58fT#SE_u*p z>Pv5^jnXLCR+5Ks5UcN(Xlr{3jJT}Yb@rn-?fB&Rz(b8`RbHnhxv*>%m#~e|hA5kq zk+8fT1hQ_d9@3msHLyt6Ir07>bfR|G_ft50^CP zBWs&3&mU>+?=OD-jFGs7ZH;evnrs*ur}s7wVjbTG1r=z6rhK;rwTj)p-eXxox?6~? zJ5Xc7MD|D`hsbP=>z1fEvwUi+%J?h1c(tos*B|SYStA6uE$q=B1B)H{8Ng?qFZ;fO zUyVZwv=K4SqlLbrBLplxed-x$WRiypth*tr{|wg0jVCoogHgGV}b|9tW1iF6&(JPDp_lHf=bq(fkqZbaEHYRUHOJ(lqdVkTLbk zb5lq`>;%!BPNPph;O|9ONf{N}3RA01k71b$JF|3b>v?`i?Zzd~?XCQD)V^JhZyLBS z#hhio%X8jjkp>nj4))%chNwWIz}C(_=c|n5!oPNXsY9Kba-nLI)yw{l+qG`8jrfc7 zvT-`y-5-$e1Nhm3;bdy%PAB~pC!u7{WthT?&CH8%184wPTRPFXz zTq7GTbtut?cyE${dq((+7cHM_J0goYSOs zU|{u5ljyG1pwBChYS)9L3g*x67d{fuRfBtbdz)4XP^%j=8(Fk_%iZiKWI8jEFoy{G zbRAA$+~A)RCX(|};%ybXP7>FVTr3Fm7M+_NvQM0a`uOtY%f16Y>SEiA8_TLPeCn7D z=4n1+X+C=n%48CoV@If^_Wnz9mbEk}?#-L+LGx3wo?BZc+TOgy9hd zx!>>nPY)K7;X>t;%xoSii`(j7cW#eG$gJ7`+>vqS#90RQHw7#j-k-(d-?7Cph*H zFP8><(NoYM!%jb6eqXEY98;KUSHsc|{JX+u>A45n^iD7Qx*)2#i(f?}tbQ3BO`}>T zBdT1!%r!3dTSRB6G~(lJEDTwI$j-vJr^{TBoa^d}7vz*DYxdwgJG-EF+Xdu@wIT6r zt)z-*DIfHr#u?t&`|_JrZ52mTWrEWuQ)hxzqx!#TujwF&e8*MG8=@!<%hPL~M=(9y z&~?$kbxBQjk#|w(Bwt~ufidCeG&H0w@l7*kQrl_Pb#+*=>XgZ)`OY>H$n@r0sDh6s z-8#%^`1Zl9FlX3{Or{~NOvyXoJOhKEZ6_B|6O*ioK`26fWcL$TkP0V?X{LnC8&G&A zlzSiyz;T$q7vwd_H(aO}T|Na?JZrd5FP?q|*9U>ZbjByOGmf_F+*+E`<$5kvR3FQ` zJ)VYXz}v3$>6hqS?RaTd--9H?-t;f=gLgkrPhv~k%EBlnpVzToPM*XVP_tjUKw{W6 z*p$0-pbdn+ClVG@`H+d}0`u>MGH{vOJ_&Sp5ta-muCucz2a$Vuy~ZT@_frNM$IGpl zNt=D2ii*mdt&4SPbRD_XDvp(H=U;*y-L?VcX|lLy@J3KdB^k;hVAb?Gk<0s2jlf21 zmVTGl^%Nm*D2EuGD}AOaq42S2{L3*AhQh!{IS$;t#dgNU z_UR5=J>;W;3x?BzC0?ssu|WJN?(NR$l|mo7v)P8Ag4|A@UmtO^^(U)N?GSaY7gg3H zMWRFRwRqhI{Tu4*_bV;^Dk|JsEH)s6(9rs6G*3u}$;!17%wdXkfS;zPR7b#Y^FZdb5K+Jo?PZvpJkWmvrNb87k0j>r3}hu($P)J3d@z zk0RScY}x!SieK0mb=o`Np4JMAo}}5?5$CX6_-tYTXUo_8R&!oz;`iEOs?C)O)Or*# z?K{{uxLhKbKJp8FaoX}_o^c`bGE8xUzT>)FxwJ7RD0O&@%XY#q3G?^x1<=RFj&93cr%X^so7&Sm)*9!>nGsJF(QMX6$?&>urM!%RrW<%)AQpy$se}gL>6Nx2OP!_x6*s)Aohvoc zX!r)QG3FaC?5gshzn~sPPRTEPYE0VW@p<6qHH!Y`XAnikNtJMnyH@Dbhch=P8Hk+k<_JzuCTe1-mp4+U-23un@kJ+<4 zS~Mn^+1M1c%eLO>jE#4-OrpKO0=$n6=E2RiM`gXW1?ht@jc9&E9S^DHnm6OX2G%N` zp0OM9&F=<*zH+DQ*tMb=!G!3?!6{hRC)IR}}zGM(g*$+gbLr zVnc@U=$O`MYjLEd5$|SslP{NdRXZnycW1ZxvL8Q)nj>EAq%4V(%D4TD->#08y>34W zxI~TgdZ~4<81j7Xb`S>qpl0m>tG3!FA{sM(DYAEu_9ot04CH-9nW_|<$dDhQ&j=qI z7^^T81lYmU-CFaM>B7FLU2GHtBBqDZd{_Ijzhl+4TCDN8)SjxWpLn8LGwen=OtT{8 zamQ=V4%-87Kj_;??L@CplAnw{9H;$p+K~7513xzi-|P7ESBSddAlTc*YwMhMwAwAb z9a0~NFSDwWt=n|rEfOm>UF?!zgp& zmHNuOD+v{PA{&QZ5Mb?XhS%~daa{Spq-{WPajr3h4HfE_ks-24BQl(B^s)=}<+@Z2602(v zOzL!W2m01-laJ$lPv#uk!+a)O#T1@jhLr(OT$qc+)bpKvRmEWZ1d7d{e%QtCyCkDI zAT$V9BrJz%ROoQUxar%bc_2R7{-gdM#?6ZnAlO3Bw+2F#no@=M*&(4Z#CvDC%!W{Q z2yW0VpnhaGRg(yQL`exVokYjs-oF3Y!`A9$3t&WK8b00Wtn5mC5_o&vmdQAWX#rYP z?Nn&}`&P4c5=YAJsI&4YYbL~VYr4*$%x>D&L!&@@kS7(IUh8?pF|6u0o%P9k(90#Y zH-DYn7=1{-5JIE|8=@*3*GG7SZMs_m&-g1kS1$VWU`-l;;3SBR8k(i{($!Z2H)u%_ zk-0M3nDdDBA=yCuMLn~@d~nc4KN`a@s zW`JtkfWPsEUOQcfH3h;4%#r0d)aC{ zJzx2fID%a8?F|BtiJB~MNlw|B1}SPCvutQys@!GvAl0Nn8#WGNhdF zz%qtA*NMacVBqHw?#9PTXfPc5+p1u}N&r%=ROFDRxP4EF%p7z)@P58ou?HVZfs^pS zs~0M){?^{UNGMLpU3c+3&Eu3@tJVWi`3e7%4l_^r`%$s`Y}zJiikn?yF6&tU=d)BC zc$8s zltwG+suh*#i*?><7j#HfOg_2zgdInog$4 z!bvL~7fWjgw*)<@#E?TWYo7Li3#1*?;RE#6>Ep=fe`DXxbJS-uS90t+tRU#Le zy*Ya3L3R5Dw;@Uh1fmKSc+j%}^L;&L_08sBxwG(K3l*7XS?9`XfcA222z`7_^*wO| z(~4FDL@6(moCVqefJ1>5#X4lI?u*5c;7CDq0%t;W6&BO)v5eW&rFc%jInTm^GPBmD z3i_hYskvX+O$h`61C}o~qXF0Fgfr{sSBxr#guB#PUhM4Xc={|3YIK@|x^3>9Kr5lp ztA zYjHtNN@|S${pCQvF@!9-r$=dAsUYcSt)os#3or zkHXToijtjIb_}nA1AUu*g>1Q~#rE|VhYA>rZYFyd7uBx43#DYG7>Aldvbz_uIVsRbxy;$gd_1ida+R=8{ajE0^$=+gr zF{u1|_!@VJr)AywY4WB8sIp9YHaXS>0La$MSwk78HhV+&VS%w>ImH^T-LS&eOwcq) z)GX8EM->APPl*GheHrlDbj7MH`_v1hAqX-iH6_=Lk#9t?&y?#0T;8-(rSUk_3zWIu zXVHCzO%49d7h~y7my$fvh9u`*fc4mUALWiQOP>W!T!6Q zK|m%X0L?Yv z=nV5zxs5T-X__<{6|Y+NYf?|A)=)rj?}e0ED4hp?W)C%mNZ>lFxK_|GA3hB_yS0OcA!wnJneF+{Id1`qQ;PCoH;# z;lXuj`Qw}qoGK5Ou~+0`Uiba26W(AgQ4sPRB8f#_L7btX82x9b5I$ z#@G4g@Kyl)E=*LS`rrlz%3$b#Z5x*g%sRim2^!0;(Y49CRa5e9+zA4%*BfzL>d@+| zc4H6HfxI+EHsA>h@3dxYr~8f$Z`uGs$Qt3T%-7zg0Q(ootxprX;u-3>Z8KU54td05 z|Dt#Jsku>qj=VLylR2QGrEbD4e0xtk_ra7I$T|Z4J>MiSj+Ik-h5#GS^{fV+kN1@pP!%P@Zu|gsbw>^%ox-w=x`u= zV>6jkaDPkCE*zo&@M@3he-JX(ZoF%WT+Y(`VYF1JR^+-|sJG;h9Zc4V28>^}P4%Hi zuauM0dfr+S6J^|en@c}zl}ry8@6{&~!P0;~Vls`qAS_oIE$vF>;|f z({ke6f3|p4?V*w{Zyc*?lWDfBHtu-cM8J1FhFA9ExLkIlOjLYsUjc99sTF%;>DwBE zjwCj_FmFMvVaf-A0Ra#7;=B9JyDCDno!^bc;O({T#NRr}xfiv5%>XwIF`z9)f?Xki zmt_M4aUZdz@>oPQyu8^;I#O#6ZwLg6QU_Z<-Jz`LoP^9JOOBV@rOUQxq+0c4AYV4Z zgh4zA&vIKrPu)`YA7I_@?hb;g?+Nmpm?o@kpiy?;#BdA5A!E}fkk18sas9#o3S^fZp!5Sjra}oH8Rc%x9 zDRj?voXf_fDYSb*xLaVp2vM@!)yltJV--#%=-To4Y@pCa2bHpx_j8j7g^ZU=EPeNm z0)a=$7z}-C{raHL=LDR{qIa6fqFo^}RG??9e$Kg+HJqzA!kro973;0!QTt&4*&RhM zn{67h#MUl!F)+W^>E>h-(XWVCAtzV=fk|EvU>Bb&(M}vf0Y|Jgggv6?5`)X4PZO{> z1%;H<)NJY9DQtRGuJHg^_Wk(Fwf7C7dZDJw>EWs={}sD$(@ehaUM0)k&^yfQWUn=85cUSd(UrsryEoK?jg3u;@Nr~>2s--~ z1+nP9nEu6OmnJ|cTd4U%1+WPVFXE_gGHt+;py6^YM>!RW>iZy_OT%AJzJ!Ip@^<}kQx7QeyMDs%pdj*pmJKs{iS4(d93>+D<#(617FliumN74E&Z(1q@F zMW0iLZ!v73zC$mSo8qN)KauC>ug2SrjEqc>W^Yh7et>s-avY6!6#-GH)MkCIT=kK_ zYadSw=@obwk$G`c=V3&4ix3Y_W~hON$GvCM1;nJ`=-K5VcHw`fR42q{(3#B1nd`DS z*7%K}7A&@|3#6o24nUdR+`uCGG^iYOZH?$zIxJHvV)d~BXSs;G&pQ3JGjwXy-pyo4 zQMtwqK#^UK^$?mWP%PLwh-YMsK_SURFe_cmZeD zhLoeRs(`6EIPxW$(FWccMgPX<(k4-W@4ZNHn-wfw<#;cIoMek(gU7w)w&TGXXk75c zN;TG6u7KKyYR_&VZQ`=)9HwtW@OK#osswvLK-S0V z-a%vjsu@P5h5kjY$_4UPx zo=Q~9-aIJ_wDP#NLv0HEI$4u*)19e|-9l%f3&U+1{N-kyNi842)2(#=)Wa&vQYng_ z0&JQ^88y47&vx&{s6GBIbwhwbD*Ta)mh7b6&!5evV=-Sm$PAY8prwb*4F*v+4%XXl zvxh~_Yro@pUf{f{!r{{A4$=JaanqFPLyh}xMA`DgeId+)+98-ZQGA$QwW~anTH#ii zBjPl~=WuwsrGeT}fXRiF zpksyALp9*rZn+)1fYzy+bPC*C%yx`zJJlt-msa=A@4U>b5?s)0F_fR!J19)_h-b#W zL-Z8ysczD%i^He|ehEp*w%Q|?e$_MA2LP`kKUARqO=F1_u#(2OdZ6smB6X%30ACb) zEW)Y9k>-fvL4d4|@6;(9n^dP6FLH?9-#RKvIXhy1Uj3y&XEJ*lW|y9(Qepo%B31>srWy{;^juBV6jGMfi6##NAUnb$(t=lElZJVJS z&g-d!stY=tH=iEmy)3M+y}jHWD}{JbReks?s2r_4g7A!}w(yVu2*SRxE0!oikWXaE zDz?hs-@hPth3=Xh;qiwL%8A2OAV4U1&3f+t%7IbY7 z;PpDCpgQH@`C7Gam%0+^R2dYba8bUITCdD`&YKSG>dv}s(mHfMD1daS*=7O($k&0&{Ao7iE=Tvf1Z*V%Ei>R@l@Lo=XVle2#dc5-&5_CqhZtOw+X zB!?iInpjf_#$HRqZD9bj-Nz%hx6Dju5S>_pl-_gEwfDqz-5g^Df~&(YKK|`DftJnT zV0nEnH1Fu)vVr5_2JiDMkSm)OG~nJXBDXYK>g{2sziOh7LYTxTv=oB0*QD#a6?hn3#MZ%%> za@P%s?$}_`y|*eTg`EPfkxAyE&OjKd)w^v>J9Z{{o!1O;>x4lgX8m0G-9nx+5So=P znK3F-cmLtOYjhfqLMfziNHEAHtO#^C@Zq~FEM?D2s(8R6gcE7mk*@{hRpx>8JPx0F zlU4LPJ630Ru2vmEr=@&>p4xciCv9egj^7%UHa2``E1$ZO#=s z+G6Kb#l9RH{?TI75ZyYT$-pdY z=!hm6fDu*6htz)o>~7RI_8Jz-QWw>}0d6#q17U&&lBI`6hO-^BgYiDmkyfR9n34T{ zv_BFJAcLuZ9H*%e+@V4}xUX;M!$Xx|H(syb(pq&s;=#kpx1Fo1Ls*Ut3)S+KghtmP z+xQ<*12NrNMkp3&W`bo$^ry zAmU!*T$Ky!xY%NDrM_>*-wfWF%a(PVz94EtiQnK)pL=*s&gN$j&P1U1AYI-}q4MIe z`%^MBXBW9~n$XQV9%{@x?kEaH6i<+d9(o0@*c!FKyYW{p;Ec@R9^@<>}7?X%@{*mrEJQ9K)(@L7hDCAbCug(zAfDe zI=a}ISIjb6q!?2SJKsFam7JT?z08-AsJuiqDyBcQ`>1#wsvF=LE^yUGxWBtn)$ZAf zxpCLm;dQElyatm3yhx+w1h8%$fBYknt?8^@QnjiX*h(PXh);C_F;Il^ipJp}+~wdoUrfN_$tRD-iMmI~i~ zz^)sU2{4>AzWGDx+?7_2RM&){AM9>j?KOcd=*YsCl4GbS2Yqf@g1juQHqr>=nIvSu zg==4@;a+nV|G^WuVUnGK^44mh%C#EiGs3_Q#2{b?;>Aw(p7g)X z2>-VyknF@WXAwV1ugkyxsosq5Rkz!zdvE^j)&K1YA6j5@D3Sh?h--q2|8)DGLH<9i zzW+?A>!OGM->h40)|=A*_$`2|!TFEI`nL-CUrzjIG5vpeF%hd(C_NT-C!ogs3mD`d zF^x--jPG#YTE(;*f4T8bMI4U62Q2ru8N2I^|7Ox>II$!`?hhUTE|o2ORMnA-_jGCF-7J5sqjyb<9`Dw zNIC$?xJ{AqUw2d5KgJPN9s5n_<@aSu*Sx{zbt%OY+$E#rwDtp)L$Q|9V$RTNL1m-^Zx?~`0w%) zxj{m^lI*9?74g?cYK9*WkoU6Q57obqe9H`$MDYFSjzs@g6<84w*Bg41M}8Ths62sx z-up~47AB@2$8q3n6rCsGmxze?ZgYj`RQ|HFrG_G_KMDDN%Q^CUbDMZy{xuot-{;Ox z4cw}U%Z!11Q1gTjuxWRcn{Rh)WY9`uaiNuTuQ_l(e)Ms}Q}aSyLgOL-B8)&W$)w-R;ZhK4Ltu___i`@ z68-BC@YEs0spp+2V2i5EuaALQ+6VkV-ovv*)MmVPf@jbsJ;60+`qYzm(T=-u1wV-X zAq83+oVoe=##2)_V52UxYZSFPtK*JUGYbQOnt9)KQKNPb5NQ zD)D3Y;ry19`Ax|&>-`?KW!8p$)!P^r!{3~=r-Ki!x77Xa;VJcUOL*yq{(abx4E8HO zeG&zB>4I!-;^4eR@7O~!0zGv~t?B$kxi23;bWh&y{q*-8PW+dD}OEc`al~ ze$+K7}QHF==}m^1$8Aer)0e)jyv5 zf0b^FJ(k*jr#(F7rsUu2nFAYZG zo+;1Tl3`H`?wM+#*Exc`xob)w_nxay7=~hBt5=bqI#(*5)ehLn`8RF$LF1M#5PCu; zyp*S=-p@j&%V{?bQ*hFmY_7$gI=p+A5yPgZzHJau$#xS#46)QIF^hg13zPYxlD$w> z)-)H0ddkJ6E^L0GxXQ7ZW&icNN9<_D2oJC4Vdx`XFC{{%n#ypOLIk`%PwVo|BN~AU zMPO(2k2Ken<(5R%HmkwUs0YtzwZw{BDxJ(1k9+Bgt%ijOQ6zk~*p-yp-k)_wv!~;j z;13*DC<4EtK=(DCZB$P(J@Ptcd%oj{xil4a8<{OIt^Tp>LU^`I-Ud3EwCR-V$| z0VJSK*0{J8SfZ-!!nh(o&dH;XA0-+A2tSlm&g8H`fuP@Cq#aB8u&!A`}#Q9 z0sFn9gf4EbHUmj;9FE6I;PcgAB-HvnDVcojKDrCU`vt=pUrQ|~6~rdgZUXsA#Vq-wL}IK|pb+miZKCe^uD8oDtUwC}`iI}xeM7~bBh z+D!lSshW|I-O7Ae@@wFyCbsP>&=aGtik+6HN$x#lS!7m=NvU*9UZ$KFRST!)-6$)D z^Y-@P-MSScbwiLoQCzH}_dRP~ja#>ErTc76%ySJ<{QE3VE$g6zb|adE8`I3=mt$sK z8mU-gkH}^aT!^kTJ^sa&UOJT`rNLs0eqkoMI9QEhAAigbs7G>DYaAPqwZh)8z}NH<6hDF_GxqI8FJcMKsd-Q6Jr z3_}f_-}c^f&ONuj_rCY#zYUwc*Iw&czvuVlI%$>5Q%ZlAwCYjsIqsE+7>th$oQp0T zn=iDJb>W03E?$ChtX4c>#X``t8Xn3$SI&_$)&&AG=E>r^GW z@Hyz_!7XY%S;L_)x}~0Ua@*i{5I})mH{U3!fVp*tm+&YIZd?xEdsgm5{lqm5_f2>v zW$4|7O$^}HN3!Fa6KHb4^47Ca^AUc=&Bp5{+m9XOOU{mO_NfarvvXTg%gZ?(W=a0o zivI(|y$-lnC5!e4sS@Y5z>Q1uxlAT}iVm^sXGF|2WVctk0W!*wrRY-?Rw{IRTBO4c zT>AoQL8s{eZE{lYGYNO8Zga3x!ioia?qpCf1b5FJ`{EY7`AyUA9FeFt=$Xh9@^ZHF z=iqwN#gY7;i08n%pPQ{a#zo;*tulky*>oi>gXRyGu~E-7TXZI89wB0fv2<%pvp)oz zKX3d`YrPEV9gEacr)@t*{DE5A9G{sS3=5Pi!m6#uC4e3fgE-eUcH#QXUXvnjd$!t; zKF=Q_rGRwJf?SV+Z08$ifnOKvUL^BcO-U9Zc~@214(hs^!OYL@o3391N;YxQb#f*P zWtk#RU(EfcN-8UxBYD!#MrI;*5#qjs*qL&$9MW1fw@H{5IdqUU;IZje?~N9Ph&iv# za6wtboG6Kj&Gytj6#a6^{tNW@$KUzaVSKhc_|q;0GB3j7SsCb!{CZXaBkHtu<4qKa z<&D?r>yU;aH1OG;6E$~~%g;W$((fP7MQh`gv7G*$JcJdo8_{?e$+J~XHWx>8 zmP}Do6Wufs&p|5ymbtH@Rib|tty9mtx>*zZ`81midKHE31MM2TZ=7a8{}HB~|LTDU z@-7e|{OxuR5=YYA8p9mPmUM+=ODgB>qP{vOr@aRiZHYX|(?DX`k6j3i66Dp1eHk3Q zgqhixT-IG;Y~s4$w?ec-ufn#w9M)w0D;hdrqnIjSe|ppKl}C#maagL~Y;yYFs-}Q< zM9TL8ZJ~h$P7`!}rCEBeaJ$qpX#eUzXi51Abfl?Z>~d zt8Ad46ClrzCIhhmSQK`*J@Z&bLcvUgIxK{8U8M=BDBho>A-!3#YD7jYaCB(uT&kxd zWnaKNHjIpn({Dg*P3xYmI&sm6C5p=8B0MKeDMiYsL(+pw{-Y?mf9tP4jnn-7F25D# ze77SFZSYl)tPI+@V%Gnr{r-wYzdlruN$4_c_H3fT4oby`Th0`h+?0 zq{U``I*35){4~amYR}2T|9O$75T(mM%JjbxdyhbIe}3EdqJQj*TV}_j4Gcs@7zu~* zDO?CJT)wo5-$zVD(}xVS@zB31zv*bK*~ApAgno9T+UJW(6*hpJ#0(@#4Xon8G?RUlQojPqGxpi&W{kb) z<*S!JN?Zqs?%ceNw>f}<>G4)_8)JiPyE#XjGV9${+4LAd;MS`2qWCNt}tm3WYDYSBs)I$Gia{^$mq*qF+BO4R~igjdm@+9quH_puu{Y3#}M~D z&M2UsAZKu&BU7g;$+S?d=`Bl1*uKx^%q)+^#*fv&&59lEqIL7W7&+Zq>uk{~AIq85 zc3uJHsY0O&%qJk>w+ZiB&h7)cac)xqre8eCg9~;oJ|1hDu)u&P{BGX;4}iLWdw>6F zg_|&PJ=5>Y{aFTyi;I7wh{OD)gFMPCcn>VTx98jn=y6r76x5e3*B4ap^Q@m$iKV7| zqhh-|VJa}lOQT-WAl<~nizf|fWduU5Q<8OgPvn7^p4ckxeN*BiS6m`LQE;xv-4Qca z;X&LpBRNBIFqfpE8F=9(LBzmC)-E>m?NsLnoazx8U)Q`@McUeTwvsi@?2GWU`h^?%r` zR9qKp;VD!6l)H(~?{Y!=0CRV&aAPPLQPbJeldM$sv@e*HIUmirWYTOhg~QzUX;0*0 zVYQ86jJO4mjMabP0;Mzu+Po=*#WUwD_oJ5&GdlQ$h5Sg$J97^pULPXijGPWtU{ z0CFz6QuKZhNDEoEF?d|_5wvifNY(BS9%#;R9xw%#}b!Gh4%AoqoqOn-Bok5sKPw+nGBOM187jZ?zC zZOm|XJ_h;g8d(j#wK;fKEkFA=M z4nV@U&gh21MrY$uSUE3xRSC(HG)gU}3rzn*GVdt-7x!kIqtKe$?kDhHeGV%fe{pcS zw*n4M8ehz4fEK1Nwes7G0ag@Ho53OI{4?%e?-PsR)aWXU;g`iEGA9#;o^Un{%*G2I zT^>*}E97=|)v9r0Y-%_ir2qasPk+vjaOcYnrv_iq?)B$GOd4hj3!X>7MnQREh$T-0 za(exk!@xN$ZpDd&?OlrClPbUn{Txop;ekENSg$Rl_#=&8wla;Ms_sY09|Ze%Y5WJX zpEeaaD=TYkTM;M#MaFl02zY+8(PV$$Rqv5uk|9j;6Mm}nGqMy`q)n+o{` z^^S%UTCa3dG;hv#$=E`ReR94TGv$!0lz-~Yc9({*|?!oMu*$NG8t z7i3iohT{?NzJ|0i!Hb6|;2y*BX~cx^Fk+%=x=LQ}E%EVhzlt2(L5bXc{hUIos;V6P5HxhO$U*-2_(+oC=;-(V#Ra-8(&J;C zT^M~1(I5BRwj)2)D17TN(d<2;L4t{P%Ahx8CjGDf|KC3u_{+-f6I#jTDnw(S4#poZ zx40kBljarqm_D1;0!isR3JOY`fDXYQFaQ6J_V3;%AdI0dCafes^y*JTvk(ga#;&dS zm}6hShiBDAKBf3ye)r!!>7OrBnvpxR_h-R&KL`F8PykQL_xq2S~RA7z8l9al)iXqW z==DNzh~QP|vb0)D;>(K*cDjl*)YXFn$Hvvod7Q(FE52g9mN(31)O{JfMoJl-i-&G< z-rW%mn_feZhG_GYH}@{ zZCR;(B?4j$$(Xf^SvwTZ)wd} zh57zE!Llz#)|KuSr8Z!O;-L{vr2?c}{{>F`-3|))PK&Qh?XwuYvAH?27vxdcc_-P? zp6?ro`jC>+gXtjy383lq~4k&9zq8)2HPT+L`6@hQv%uYG-M@UF!+ zS0clDlJ-5n9;Fn}TPV-c$eGY?xi*%Z&-(SCUN!Gn0bDDxA?}oMFE=LU!PCCcpB1LE zEYBIbY|`Z9z@oK_&hrKj2?(sZ*C_#SoU9(71Ft}})pQ!ISMY}r*%7HIF=-BwtDrtlFvcE?2C5XtWL;w@<$`xHS3Ac-1+^+bnD4dyUw185?P?Yoi6l! zY(&%bt3u6^M%|pwwH=);`@-EL zfhs?zdUH>KN%z>`Cq`z?`r7pfY&ip+$`jXCEj*Lf@E#HscC)la4wysAc;U4nVSdC ziJFM5K)2e~PG^6vIiw-d)c1TzkNUCElXI_j(su$pr)__!dpNd6O8>H zpfKq#fh&~YLR_1rgGqH685wU}ZiYddBbnIKhXXj2{-i4(jeK%tRhE4pu)&Bckd&Gu z$a|7P6c2fVP5w{EMDIQeEE7x?sswFd1;P;^>7UD#I?j~w@C<;Qs0qEK-t^lBM8_bZDbWxMn7Z$B1lwFa0i7Q}vD!N+=-Df+7j~3y52>w9!gr1(hK)RoAqDfjF zYqp*(nH6^VDq<_?_{hcqrb4|c*n0O0|LSQGwXTOqu~aAc`rN6e7k2crR(^|ukZ||8 zfu|k%mUnu^jL!VFNNu(=4*;CS$FqwecE;H3k>oA|ZLH;M?*;$>q zcdoGMyk;;Fn^WcEKTn^dIexxo2|3VG{VOhI`94+}nFU>r?MMaz-go)zbx&!$Cl7VI z=#_aIW)e9<(9#p1^9vRWs0nI{{J7glzt0Yr} zTzATx#+>5-F+yhj#hsOvl|PSe$|pZ8kC($_L`F&y_jt=mHP{Pvm)2?p*vYGjCIy_i zh7TDT<>H21wHZRjLGF`> z$HpQgPkAMb29<)>_HFKRlT~2I4^j#|3tbRy51-vDJ$~>Rxqgi`K2T7$IKVGYgqa+T zi>$l^#B=A$Qn>M`D!+wC*u5&!WUcD#{X5tfUm@BWt>Q3n>v}}Or;#-g^Wb<-uPm;9 z1e)r1AE#x-#Plw8e%-QND?LttV|LUJsopJ0?2uJ@GL$b!4WJp~$$X^k(BoH(A_%`FI&ESulHmM6K>$x`cNb^WD!$@%Qt zhxqlY_HJMw^2|QVehf_$6-HSD_svS3?Fth4p5*FvyMD9xG0k^-?dlupf;fWC-&XvtDfJBOYXepViuK1?3 zK;@uwR)gfgVrG24g~HK#;C;_#tU7VH>=ZOC&ok5Y@;s)LX?8JBG$%@51jw%#oNxl%m@wkCu9agAu?AcO;;>xVfG|b7MbU z@R_Jco%n|EUUVKSl2L3SA@M2OL?i2+7c$bJ=+82D;xNDNGm+U?RQ;Ke8K=cc^~?RL zXW{7|)4?mm8;R4Gsy);-qNnJX?AMBXJHeX4KS(j&OBIfU+USl1oz;1KPPS!jri-(J&QrS^Z;iCI1q{G9gI*6yv}-5yf!U&M+%lo2 z>W@qQDu3s>?dd{+bVBhka!-0@5sPE(m36|9Ei}?@BG(Q~j}SOwrn`Dyj$sB668;eLP5}HG1I<+) z2D<}~9huiNa=x2Ae-QeU)-O6%G5*wj~Wn>BI31eE7!exyLnvH zrTY58>#OcBn9@FrICVOg4k6s!%=GlBxVd>+mJLJQfe=s;cVbP#uTf-(V7wtAS`6PG z&2H%4KSo)Y?&lCtNt2E?1sp9a_yGs`v~DtL%ujKmSmz~pptyFn1Q#S5=~+RkA=~E_ zL@_bS0`d|&x7l$#@-BLHwyc|dPN(=O>F#3>328u@_@5syo213r9hHZ^K{U=WzJWWw zjd-)pQLFRhM6|VK_4&D9SxI({yqcYR^vi#-cn4A9;#fX6!YFrY@VSQ6Uu^zlhZNIR zug1Q^WInjs&t2EZ_n}9uZp1oS(yE07f9Rt(NKA?k(b4FXGm(8$_&$_2U3!Iug=Lw^lc;vn6mw)dDDGt5e)J*M&cDFpExzS)jw7Sew+}0)r7ErCqxvw~ z0HfU9EE2oyd;_R%wUdI-;Ki(99zP07-q!l`)cDC+bso_LN-)2XU*C`qvz8E=Yd_NqF$#t zx;0pN7Xh^H3mrt6EY z_z8uM?gb&Q2kI<(op^4P*jQ70yqc->%uWpXgA1iZAfN6kW+>gB?ag{vJ1bhy1w24I z9ldgBbt6feHG;*M52h%d6S<^)zjU=h2lz4V2>Qz_gT`lL`A$UgsQq#5)qtH?g&au( zQe1Dn?wozi!2cH+PDeg~)QE-m?!?MVZ@`#@PhNkk?VhmB;WF?)z?{3k18Z;sT1mi_%q zKZaoE(tn!!fHnMl{gh4%skvq_A%btA=>tHG z)@JW~4r;rSIk<&DSEx zRUzU)@xOvBnLtsA9$%^`6O#o%O~o7V(Zd}Fn;PsrbsH$va7~m}4l+gNYPkX#{Rm}E zWv^vGiq)6_AyM{bkOH+9G{L_0j}7Y2W@iX z-Q&HI#YGfDc;ia9fR{&f4jTqFk@3Qqsdyj18U^wWLB(nLJS6NFN=N9nO!fFD&~|%# zg2m{o0rlSY32zrmI#{fd{WoD-v85epl741-@VaEqb?a@LoR9}+>X%c-v9wO)^gL34 z!F@m`J!M-Xa#OjlBpAg~s8?+*1ypiE#iST?n=Hk0a&j*R&?vYZ^E?r8GL0g>rA(DQ zCfdKeKLCs+9o1s9lQ!MV$6`?>t=hl?+2|^;QBA@si=3W8}%56DT z2gNB#QJpE5U0P-`qqrk6CN54=Pr%35w?+2yi_A*OT(wnCmB<8F<@W*XLlILc^G!Na zDkwFv4)cq-I#8l>{at>sad!7ZUC{~cF4`*7o~Qx^>R*QvD0_IkFa~6HYo;RGJZUF0 zb0Xi^)KpYhIC+I`EEyo|gKxCz3`H?l@0+k(ovCwGh(J?2R%C*7KPU zjNh2(zQPR9dtAq6$#Go)#GtI_OTTi-W3M)o>pfFFXSpnLs5{*dl7tY~7f;t3vYhO~ER6vAK54PaPm|#fiHw zwUc{4KibWGN;=@l=35T;u;{J{TW(lX&09P>ti`3XfK9>kaY25CAJo^OJrZ-n(rH`JRCCw+_D2$p zX=&yn)9|$AmN(U#Z36=PN!|`C7hi|$&T8%SE<8PFOzZH)%x%Bs%6Py11`8B!FR5qk zYZC1T(v|8JdHLt2cdmD5dWOS+Lw+cHF#Yz7V?l9V!sGcWL@sJ(d$29D-W7>iw8V(i zRo}Mnn_)Z2#{O=m_6TDpOhpgu7B>zc9Y~{|Mq?(bgHNRHP%qMc>ue>3yoWF6QFd!w z-|&Wk4A47Kb9s30Vy&bsr|K+kfx%8KWrt=Ps`KSaf4Q~Vm=eU8Oa0t_ET~M)v~RF? z^@?xlJTULAgSorU=i2JwJH`dY9%q9B4W@37($&Sc(~)pN_XAchRc0BmoY(6 z!gXUQ@nAzm5x;|C%c)`pz(z{B5<*#MHSHl>=n+nd-S({~EJ4$4R`p4rTZrnu$l9+C zPrq{;j$KPBFLX&zP^vS(UeLVZ7U_u@$8{K1YJybTEPqVmwUK#5c?9DCc~<8r^4NX% zIX(4Tmr3S+aLEju$F}=l*1RyhmMK z)l=4DnPqghHDplHd7_EMxx#%o25bDX%GZWv3k%|#-O2uM=@e^+Ll|gGdzw>cj~0f}?4fw!}a_QjN8l^>WF9=pMlCSh3lzQ>DAyVML~HjJQok_Kmlh zVho#eFObGb4jNB8X9X;O&Mt?3-qYu}JEumA!TM>aAAZipdjwsrlrFn1d{Ldu=$mj6 z7qyoD zCj{iGm)*RA+PhRZ0^*j|U{C6Av9fowQ{leC8CFUri8da2c(q2L+syePmHpywKAoso zs@}I|TYWqqk3glZIvmz^IvB$2>CSgIWvu1(@oy2$-|fv9oL_N=_6K|8Q6TL?o>bmj z#N#v2_bfEO$Urd>XfFA)kEc@;z@IqDJjfKw?4=ilFyjyZx-u=Xa)xl(dY%JmF?o zptSsIDM9}zA7(A*F+*Z_#f#f)86#74Z&ALqA=8U7X$?o`h7zLSvzl*Gx--3_OjeU&X1u1C>SbB&?J+HPJ!rGZ z4h`eyv^Me1@TAxU+3U2@mOVzPnE+k{^j6UYI>7yPd0_h6rB&wsnHu95P%kiGw--QR z-~9D4J*I_4!r{2OZi{V2;y0VRG+yt{pWTxa8GehHD>NjwsuxuN&2wQU*7I`(T@5kf1g16#U z>vW@gX}t3`eQh_*+en|+HmFziC(pqGBI3Z8@;l%fS;B9c%aLe3 z|K(X<0|DUNx#)H!${K{nRe1^cwnelZvlC0Mn*AHOPfM=`j?E=;DWQ0~%dao{JmN>z zPdLSNqZ%$ztw$?ssO={3UWog*x}9KNZinoLxu$1`EpwmR^9=imoqe0OL0g?G@gC|k z^tnKp4~PcZ66Ixfu-AxAr=-yHMxfD?Fl@>!YC*%mE_3e7`5mguEf1_lK8JrgnV5KR z%r)HZ3{dpBTD|=F*1Jm{HeG?`g=Nu|7xOD=d1bClJAPL4)*52i=nXqb6xyE*1jMDf zOfe2G7G_(=+EM(rMh!di0f};kdq`j8TD9zkXy6W!HY9&u6!AKT9;vo-iK{h8Fn-}JZ zh!^*G5tNgv(z~*)!hsbOo}eLDC%&Eh+-fStzTT=>r@GGYuCCjBem+-V z5~TX!*|tyVDF?jL=+0%!Bst*bh193wQTMC!jyk)p&wJB()x&D1r)NP^ipTAW`{evyeSCX+yGCty z<+6YKBrCP{@lOky%M)sgUU5AZ9R55Qae{$+M@jeonl8cMN@GotWp|X?;K>@Q{m&K# zROZI{M|(`nQa3)U`$~_B_J)W39Iu<#sh=hFDg%mHBIse$xVe%o)x-`pAQKU=;n zgNu(wQVEY+`Wh*3mXs}}UJ-XRLAiVAq?4^Mc*89PixY*PLHrEC9Ob&YDV8Tid{MW8to2{kGOQoXAOZSJ_@ZM!) zYVoQ;z^r~r)n6I?$e{#&R~@MZrcrY;*Y9=Yj#r<-M8?F$y?LOZjW3Mq456_-jj4N* zdvi&09H5qkqJ$drRO{o;R_QBUb+G7K56*6jW9Bu+he2M2T}R%iwIh2 z*=gQR`@P3Tu^eK$OTF7GlU+kzhqh>@`;E(*ta)SfQTL(PS&)6d&I8TjHF#W&O;7ow zpI&;0rLXWD_|MA4@!G|`&#QsH>B3`eQqFSNNL`S9pC3g(NIfMJeCAW}VxE9|&H}WG zgd3Xh!#XI^Q`-V3Zt%nuGwt6apHH)vnJF;mDh6K&SOYZlgbn9O3+fxQnd>yGm?m5DH)KHC$@Sp=_ zH>l`(eR1mG&C{p&ZPdK`E0xSDAoM%YqF^Dp?63W?fC)Rvi}E^L}dW!h;~ zvvajM?e-C_y8x#1`}_R0$1Q23Jgr&S!>O{=SIJt@9H+9PJ5X=$sOMLmszze>dVPjM6xf5cR z!qlGEI%Q`8ue2rz?FLPiZWh%xir}HX_mDg3IcT!G;uJVPUz*Ra*FJh|;hO7nnWlMH zfL>?Dv4{4w<2%vM*d|mX1XH?aTiy@StD3h;(ZKNu^;};A`+DrRm5loBL83zieA2^J z-;9~|5np2N4`Uyzva~Gy-V1;<#6|dLiBXt0U54-0s0I3iU2h$$^t-M3D8S*Y7tIkF zUW;NkfI^CMrh(m4E7;Z3i*R1M7|#JKWh=qik0#sN8rmP=iOLx?&YdZoRPPz*)fafn z8^Qgi`QRIi(d&4G8YM;n` zo)4G02TY$;)m|^Tvc)eBy+SNuDYZSK{8mgg{NB`pO4z;Xh5L@Jkr5XpqS8RvJwKxY z`X%^g;9JjMB`^2d`-TT=zGWB6|QgxR^o{_9DK>YPvz?&xjWj zLTlsZ2^G3S^frh|w+Nh@P1k*!ZYA$L8M@_vM{Ewk=g|%Ob?fYuTxZ9L`;Y?b zJtnqbGeyfDu^)N}ubBJ$hSs>@=6KO4BIVY}Vdf6*{A!{KPwp!PJPJiA^R1{*(6OBu zI4(pEIQpTYHL8A!s;dtA8Ekjd+B1(bsbV5(^=|KG+I{clbs=D4sCQ!JO zp4GUF65exWv{I0WNSiXX_am{G=pnUU{#+otCgJ3PnxMOR+dk^)UXfmF0JI{bv5vay z%0hWzD&pP74+85xY9c3lPD&eIaHyiZT#ZLgkp_gXjUu5i{AF_QcykAq7Q-$6a-oLJ z`mM63zR%*|@tohSG0c<1s;@)+Dr?7GWcYhPL1^1+Qk}?6gcp37Lpu!F=?ZS2<{yoh z>%QDYO+!DU$5Wb2sJJc`V0oU6w^X^IM*S>7Rol}{vnMcQlxn{2h<8vB2t}YF#6x$Ulq zyJ7}`(h2MB_mN$87Whd%Ei-)TGeTB>CM4i4)8(wb1%238svvGZSkTe3UtW?c(PUu&|(?7O}-o@<}60W;gZWG#0AT2G(tY z=^pBEbstiR18S}ZU*WAm5Bs9k=BIRZCpP&7A_YaI)JUBEcy_)zJX43;!e*H#m)c-A zrV+!vuR#d$P{8M%SapA*l*lx+za^c!_ZP(mpw)-QXYnu4%KKMneK4$s{Y@2B_MT;# zo6GV;lPbQ2I=hMbj}>HRoJ~fpr$-=l=O{C)w7Y{9Ptx%D;{YV)VfH;puA}f`mNZ3n z@z%VQhc@*lG7Zyk|3@gEd2_wF1R1(^P9qe0Fnc{Zn=kExdCuc@D@J zR5)YN)$x6DnuFC2@lnHetuR}l>$uys+RYp5KQsBlVQQ?JXOpHs8zLYfCwXyqyG7aPdS14hc^xzNVb7~6 zT>8x??(UM|j0e4f*M=mDP#l|qRu+<438>*h=oGtBju`^WGci$JnbypRy)L<@KxVLg znMwHFvt!@lFd|CT#5A95npW9*RFh3Aj*Jo*-q=t{NP%5^(nOT4F<|nvC*q@FaoC4+j1!3{qynBHAoyB}Iq^FF@SJ6q2 zFL`z_y z&G6^5BA+E+An>YVK;FtCPCJ@G27cFuV8-OlW6ew zhCnt+BXled^ZkrIN5gv1aY2rg9bI_w6QAd*g zxj`^yJP{|q!(KFVYGML^$Cbfpqg+Z7-e*_v>GbW!WP6@2>}Z1MiO*fJj~->%p66&P ztwY@Gp#|9>)#M0=_8$6UOUVZ-EC`G+OQ%b zwRq7rQR9Z-98r;-G17G3@9j4R=9>BG_;MzW_pnbg+|%##LeCP-la6dDD2wiJYbN8l zNKXdt;hz=cLa%R&RwZsmnbLXExfliNzK^WZzph~6D>0~gpX}1Vi;a zrw7@Ge5$Op;*Jojy%Zf8?{!86mMpW(`g`wLh#hQ2ZfHbCx0hJ`Znwc$pkokiZUEGr zL4?wKw96N#MPe2@#O`hWT@6BbNe%KHsAUb9dy&XNU_yD5tDv8mxl=GAS3pivf7dqIyoVwiJYmqqmc3#^v>1W0p=s% zQP!z`(&wlofqb??uapc=o72>kXF3<~{N-RCN!Rqzas_fZL$5m2(6F%pZ0qho(U^tBU-H-JxT5x@8H>-607 zXAPjk2)nV$H`YzzN5YTObT~zxT_Jdg4Xca`4SM{Oqn5xOM?+yy!8BOkNH9#&h-nGT zUuy}p{f2ACPIsUl=&$hvl`+G2UFRG2e$rE_wK{~qh<1i3n9jRdDmen(ELCLt zSroWTWY4&3XnyRYSPT)ItdBH*zfY}oPI1|6hs_l&x{n+Z=Xup^(M(5T9v>-+2qRgu1J+x90@BW*Atk*dB503Z!%~q zzCo#zeLz_;uC;HUt20hGa6^!Auxfs}0>NTo%~H<5baKu>_fZiGEniI~%T33cascOl zWl8C}?2|^@ifAp995LbW<@~H$Ic=)_4sQMKr$Wh=aLJND8~KvAhEKbbn4e9yCsldN zany}^mEvr~hQ-_p~{>0P8X^H%yZ9qbM z`HxnYAqrbToY$^pehW9Z^B;j6+1+~%Hm#MRFUfLC_huTxbx*X{vbVtwt(%CB)*eN% z#|IVaq!*7_L@)-0+16Ab>_(M89v?}2OGw-Yr(UTrWWFJJBK|HHyIpv(XzQ}3hz+pu zann#i7F?;fnU43uEq!K%9j<$hqScg&jIg|mZx4K6XlmaE`%N=B{a$|HXEO7-B6iU2 z@x4JSG!SfEKRyg`0Ec=c+tiD%bQu5Z8VkRm~L;0)D@eM1FvvAElzJCYXJiwE-M=qw+J@OALmOV0rT ze0ze6EY|vX+BYNn1%O$v8#bF`gXcm8@B4O`o&@Ow3IpN+KbjnP5zR*SCoL5>YKb6K?szSXdTkxf~$0;F76^3bcfkY?E1-0bEO|^5h z;l;%rtSRTJ#ys)(xn4FLgD)tzW~<5?8kxA-o*s!dGklQd`pW2Sp4;J)&k+9R`g!PV zO#Q>FVm;V}@gr&s(8aPa@_o^{rVCcaBQu5){+6S6%fZ|MnUEi(+bw1lm^04;zpLy= zy@Sp6i&!kIr~92|N_*#?UYW0v#`((A3_d7-wLYv$>PvSsH~CD&Ezslq>s_;rm=>R- zUnVQ7@|AghPeP`+4vn31WLQTf6CSs6tuWovE|!Vr1CcsqkctwMGsMnfyg@+?m5v2f z^n%;Sht23pa5DE?NXDr)w#&ybWt|=_dCFOGsj%fo4fV~2u$k>2Yzed2%r+`lXHPB0 zGkD&vCuQ$vu_iW`>^wFijuI0?ooE|(@YJ@t5b*hhVL-izX;#M#Tr2^JqRxKysgbmYG4g?HUg4@KGUbHZO9e>@n7U+Iw zvn{_aAU^})SyGE#^}IerbI^U!GE?gcV>IO~cm=%```HQJPwQOV6lV1e7pEvqz8!Kr zwk)l{*f&&A#6woMns;-=5s;IY=NcCLoYstgvE(`|;1W#Xm@aV31BmHR!Ji>ZC!^(A znPJKr-4ROvw;)^H1MruRHHytU<}q*dXh$W4$pk9bSM?5 zTBYosI%5P>a(f*4+y-=!M3>E-c63rzJ4D%x?EkPa7zTpT_2=NboEl&wZ$!IaKT$|t zA(XG%SCu!T!tbwssHI0nZ3Ty%((GPF(5E(Yw%)wI5$=?aVrM|liNztCRY!@)Au3+2 z(5VCYx#Co69+Fx0oC~pYmti1pn*52h{WTXqppp?No2z7Gz4%+|`F-hoG?0~w-27I+ z8rJD6@xu>Pb_(Qk&0(M``z}QtXK=u4fEED@(TE zlp?YA2i5ilo>aAL9>f2}C-y6iw@$MVaRk0vP+j#2M zQJ0?L!+)IVYdQosqB~eBl8K~v@`UcjOcrlnKGI$K4I&!Jlwif-=3L)VOt^#tSFA9? z=bFewl%JJ3zRbpZ>a>hz=&qs^yX`8|<*AqD-B`Z2fZ(WJps;QQ>Z;yPYgBu-%sm3K zBb!xv4&5=_+_JcKqg;@{X7!8;$U(0?bVQ6$FdpPS z6rLFW%GA8z9)g>6MXL;{g*CjH{r;@wQg_d4aXQsnZ2`fy?WMB-?P9}1eNkYuQGypP zaw75MU}J0W)#bHAzYmGQd6b0F5;lBiVYaHt&W*RF+B-#rBQFhfRU^h}u4xJQh1hsJ z4m4aJ+#uGptr{9=ioTs-!oTiexLs6A%TTPPfu@{5nj7HJ!k_ZHVP@TegS?`mvGZG| z=C@vNXt3b1Ie9sr@Nn4h=*!cjqJe@l!{f5Ar;SV7u6Tz6n!=~NCA;z4Aqn+WjDKF$AHZ#oh>BZQ@GCFn1}hI;szWM;7&LPg5Uu!KDNz(@=IG zM_GcU%jECu(aZGG%w;|VYdr5zL{&@?=zXlCl@8-REvBGcySO+WXadZ;ydL`4ZPe_A;#Ux2l7w;KYS!bBIe{elRSBri$BE{GTviM zixg%C$Q>ta{ zDp^;fv1xkWjrzY*X39;&B!4eu)UNX6wMkSF;AMY)8lWZP{i$l6Nz6Adu?$QL6sN2$ zo=g-VSpylALMy?j#?@oleUz)w)>?*xUtJ*8qpP(4XIc2$yGLu zPxoDXwE5_3?$ujV)Ug>16x-F}v?uEdV38Gu1e1+dcR*Z{`QUcrbJBZrKaU=-w}^@k zGI%?d**xdPYrXm++MK)Px!R;zcJ#22&vNSsIq>*)itL-~nb(K)$R6iK=tX*3HnNd#!NlbSm6;`lTEovj6ozr^5h5`e+}mmK zlaXm8Bc`OZ4ep27IcD7oPijKK$HEHJA?`hTxr=;s&i4Xs-eKWlo?f*~e3Oi_s9`L(}+_Aks%+l>4;Ry0UPf#fpm>D)ir+GMt=3jE**5;bgo2tx!g#gR!dW|Eay$VZnMdz)QsWH|u~V#J zk*3NMm``mQ4tLRauo{iWz{1N@&K`bf&MMW>{$mlGU3as%?{xNVDebPtx+g)-Y1x=F zi$gwidDX@x(e4@hFIQ6mbeN9>50`3_e8%x6!W4&N+oqnT(QI6%&yi?J_Uq`i$l?qWOjYLe%6HRCYcphA2QgUiW^gl_fs8A0+=DmQ}vf}d%N%O>SDEd z^)%zkZ#aRx4}p74a)_6g?=HKlomcPc@(O?CbG}gANM{|*w3#ZE@oHG-)Bb;)eRV)o z@4Buc0@8|rf`oynlu9Zsf+Eu0-Q6+32uKJ5(%ndR*9;|~bPq7V&<#Tj49pOB;oiT! z&)xf+d))WG=~?UhzPI1^dGIakO$lG@P2YurY2~n=l?vZ*tM$^-Q+|w)zkj<`$D#4i z@sLcZK}22RZG(5$Pna8z^*Y9j$asd*6roaZFj4bsgO#zy9rydr08_47?xR%&?^#Jj zPtU!WzPyWX0af21QXDC9ANRCWyVqmhrBtx~Yf_&a2M?I@{viI(IlFTOTvB7B!LMn# zRPO!nb2Yy`KK&rWj=^^&AdeobZ6IsS7wX9MZi@W8=Yx=WZyBd5>HRHWO;KI`4NkVy z2M70CZ60sk9?{jDlqI-MFArT?cM1t}aUXwsn%*iFDl8aU`}}R)ar|cZ+>;L!4iAOV z6>z$12D;$u_gt`XJnTXK4&A3ukv`F9;)Gs6Pl=QlhJ@?0!F`)lm$C9wb>Dj4fu0Fr z4g_{|2;;sz(+E#%chCMZ*kmZG=MAKf-Lm(nZc-|@!*gDS53s&@6qzf1wS-!NI?zC4 zr>W`9K&MBd$c?~qH(m7thFOn!FCgR+a`kVf$w^a+pU-9(3@x7JD z9KgQ~a+W8!HPg933?^xdTbQVg>KdsFOl2Gk5dAilFU7k^b~1MYwOCfrDF2$t=Bvq0)akf@R*dP%SzN!&kYjx)!qN-8W)@aNA7DA!q%1 zJ@i`tU8B!Vq8K#)LEi=2?@v0=1iXMTl z%NGs6$XF8JdXrX}tunj{&K{>SqTWjuo19}}@TwY)9z!^?lKf2;Wi>2<=kw7`2OQ6D zj(+))k?AmtZ)(Yx_Z;iw~#lfAPUz;Q)~4=RYcZ1$6ql1 zQe*r;6+(oU_AD>Nc=OT7sQ?mLJR63zZHhudlHBI{cBR-kNoUgaGrBa3s?5fwnl5U0 z8J}qJR}md<@-jAE)6b!FiwO_<%7vA87a+fLsH@H>0D3VeeZD|eO!AVE5(ZJM*`huJMzXA=lvm;Yt45IcF#^IzO;zJ~-xrgSUo_iCw5a>2cA zU)C9Za8AE%abYICnfKDI{}pYK2RDptKX8)YO5O#S=3tUEi@%_E84F{Ye77C)eV;F{ zYtmn~?#2^8F|AdLIC}e58Zuk+?w8Oy=a-6wQ9H|TbRJ6R=o8ce^)p-V31?YV`b~`c zI$GX7tQa=7uoYM(nwUGiu%juzE>?vh%n)a!{Xx}zYX0u!^wiC2TX(igv(<2pZJ*H8 zBq(!#}K9RCNK#%|!05qqQ4rVN?TK9}?M z_y}sr#)ftE)A>g>>7)gtau$qGY0qpMgVzRf6gjFmyFAC!6gb=xe)_s$@S%~t zTWqYReb_P!o5|iF8w<7!YC+roYQc-p15Vfd^rc)p#<4*LiZ(GdE+;52(+z02QMzBo zuI&*ouHI}@eRH;mglBysKjbDX7J(nL9ftVs+o@oS#95yN^=!LpcAM8K0KJtnFJ=}$ zj08Fq2#%y}?kuxdoPG3EW#33fZ3AK3T6xmy$VSK0nzp`pJbkCWZR_=syJG7BAT9Kl z)IjYzkGexIJbI9n!5u}XO+UKzU#cF8FenhU0>Ns%wJGf21~Z6?j7Kik|8k1G4O zHv05lg1Xt%?k)1j%XyN&PI$j3&aNE(9wD)!kFDX=2#!Kc828xe7YcR`O6buIl=Z9n z`s^mn@q9&;(x<~s?y_VB6_;4!nY5TKt3v92;fr{&F3%fxPkP=x2k8c^w&NVB1*~_R zmG^#(drk{9X<7bKOqc>qw7Ud3J>Vwm3SzNkaY^}_zgivC&H}^)YBPMszAxmE-Qbvc0M6NoQ&0efEXuEa?6=2bq3(PlG)~W$?PnbzL9F` z>_Zn@a*V^$1p%I z9{UFb$cO8A5%|5Osep+P1V{S_=hR+!oUT>@=?%*52?b%a$X1fIT6360D0F;HICDU* zQiZLX&+Qw)Y^rzkw9@TLB9`?=u}1Za&%>|tsz#MQNYBV71d{G?o)9drEbTkKg3lG^ zvV@c=S_h997v^E_IiEu9!_|L4c5@oj{E>H(4YU~O?_Hf=Tr0HQ1r4f89pvPgc*4_X_(LwR z6Mbmc^bmGi3zO^NH8=PxE<1ybvl$iA0De{@?bSLSA-Q z+r7g7DX@0yY&=gL)q(}^ALOg$V5{4`e(yp@oPw(jYOD?M&bD{_Z`0rX=*MAhMNp(! z^<^PJMT?ZK09QG)OJ_s8)DfcI@xcDyfjLCfZ`na^#4O7{vi&bpbIJ3#`zMC+iFjIR z=fiMwZnMF`>F6ZQW53F~_5pZdWq15#(x`=wsf8$w5sAuj`L{$X&RgT%u#y}{ z75kl@iO142S-pqtfyJ|AaqQYgL2iAx#b~2FqfU<0x9nI$ISCcY}X1(wR zd(*&NsaK7azCNhD&aeAMw+tpYx(Sm&re$x*vZIekQv;~?l@5>nM3aTheu`g?l^rw< zH196FyouRZ-5GE!Yr>i^%Tkq@u1k+X#qJZ0R;#l*ASWBsewhF*%qD8r8(ffp;{Ws= zJ?k9`Ojjn@Kf8h~TGj{Rs~uzK0} zF*7r=dTFe{nSZLn-H%B|*W9&%eZzjXjR_(ovunTK)V*A}pLd;b?0l+~ndYg!f0R8*`odOV*ALvG88DP<4@YskM+v8sF->v>)uv-no)I z$~jMtA3;KBVWr%_bhF#@eh+$rY&?Mu7|MqjYICmR>JJ^BjOamv0<4SKZ#U^)2R?hV$7;oi z`8=XR3xN>^P_Q6=E!xQ5fpJQjRcU;?mccct5MNQ7lj8by)f~Aa-(=8_#*xnw(#6-3 z$#SU9y_auWR_f(mdpFUui?VgO3l0jlrk7Nmo({&C!HiIB)^FD~NoB_WHHNZF7Rk_j z-BlSw{9oR&bGi9me=qB$>(#_5#joB~FNdiMEOCetT&N~)y{#o`| zG?Me69g-tpo)n>Ri|jeO2No`-9{C<(nfBxiJzM_*$^Oc=}ZQO7D+0`4YsH@R7|Zn z!R3@*rQ}`6RF8eRu@}2gvp4*>;4OK)d*$1s^8(ExxCptIrh35rPl0P2acQ{;fuh*K zba_KZ$O9bcM25i5)}duo;=(@77~gn3_WSU$GQ1He>*JN_of5nATj-I+4x;s!`^FY_i5*U)AGPVIE=!uy- zD!dybgv>kik330OkzUed%hpH;_H3olsXz4IkGHg8v`tkWD&6jAQ`BAgacJ)w9<{1W zKfuuYx!en`;(;uNxdjl!#TP2mA_v6Ln{&9lXaT8)Fc1NbhcTP_kFB0y$5iOPy@w{_ zi^J9FWN+k5y=b6u+$Ub2bR3k1iTET>l|hw5mF6C-3zncdD{^s?kBRG!W~( zi{d|t;=^oc!&oWFPkC%LQJ?68-X4Te$E&++Zek#VUq^956U7HFTbVVxoU`?_h_LA0 zC$!q|<@KW(YS>h;XM}XK==fxHRS^s8M71mN;aInGkRUk{kz^RlY!l_IXBMYZ-DmCM z!wxBKez!G|X#U92w|Zu8dhzIo>5%3?X^wM`7Sf>3=Ff@+rq_LxSz?n`ugWhyr=s?# z98%S_-Lt5&=uohg9LRI~=$H?;cAYleGt05v9M7V@M2q<9`z|ALs-F(tt3Cfk9{tnQ zhL4VKwW$@gMlnDGhRxa)VolOEoBI;=C&Sh|8=a7ny9(F+_;R_yYf!Y$yO7(fJMh*0 zvXvg9o!y&pnqlh6F^5z5Q$f1~G~W4MI=e4ju-a%4L`78Dk2O$G{AkCFkt!f}v7$z~ zCoVqllPO|IRok|t5x=B<$HaFv2LS0;NP}MM>nl{P-%(AzI28Ikxf|_{@C#2md|cz} z|9wUB_QOwPGwPGv^FoA5`B|)%6r%$!G3ex%w31~OQdS) zEuy;ieTf1=Kk|bBSYV)=^d2Y|?Si{)Wn>i13X zFp2?7#@BVv6DMMANDJnbap!vZ;D-bkNu}s=+!3GEW3a873;Rm2qBSAu=G%+BOr#@Z zdw<-tt)7$*sOK2lTqfwkuSU#X!kG{pjxsVw*Mh=lr>SWya}KEN7BGArUHJzN8z+8f z`YJE%6l!Y8)^#Z*&ZS0O^Y{Jm2(OTbby;e+Y3ql-r5`cI}v!K3Q|3CmPT2h;q#_ncsi8qp_h6f$Gi+!+1$-o zbyM{`oxbK8@39AQj8&FtcWB&vEUBJD?kW2{8#%B&Vu2Ey zMkv21`E*vZ?fr7&KnJzEFCWCF>g6>QNOiV2Ie*GTw$i%B|g%nmk`eM}Kpuz9i`xt8-ci%~VdsisETJV2K zYK|H*6QDG{rVY$Z_A zI%O}cm5%93sOf#>@cEW&qkzD8p(=u0zkw)w?z&m@;}31`kR3#;amP-p1K62q>b6+^ z9rte=`{mAJr}cgTgW}ZT=`=&!q0L1_9|a{N<^{Lx_q*~Hd!3Ho^Lg|-qkvPMW10s3 zqH_!@bXqKS-5*W&PqlX@vsjVIz1C1m7u_Y3hbQlVPW760Jp_66ZBSC#YMx=zqy$0g zn~#L-#GVx9+^p$2eeO663D<62C6=vk82efx9ximw8}dmTv18=MDN9yJgu`EMM+Q@& z-V$}10Wt$e4O_S9#e%Y%!dodOfwAgJwfC+kl&X8~>cVYf1=@i-wCE?Y+`5Q7&fW8* z%o|+aM5&Kj+{UVT?}9H|!g@Ieafnv>ctSomfcU|4CF(sJ*O{MH;LUh+0aXQB^os9^ zWA9lo;k}78tHcv02hcIS{DtYbgoMD4Lsx4$%5r5#TJtFK>X&r4{KwH-WI93kLyXr znw7%>ejx$c76E|&tru|EVk51`yE`pF~6)1)UheV5wc8 zVfcOAP6ys($e}grbTD}kmD$HL{cK0q1&C`;&f$uFmL-*tl!ALs=IJSgi2x42s|_z? zp};9fx7mh-ii+rmDRP{RmaUmruWYTj7Ge0bmI7^Ojv)Hmi0rGA5-T6ifYR(-`mD!n z4?~+vw(QYE)Pndmc$E`JsisAKg12fIjy8L9!%R8g%-S2%ptPM2DIRJFSYe>b_jebQ z?c|#UADhqJ3U3O;yL@$U+*jtBX~$*>G<1xTeXng6N_$hFIs~K+v=S&woi_r82YZr+ zFOhHH4BH=LxG1;MDvyS9s@Lh4F~-4`-z3S23@`R}M1o6<>FxzPo^~}}J4WA+D>w?g zF^Y=&L@`TTLJg}$4Qj%I{{6|*Pi^DhT!b8Ut~=!=Qq~74 zX?;;?;{xs6u)s2)Q6(*YeITHPm!dhnE6pRdAo)BUo*@41*pF{*V$bllB6H_-PQPnE zlJmv_G*SbYG4+Kd(C3PmAIEzNgY-I-Qu6f%3_7M*-}~l1FrMH+qtyYvmgNoQ9zYhf z+og)2iUc69G3%Wz-F$1T%xIbZLjb73HU$2$oxQ%dh>ZLQMQ6wUy^Ok(k)1i`MHl|h z;R*Yr4ZedohV|hdiKI!bPJ?kN4hHFU^Zd?tuG(u~o=V?Ouj2Ha-X1IuDZhaeuzG$% z2-{S;1nR|jhLMLx$BDWf9Uc#uvx4rc;FU&DYjI7J2dT_Eep1!&JXOJKeTI9#LHZoS z;<5E>wbyZ{wN3ssqr}9NAtxy4$*{1IA>ul?cP~DbYPOV7$w!p@tbNor)GqxDU(_Ug z_Kf%@VK*Mf0GaU7*ZYZ`w;K=Dd$)ALVa3{#dGF4rfW`-64xjho4NkP6MSnF$0N=om zd81m`ARGXqVsxWW&Y8ODw&eRsrx^;}D4uE-h?S`(5sw+m#~_t71y|9!`KCyy3CN%4 z`oI-8SBXaYc627q9l6nJ%t81h>)ehZVe9=zUKk_?jXQw&!sG@k=^G%2r1<`<7{#9hvsSwYbpabMq^RkZfi}xpyP~!`@Q(Kz*!ek zX;5py9bPCa>`3?Et{Zv3fM-ySmvF+Ik4tNsBZ=(y0+LQnv)$|MUwuRZIXTsubP?nP zh1)-^`ipdX1yYEUpL$hxgq(BX<<3o0QWLQAmehK@RJ7u;(lRAA5=E>;FsCsQ-;

%6ZO3qPEw$;#irG#s(G;cg%we`yh2n(f2nL=Cpl8_R z(jb*4GPyt=@=1*(XVyRva_gH?u5XXc&xVJP+AhMKOC=g!8E)S3PQ!+DM6@IuTj z$Ma2+Z~lPl_R&Z*)|e=qhJ7r6GbX=wF15ZnRHEhd31O_YpsD+0&e;XCq>VfDgt!f6 zdJd1So)d)j%if%_`q(hw!Y8UWUu@hnBue>1dXUfXhG*cdy)Z_PEMWh z5^XgX-DNuuIQN#iYj5#*f~3>U66{`V@60=f=9Nj(`!hfoKXlS=c!M6K?@SvojE~SY zbHhl()1(d!+n;dtzJB5b?f&a+i+$DVfq^xe{fJ-55jm*|d_Ar!n}^} zkZ)i4eq*pWww|slRZeJqap=?ccocRR*u$RQ?f<5t6aD$qS=@Q#(j)ADfo_~* zWiA84NR0W^?Vi!`<3XbEXmZx|Od`+ev&%tlFUw(d@#_mE0DMr%UWBUf3xdb<%O7rh z8mnOnS*h$AthcECA!UcCYkd~vQ%B4&IzQB}y>yvVsj%BL`x3_M*eT29-2F(5yukDm zS$h0A3Yg)^JV`_=35F7y-V=CF(FHD02{kq{x?OEC6PCzhZ4Us}HMXS5< zI-c0<Iw|)1O3Hj02#!@43}1T zjWz!rbmlD{(R&*`at!xZBvOV+oK>2k#Q?d;xqmd; zLuyYprOUM6QS*zU8C92q5h4H|&nD4Zv+TDCez7bK8DM;H@fkV4FqK^@R9%Jt#ISOO zjW~lz;QHo3h_j{YT|c*A5Ha(}qL2tE_oETbt(uF z86@!lAWSl;C?=*KjRGe5boSw^b?yiflY!k`Lfu9eeN8tm-nbm^i_rBGGVB6P4RY|; zok!P7&kI63>qX^=$xz0|rf(3eo4fjka-aJd!|-u4boEVX$4g9Z?rQWrCY}{JEAD`a z?wuXRt&7h(#(o4CB9xLAlrHifARVW#?YwcXVgYalIWgHA>hUd{9@#ncPp&&(xQc6I zg5ave9>b>MBBXAynNY}48n}#6xYaaAMvH;@gwI)rZ+%z@%u~sC%S(J_&K;_Wp6$GH zLx3VC19E=c?z%=!-U%^U`-kd${^b#SiMz>~P2uFL!1qx-M9;Pl}{cL@d2KC^_wEH`|(!gqg_OE@$b1xhY@!qoXmneq&J4|u07bO-i=3a-I)2Pe zwc@f0EBZldhr*55fU%e7xKQM|B?;Q6xcS=J`h_>bV5$}!L@yq}?VAsjwdfxpQdry0 z(ThiIlfxB4kumQWAQiK_TZM#v4k#eS9}sFILpMoVxvxOHk_IXFnafwJHGHLlT<>xy zuFPLEXJY-QUvu?u3H9B$Pj0BgxajPE_GS00;V=_v3FlC`-BdmXITWg}Km52C`qVwC zTvf!?FV7gC$oGDbK>W^rQ${Yo|I6f~B8?VBy|_-oD)ZVIaYqkms=+O!aM42srUyd@ zswb@@gPWz$_hOS$)~o$90zV+{@yq9v)j7?uE`{%iV!ECdPczHZm4r|2K;I_hcygxJ zbXaG$im}%OsVQp^+>K>Z|M?(LeM`Mhxb&HYE_(Sj)#Mx*6&1Zrko~T{4DZJmwi-;b zslfQ}@Fi%*b!yVwCr2LN;|&;+$#5H*D@`Tbw3SuT$CQ7pJHzsLpJmj1J|>@i7U+=j zIbMxd3k`&T6awUA0LrOjR6j!mU#;t`r+@AP=ogJjIq@$_qoj4I2r&Q9gKv%;;X10G zW8zC+%%wsqNLU?w%V<&~oaf`G$Q}e=0{uJ?w9T|}%kWsN1`l<#ODJ^pYqLFg6GIlZ zcOZ)xq32kLlS?g7pL|?PHunsg_r1ShF8k0h+?y@9f!fI@O&e}6P%4KK0Pr?$fHN}K zZ{l?aZ92q5%K8oO4+3q^g2Bac(j1kkYSSh2&{9QS0OZ@e(vYOS zJ2R2R@M+ba1{8Y{CP>oG?od+<$*)UXGbFgnp|u;R{qi9x%z`ka zSyAC=n7+UOV14;>C>z zK4mwp7b#V>O-X|k+*^oN(gc2z=ujh}7dI)b-5=kt;DhDntqSk^<&FV}2At=NC^F-# z-rhQ?9gf0NrehL@4D90bZ?Fi!m%?RGe)QX$BEy6Lv24!J7WWLqHhe$RmS%w7yE#o@ zs7*UXN?wY&?v;A!T>T+fpk?W_m3rukO$e%0aKkhA0!4?$jt>I!^_;S@;IPC9al9hu zAx+(n&D29GRL0A{MiHyfSp=*!?ltw|-MKjslAYdZ5GrQ+5Hu=p+bnN2T^4|7lqfJ5 zG&y2N_H<(>HwQq3-q$|;^acP76Omr3+MujGEb(mA2M`(mp3d6a-!qA@@h`5%y3V+8 znYFWeoJ~PZySC~bF|_%;H?o`C@fcg;*&1)8HjBlIx_}7_Pxf$#iRJiV;6qPI&G;&u3e?C z`}FU-GZGXj%nlc>(XSfTG90;|#tNH{h8CMm#0coUc<}R~x(Oa)VC&3v1-(ZPM+FU+ zNeB^n%Vvfaj;v)+d%TsW6boYY|MG9kVYTp)5kv3!qN=6rm{)r&RnnFa@eJ!ar5Q&VtlIr6+U#hF5&BYAWX_n!ICbyRptUsCP!F{Z@e6RL+&acmLa zbDkBP`+zmgG1?{Om0H+3=P0^w0GC{k0>y@Uv%c4d8(b|D(@M$Ka?KehVi*r~J>R_Z z4Z$z00uQrFvU9KR_>BlZuq;b&aybiib(?=&+>{O8`Z_*5JlvP{7M@rpBdFP@aM6+& ze4r|`*coX{pQOVqI3rY{U5M)3f44h$INr5a!!_m@61sg_@2ChB7K>xR=%A$!R@{#& zRV;*bX?ADy&gJN2N4&nl1z@LDWk)Qr9J~?@44L?SNr@k<#Y&sTHG9FOjRkFsZM5|? zPHTJVHtIRUbCKUeZjnxl!*8dQ1~_ddo>iK)`sU5InvFD`ANH>r_d0ObskZPx z69^2LovG7Y^z0Fr8{QT3CvOD-qh z2C6`nq-SVsJ4(P!qQqcj_{`2YX`rR8Y-2fNQMCiBQcSpX8glKbh~PV2*TdymgUXL} zHO``%6cyZ$S-t|0pDRri2y}4o$20Fp=1>~m7qCwX>P>nXthzTr#*(!!LmeD?(MepB zMmBO!IE;#5OE`|~gCdnezeN1af`jYpkFByP>M^esBydv;_47e|nm*P81>CF~p`k@j_t%xKnQvCN@anAz~+ z(MDAFw!)^77C12>DI&4f>S%GrU>&F(fl!iR8 zfvUWU7Y#A6lwdGAwzlbQz}Tpztw7qm(pls4yNHZPdm*VMME93_EZo+Ky+vFUyH*b- zNjQyc<~PbL8e(QrF(y!&qp=U=EYfbym~2W>N+Xs;@IjN6IsDbTacb+xgecWSOApTr zlRUHYF?~0i5RVFNQ8D>K?!pjbX#P>7r@7|^+xyzAit*Rs0k0BGGm#&VY$1&Iwl%-L*NY{qtBSyi&PR+)_ycM$b&BgVXfqVnjX8|C)}yg) zHUL3aE^d?t?lkr&rKPMwaN1u{}-VfDw$VRP)Vxo$}jAQ9}&2V0lZAeq>%i~^0zc)~p-o*PIuei)462=;k}nr7)Dp^+*pvsz4`eH4kghpvMo6D&b5Eg-2O#3roch& z#$&$`x5y^S@G4K3>u+>qkx##AH$z8Xv^JTI@kZ6NuJ~WUsa6zW;1=?pR-4RMwQcm7 zoIG6q)=X#KcsR7-yfJzMz6&tR{W=&Bx;dUkUoFPitZZp3)_HagR9d=fm|E)f;Zq1J zHh_9eE(*8v;)M#Sx>xiPS9f_~F(oKmXy*~UST=7k3HAn_Jn6r`7l{0PRHA~k+;mZ9 zF;W32&N5dJR|Up)A)dHqjj+R1HIJ#l|>5Myg6PJG?fP-_(T- z{+frG{%SwTp4kib%RdxRCY*MK_3f`7+v|sXy}f^CjzaHGw4){M_d3h=3N^zo4@+Od zq3C~mSbp1(Voc@@D>3`1P?)B}>=8{wlwxK?eFb;HQ~@WCb1-M65Ypwi}V!kuT2 z&yJ>5s~lu)4yYovIW#};SVxN!QFkZ5@_%WFaZ2FR_f%u#i&%akeMqU+U=)#^oBJ#J zX;dNdLxqX*(o7W9_VeSv zQP-tM{x+LdB})PZiA|z@m`MHeYn*@GB9Ya!8mlFY>bu8_<^JaM^cK>z*Ulg67nRXI zK(lkvPT^0?-#J(RzE1y_N&d%c-yD3nEyuGx@3LMV-JnO`sPauKu;$#lZ=kza-_~ zZu?)}(1VlbMW)-%G&t9iNY~uD+~D*n0^nD88ht7MkRJC^YvBIAm{c965XoxcK)Tuhv$;bZ#Tj0N33h=as&F7iq9MD|J6f#+JbWbznav|kPfZuU&zZ3M2RsCPN zX}Lu{;o6W)NEZFO;QfQB_P^gSKu0pmT^B|4!Bd}Ue*OLT(ztba%29N!7XRB<|9O2P zI5^7WC~3Xoc-()}UH{vTT=B8iV(bvrRg{b{2!N4 z%q`r%0!9D9$oju-2f--0&uu)f&@1%?G!A#l5-)WV8`YeKQiv;i(jPLx0$Wu#%-=!qVezMl6{^K<5Z>uFzO_f2y)YAQLp{y7D14OB!&C-rpk^x!*yC$@hG z)9sPsfYu$V26F>)RR<_>CFYW+ckcc_577U;U=tXer$iW=Gif3nzvSfPIePmhc$In7 zZA!|H7vhKX)jAN5$byuPjV5V%tjN#uWwwLC zXHu_Sw#-!5*RsN6B`KJ@Ihs!uQdAU!_r!gCWPEhQ!8uN|6_ix;QO!cFN_s9C6(8%FXV zO~|dxs`>250lQsmJEnY(-=%1)25vL^x(VCQujA^x?zXX>YaL@$E2MmP)}?2O@;}&= z%PWjz5y9c9PvthS>FDT~^-$>o=-(Z33~Ogx<19<+I}wH5jmV}&Qup)vRU_2eki+4a zs+7LIeoU#DI8kqR_brn5jcLK1rhNaQs4IbetTO=w?R>@M415M+I4uy|8I|SJY)*BC z(k}0H(L35gVBD54kD2O>b_NvN)2EXKNlx3+z2bz^>unv-@ObH Ch54B- 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±&LUSl~fz-a$l~! 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�hrn!yCt(fL9f(ya3H=W3A?=et9x^IrRwj`*0t zMY-{woA7e|D8Oc#=rgE6<)Cc_Ko8ES1%?&r#mN)EffZk8WlJZrC^Nr~SBYjjZadW02dUy1*UM&-|1%-=`luW{Zz zZEKRC@&QwdWF*pqf`s%?+L_Nsy3-4(Z6i}qFGPRmWYYJ+KaWn;v@WjtCQN_jDWWd04kr!i&@?$?$rQ;~DhcPrpoM~!(pX=S*@{;j&{(O8=s}vN zrKY1(Xly*ViGY=7k+05cC1p@C4Ha%G))W*=X>%IQ!x|MbOkK-RwtR?skjts-6_@6^ zEwMe;*z$ZAqT$5PF9j*N?wXr#hE=tXUIG3Xkkb0Ozp+tRv!S-uJ(LxYEGsRocs|mz zdd50WftrHuH51}j8HPrt;Iw5?lQeN?p4dF;oQ2Am4)hTwaRP#SEIwkm$;AYC2sNWSrxxVL4jnGe*49+D)ClEdh`x@L)Q1HbXW#{%C7s zXF$hMp<|Zh!R4`8!2Hn~gurpATIJCr`2=pngC)NoKIvxE3QPJLpt^O((2c|uOJcSJNd?~=z?_w|IEPbJ6bR6cG+`)3=b6{|DL&+(F&^b0>ESud(t zgTz%n`&2CZH6(6@T2?cKU&9?e4l%mAHaTCVFz5L-5f;{a+gGKN&2FXdGnh(Yrbjr> z&*yoyqX~hs3WV>;Fxf_yQ`GQqPtxN2n`fCX7#Q?$jvGf)YiGGhq4ua@V;m) z9PSe?iYJjI#mC17NfPb$`d2p1*So1%GNIxEL>d%~VKwZQDEJ<)69^rj)i1vg=|R-F zR~K-~a%YUBkR>BahwFi0Op;wMZA7ut(x^gyQiOK;o<2whR+OS;nXIT+^^rL&`GDLO z&(w11RSS_azcuvLbd4jnt-|se4(XX^fT2T5ro2(rSRA0l$GM0L^nWugQe^pY5(~Nrd1*v#1-+GlAia zJ3l`BW)S?n(eoCHMcoK{M=6O_8|YjG>3*s4hA+YST`mi4K2Dl$(RaoJ-@Bt1$%J4e z!lCzT&1l_q)^}L{RMg6XP(n!Jph+Q zgFl5%g%!~Qa0qKEf88^dcVhS^fLkSXfxX0s;c7 zi;F^*q;9bs)>CFR2`T;OKpS}9bl7v*bZ#k9&yyf+Kng^R34B0wmx@96S64+mU?-WR zo+*ZGIKOYt-xo)OnDO38)@Bjrr;KriHFa(zNItZw$m*q)aA1Al;(?3(%iVN8zK^k2 zyc;RvJ~xI3W;{MkEFJlseKmLsq`P1VP8T6B*m+y4`nuzSi>$;6)V`*3TFhqu6hQf? zTC6ClGp>4lLoe^$(gK8AH^|ji`4#WquFt}8=^}HxznkTc7M|Z@|0tghzJ8S@6DF`JMGPi^(V8l>l8D>E@D-7YE*sc)Z%@>M7zA6vyJCOs*S1) z)dK*T%!r?vIS6PSHcYLYqw{Gu6PNM7nfeCkha{;Un_V8Q^%2TwO2*Q>AC88FP|KyN zavt?h=xsxDD?XfAv*tONVgkJ|eK4XYi%g`Fk+s9*jEv!6_&Tp<`G>e+5t-+liaUA# zyqNzzIsF&AHi)JzWuG}1>tKoPGQ}&;-la@uo{(wY^+y@I=$@X*r7L7Y$8u?hMKArg zMMLrVfV&Ayy*<$u%vCzlC#?5;GBqjWaAJve$+S|G`YuM$ZTyj)ZBKV*p>!94`bK}E zC{cDVB_Cf3kYmS=;iYGZ;^|QyGnstSY54Rl>6;qwW)>!O_vJ=kn#6+Fd3A#s(4jHr zTCB;w1>l6L34mCR!&+ZCNHUHB<0-%0NnVAdz(TW|nvT_tp0RFqTR?BsR*QT?ozXpf z3@|bGhp$D1H`dp6=MMLafZR)=(ejEHXnpAsyFV6DYc2(eXQXgi3^bLHlvGVl+lFUr zPN*s>vfMsf6Vk}q`v}``@VNerNh=_rD+?)2UW351>sxNcfLT0GJz%G5RhBzc%NbSx zzyGx4(%j$OV!CYn;Benr|dClQsD z-TZI^ih6nD#tM?(sjtl~g1g7s&MQ6Z%Z5T6Fv+oFV(Gx|^Xw;7-Y{*OqvL5vEmg|E zgq+q`hkR8r0HD)br7DmfQKSIZPoDs^-)qDNF>tf2J5Ouhr(v|pR0)WUVq$>?<2wRe zOD=Gogn*(lOz83Cp} z8xjf%!awm&S2z+LdRBSX;Q~4;Dtj$1$EwS__0x8M;HTNd8S|8Kq48saPYniLveV@& zq|=SoEj5MjQxU%bg78vAANv535bSjCEr7LzgcA!2OGpG!6j~UV%{AcKiW!24_+6zR zXROym2wqBaal{i?ao;-|5Ix?y2#T>2ei|2=^y|9{POq1gQ2{oXhcT1~XGLS(mG8d=4NCFt|NtZVIW{QwD2uZ%>p)@L3rR z?k;TnZzJ5nhc9D@Q{`|UMn_}k$4eOtu*;#i6>Oxu;T(zHbf62&GR+)xVAcQaH!A4# z<+hZ^$R)H*M!H9YNtd12xn;BybiVv!-@V~<>W{*|R$g%=Gt2NRVnFAZNCpJYi>94Q zgINM#rd_tL&1@NoUh=3TnZTL7!XK46I68s?Nv&u}HSsYhh{=m$Uo}rV#&4%wI&YRK zuvuG)iRoiJ^URhpzkE&H-Zl<&%@v!&e+J$v=yw9tEKai4bYww(`H4V$s9v4Wir__e z(M`mIkj*I*vEG&CI2B*t)fa$Rh>Q=I&$zoRicP8MjO2;%fOc=(aaJ0CdNk&g{*fRC zg69%Q&7s(0qIQ8yv(^~b7U+&_<*<;~6L28z{2ui}d@Dvykkc|Jk=10#c|kUI51>HX zu819BJ$?EH5Y$nIS4YPs355;WY;*`?`%GJ(>B4_Vi`*gQBHPo;51qDU5%x|HGzYO;N@J53V zKL^jWr(*?W_j22{Y8aPUduJi?Z>C5e2Aw(3_G^3w{l)`ZZ_sQmtSDhGU4RQ)R3nm` z6SPy#f9ObX$HV|Ys_yH(%CAJsC|l#!lgh^FKnuA|)J_f3Ydcbm%{3DvBBtXDU+v+M z%G(W*f{Xj6=G+VwJBkC6%ui~VzR;s&XIB}Q?xMdr`#C3` z$|ERjNn%Moa04V`5)pjkX`0oZq2on5)U4w49-To7h1!=u3j%?*$MHBrrTveYl{28V zh!O)q{8!=!05N|blgoHlirJ0NS5kx+Mz2>&h(~?OORB7c71&d#;0c?i_&ohhg{fd_ zofzsp3tDbS5>e?qjVrB`T-ssM3%qm%Vhc+T8x7^3oJL+?)#9H+)hjl z;#D{bxipx zkl8TZhbnpsQj(DgVPIkiI17%f!qmaC8GpY$z%7bw5_WgQavv`dd8%UT6blKK%0v}F zmz4zZOUN!e9YJGh-gy4jN+2^wV2l-0A!cE@w2QQUC=>gb%9eJL6xh9( zf}WXMgV*jP0JygLI;}%jW<_IYyFkuLQ-gkhSqpSD&hTZJ#`N7YhhCc(+mz9oxb@2} zwax<4L_Ok8Kd7mwdKQ;=L&w6G4Ag5q{oFs!R4Q(GaC=^Vb~iLi8BQ38Vrcnnb2iiT z3TQ6?rSUgFWPSwSTR$UiOfu3e(FCELZePYWXoV!aQrZ!V14PEK1b-LZ{`QOli(n}3 z?bpW$;vSjrP`0a<1ED3&^fZ3auS%kz>7NrwbQfve@4>-ui2M1K$>-w~H%I8*;g3v5 zNU5wX(m@-umCkmBn&Oa^luk>7o2?JUio0gTWet+ie2=(>hm@BV(Hu1aw$+R zMTj*JgBC0s%B5kfFIjMkMDC{{@$%4?w73(C-7SjzEK*--Xs1l;>ZkLdqGlzLvi;)$ z{=$+a4(K{$kA|CRuvU&~E<5D`7td8q$z$|RDeuZha#yA-&3x;k1bsW(+mc~~oY9y{ zL6P)o9~U#e<@BrH9j8Bj#J_~b|LtWYJ%a7lnFCujlENDVei~m7NQl0ky^}{dJZjyK}h9jd{)S#GD{yso+qePS4}cY zk)m!wiqBot>EsAw3un<#T=y)z!=uWdDJG>S!O#8j4v_hUbag7ULTj}%WLkKxE-&X3 z2IN9WD|q0b`NpD>uHH;~o7F)9g1$sDII3o)F|h}HO+->slCA+I^hKpc2B0l-(tf@m z-`Of;XJ@C_1pz57{@(zZ=v`2HkDFY(`OGyXDQ_BNYs2kEzr`jhgs$30G+XT%D$hn zzlbM2!mQcjryb!gzvHcB*gTvJD&@+K$wFOaASa>h%&PK3{fVm=O7nhcI`L&ms#>&? zsa~dE->TLVUw3X>;=9=1=lY3|*uu4Z7l$JPX0_|*<>h4uOF(%KT^mgF24E$`J+q?t znyFfx1eDduXULI$yD%D51dl6z8K9>mzOlk&Lhxjw7xdtLEn2^T`$dmP1-1smaA(3N zFnrsfLF@AZQ8~7?Vl%T7QQX-{bX#@^{OjAU2x3OIje@+Nd4S%T>sDNC_s~#ObWF?^ z%vvC8^6Rt8_O;`Q(;yP%N>ySP43|VmI{NzH(2KzCahE+pVr3ii34H_#nxgH#lgY)_Xzpr$lTq z#>HhM1IMFYVIL|PE&1~_55vsZ1H$)gTY*7S0Biz>GZuMGtap^J@Fedgq!D!s4_h~} zrtwL-bf1f?_a{o2$fnk{NH9M~c<|2K4;l_?P_%gSlwDdX^Z8Ny@%j`M_m{9rc)a*$ zvHLu3leoa{kfDo&Fo~zg$Y!-mK!Ip0G1|dp1pO$@VBzk%u7=<94C^CS>q~lYAL-Kg ze&I9cwTYfKzrf(~dl*3Hc^#<_AOj@t7a&u?C)!c0b<(om(s#u5h=v4#Qd=@l80_BB zuT_=F?!|ylATSb)B7{K%0$NyNMUh}U+{VWH13vlavpA01<1zO$n+&d(HVyW8$Odcg zrGUg|Y7&IOP4w<4L4h-TV&=D+-)2|^^xlex<`j&XZBDziwUMtlnnU=E{f2-C#X-G) z%{P!ZviS372~dy?Wzeh<&aj3Ku5Z7BE}v_xLFi?}q4f<6(rJyrHF&w zhhk7|Oc<1hYI87E&xRlTlz{rJ($oALrQo^;&HQmV`) zpy?j93{Z=^5kr5o8v$-%a!M=}i^#KE3dqhseVmZh!vlu#y~@LYq~t~|tG%b|3)RcT*TU0=UuYouysEwiD zk?gWc-&HsB#f$#4?Dtv50AXMGa9@D!BFN zXIQ+-uOD!s?&YA0g~-}wKumj-*(rnQxB;nPu#>W;yTB3+SUUXo68}J;UAE7kS#Aaa z=u1P&2k{Lh9U8X&py;U1iD!?Bfvlk%r@K;U0U*iddseapbT|DAs~d;yKE|?$k2j?c zU|==DhW8zJr&EVJ%#BWajp7^df}PaVI13aC!y8JQLWT6=R>1TVrFvPZyfum=#+btl zhxaG+=o9A8Q@$?3A6%p$At`4|3ae~h1MPgy`;3(megGZ!1*6Vk&uVYTleeA_SU z)!SNDv^zRST^QwatvuMf=jYqVCjd_I^uRHnpu(+XWD8Qcdk@9-Bq;fsqN4x-ZjUhm zxpoENlD1U6e~(qs+53;h)D0! zMGU=%9s&poDosUt6$B(e=%ECNhyv0=F9{(i(o+yf0)!;z-g`gKJHGcD=lsdYpJa?X zxz@GTnsctX2H8U3l9#coAr!18kipAxek!@)#hH15b+T3t+f<%opMVy=-vF2sy*#WW zGn_E3c;|-H{n@AahsO;Q&}sXm)E}5jX>CHU)U+MsL!hbwe46N?Uq3~KkFlkm${e_O z5-2GxqS0sHiN}Pee!JqJMlLNeYv|>^@a|FIm5Jww*Pddo8`{y;77r=`G4Y%7za_^A z=9c(`&%As3L`MDYrpkXtVg4@N_zzvmkRFv8yT16nv?l4PsNe4m&0m22)a&%)CYNh} z4wuXy^Si~M)JN8~Y8^b7HckcR?6LtLl}ENqCSsaE&vL`>&`wysT-op8&h~FSz&DFh zI5toZ$(akwTIA-ZmN<^DUlG8D^GI(-wAzZb9UJjIh{kfX+vnK*%DT48u=;Z1yFqm9 z_`R{b8}bvcbG1cttOB^gX39)&qT~bW^~78sT{+FryG*t^dlL4K@X>gjgZR+yr0%zE z)A!8}x=V0om7(`bl#S0SznOQ8pnm*}KI9j1D*6laFF?giNjo00it_I%hZG#Ru+fhi z%!*L%&6xVXh-0|2qjOL>t$MDQe9QkQDEZ~w!IKUsO~cE!C8<*Q5zhZ_x#{w^(z)Mu zDSB?zG4D3+FZuszIiANze`)f9Kn9P|xX}KwK0Wts@n8{0$4yDnHO75Ha(YvVoX|V~ zH3OIU6%j{`%^M`$+q0AjSSG&nCa?Jf>f1NsWW>%ru>{ARhp}{L-TO_JQV7DNv8E-R zjE80i3#nu;1-A(*dCTj0r^TmUH>g?1!0kBSO*-O`Bm=-oQop#{U=&Mfu~I_$q;bpP z_IUHExdj!c!)%|HV%Ll^Wb~>n<-L!DMXZhn@tBnb=gspAD*DJnmIvN2gDxp@3n{P?#DD`~y*uMH^37P_;DcYmR?u0^uM+H0& zyfp3J*WlaV0Gnu>z>_Dc;z!i$J_;?FqKJ(Y6w2m zbY~_7v)`7x<&ekA^@f#k>INWSP<<+pJgcx0!i=K^YkHSTN1!!$?d8;$l8;4rB%+KKToSE)?{EN zt8m!>^Z0no(1qC=6kH$=+UZBKz^eIH%l<`>43Iuv1>A#L4Hgx ztANBju^z~Ga+#(+UN+H9kH`p{Z5C8=f7%*C5W9ncTQ%j|_he*o(Aqv0@rVCPHzQ#i zV;~=agPwIJ=M5<}MdMbScX^Xx!7Z5F+o0zBH#s7W5XPGo z<)n2DAM8X`-Fl{AWGUue6SdjXA*tAUY^ij)gOMFfQq82kr+S})hY6AbLFCWPZSB)I0U~bc39b??x?0U{h?Y*tfEWoeSE2YuXTO*YikeRg=Wqb+;IW*QYzvrXezB z6%Cd(QNdkftgnQ*3~B49meY^`u0zK}qYwP|#Tb8RLSV%fFW0kk>h6JqM}U{-pN>ek z?$|2csSmr=oTd2WcPE4LLuJL+F|6Hv_Ot&m=ED!(fh#xFMWN9E?>SMqOMsuzNym;kOf*{bb43BE~-BsLzA2zPoq9Jw+Z%%-1=xpLaf? z&Tj#_sMD%yN^`u1Y7-abH{Q-y2(Rsbr4<;BXl?pNE_(>tjVUl)gVimzjn}ipL=Bu8l5&n|RqVeY$X+?pap*q++p zJ^4kkZEI=$dii2lxAk&XJB=)SBJ$gY%)oJs`f7@}+oY^;AlAB+t;s0}I`vv2{1trz zP3{-?R7xmNTM0A^(J6Ebyu)Q2vG+QDP(^V3gHg*i&MN!5;;@>{kUFKPCN1Vy(YhG?hWonzGB;RYd4%e5u~P;#)wGSjp44YxtwZU6JAJDxhiDkl8B@k8*Ig_0Zd zTQSdfpW|iu{z&DWw^xcZxY1GDov0;}lH+moGOlnwv%k7^?&w!Vea7mg_%xWkcWj^;Wf+{Gg5zgHZh~h+-0Wa=h~&kU491vp9BQ+ zxhgG+>xJN-#pR_E{sO5cp7B;TNdgh1aa)5iQl(ixiShyU#c+I0M*b8fwPR!u6iSlb0`@Se)#}oNtyqMMiQ=Uw~Oc!i(!`C+$y@fZEq3t%8o;I>*7TI(d}Yi`6^*6p583o$Iq8Gbm+AF!{M z>3;UlMGtJa@jX_?E}*j~K43*-k9YW6x4@7tZuQ*b`_-_p)#K2i^HL+QU?k+SMyMVx zBbm*$`AR}1gW)^5r@zbunUjiHm_9!hD}+o&U6Z9CP|Dej?=%y>T5ug$r;viuGtHQ zYAuCZo*WAHdsP*Q4&mDgsM4{P6+qn1chQVV_CT!IT~#5a+4mGJq(oK|k;3gu6YA_Y zo<7GgCCoqWEuh^U^w?zWTJv0jut-Bb!EcOInhbO5O$)+LrJ;h)hxYzldckY-BhVNbb)xxiSFkJ4riN6Hfd~ zOwhY&qzH1G9idOZSI5!1M&}x!VhmWpbdjgkP$+#4lj~Y-VYiE~W-HM+UL7WNJbMdD zF|kHR=Iv5tqRz>CwgzfwYA?%1?F`DqEL}}@?ZHtudW%zxY?tCMhCjQtzf03@ikgO; z7LqHvh70lrH{n;Be|1nQ!>ZjhD%=fzbv&L`tFR9&fDk|-Sz{znd2>+s@Tx1POe<)2 zTC0}+s;H|E%uf3TDwII9cCNG;E=f{E+Um0s23*Wh5HSU0)D3HAmmXNYV zDlR+t=@M(=BKDnj%I&iQ}`(s)9a53JC_OfHzwPxf|(Dl-SRVh%LwYj*6tJLKuZWEsgFUH*2m`Aa(0 ztL9ILZ~K*FUcC*%p2L0c&rdwT+0vg*s4y!VL>)o;uaE9tcdyU6d3(w(O7DRdhh)C| z$_Yqcx$9Y3RqLqYpvAo$UyQ)-ih~!!w*8luY$M&8b_W=R`d6^*FRWnLex%ozOooAT z&dhEp1@A=Dn7=zEPTQJZFp@3H4R-0K+C10B=A(L!^tT?oUQ2ACv``ruH~D|BcYidh zD(3n+qHZyyS^;Pcs@6!4XR?;2B|8uohnpgdU#^#8m^4bpxo5YCTOXZV!HcLxTEVju zn-(cpbreqj88$<_!p%UY??y;Z3R_9)^Hra0I`YCN-@Q3{?34G+WWL6~Yuh16#+xNE z1S*}`I2DDtQFsY=TetH90Y&O5O&Y9u>{dRsaGzf=kRil~dAR-kgc2#-|94`&%q_9p zK)7exA32=zJH|T)TI;WDK{?^W69q$yCslvBK}bnWmZ8aOaqCgn8>OkF5M#eY;D_8> zFg^7;W<)kGWRGcyR9+>ulvN$PjN7Z+s-Vp6btU#RkQFNy(}JzLId(l9f(*ld-7LfL z_lifU7gH&Ho<8FI_ZMQYEth~8J4N5UBZsm z>f_k8+|KdBr)g4=BKwtgZ>!mYBue1P;Gtc@hV3%mZYHR*==Al*D%2nOI%|A&-BdLB zrSjAq%%jC!2qGi!85U$uX>m6`w_HIwt{3^XdVMKst)ygZ=#H54+v+`wqmdkOC+n86 zd}*K3OAyu6&Em;gH@t>rNP1QmXS1=*SY29Q7F2@y^2BPkII|qLiuDX20g<1!ha<=sA;Tax;+W;&?k|0 zn-I%&dA22c$-d&xa7iMjb>0;obE(ZT>07xzN)I&a{WUv$&Z}g!Ez(2;^U9t{v=Gto zJ?w~qqbcJxWC(rZPQH%gy?})gSHR~c26}`+Pa<4rM!G-vx48SK!aI1xeks9i%+IRNHoO}t*+W`x%S5Clv8Ya4vE-1`;HCc-Z z&WNhgMN3SIA9NlLx6mQ;gUo~1GvT{|JPW`g9`E||2C~P!72o{e6+1c@9{rKnAs*!2 zxY*~xYjt+J=nJ=1K6J^y-iKsEZ~Tf8^gd+@v;AHvvCy5YDALYGUQl&;_Vx$h>~zlQ zZs8&111!-)(0l2c)!7dvl^1**#v@AxO%<_*ln7e`|HC=TpBv}&3cATmW%lW zQljr`$*#$P95~l3KHnL20AT1nI4@*!M(sG*OqzghfM_pL@uD$4$Gwk^yi<(bz&2JG zXfgbXf=PAW7S9FSiHEyC7DSw-Ihu5-oVu zci=cDRf-{MKe5?Lnlnq<7YO6PLN4_E;OB z0HG@!E4Ao;Y!%1D7*Jym@RB_@vR(}4L&@H)SW$OAkoi=Bt)Z-CV->t~geQG|6GQi*=VTFjtfHwcSQT8cwaIX8E&M!m_ zU7+%`oLwH8O(NS&VV21sC(C4@Rq~RxXyN}_efnK=|N{;LuJ7QMbt4qiyy>8W*vJT z5F6x^sT9Vz9zWK%{6<0+TB@sC*7e^S^}I}P-^BUCRkNg{ zS9Btr05kfhn1eZ`-aK5tj1?#n>1FU6DdhV4Jl@s)`gTyM<6f170=#A=6ag_NEuXz# zw#7%9vIrE$wrNZ7!fxwZvvNqE4{9yj@QNiKk1vb6I(aRxKC*vue!f(@%VMbuz+kYD z{W{1MFf0%sG*|v(l4V=+mI>bIl4M`41u^;^WD48`H9ud5$YR=X_ShFy>qo#fRsv8^Uf&cMf-Y$ zF@y5%N{4*v^+fKWRGXQF8o?g*_PxwYu^PvcbAF}-xP2zdPTkm!86Rw#J)N&tp0_p8 z(S*cL$v4bI;v3fNeE(dAMz)2%3+GNi=VHmdtrgCLvM6uEEVU5_wv3#!PRgwWugS#- zOf{eJGL0edafl=6q&n6?Y%TZxN%CVrM-=}A`vE_b_GU+V#RETv~f8{lw&Ln9{S17Z#mE70+FC|vVN*!D>i7jpujK>g(d6t;X@vJSnqX>G@CadRbw|Prg%>O0xLjwjn{6flL8Aqn)vW@|KtF zm`@9dZ!QLsPfNMZWCZMIM6OR(ImhuxL>aAZ%VD?~PZ)8WwG8qBstoPqvl@9SgF+hNtfqKKSbc z2#hdE{r2sDFcb^1!YAe$HP>;O+kO^G(H3W;KXXpy5rH;0l2hn?t@xn2!*zWQcxzo5 z_pNoOdhXUD!NCyr>XbVVDvh}URg|cR*)umcSkMt^vn5}u7mQO6GGlk30Z9HqnecWi znJZY8{K71z8t-M1+xnWssougmdO~eLK>)O3VzJ$F4lL#03ExYC>$3L8F8##t4S(i5 z)mOME>?h<|QBRFkltCUGCTqTk+}Y+$InsIT=UuPZm{5C5MQVkl4i9J}1f3Buc*U!5 z3BWpr$DppbjE^DTpwF#_SJim97 zu~J@Eun^93Xo$7BOu%w>ls^#;G7tJ89c^&oI8W`tIxTgU=)OJjD2EjMMt?#9O!qlf z!YVz=@1rQU#$)?Vs}LqRBN(L5^Lt$Dn{%@2&GX3g47f%66r!x_nOa=NcE1U z7PDDp3;}c3UBZ;ZNm&y`&p9=>YH>>@Ns_3n6$`K0ZmQK_|6!L@=?J8!SJnAc-1w}= z)7G7$$0NGQSuI+l!J_dmrZc}2+GdH)^{3%(IT{PZtuc6`zQ+uA9WJhPjE{o`+MkC3 z$@QiZSRwGBR9}9T*E0!Am#EXOZ@6EL7W8Qf_)2cY$Q*cCiz^dCD&C6R|52WZ47a8r2uyL(W5#pXjcQI7Ld6R#ZFQhF zN-g=M9FD%GX6R-Y#oVIw<#E#1qiU4bXX~8bms0l=q!rM+6L~Y&aYuc=7x1p?@H+;F zVSU+K`*MnpSI27dCUrQPBG~aEakyfSr#s*BJqL2+REaXSTBhrx*D~ziDP{wW{f`s1 zGKihUAn4ErQ-o=Brz&1J_*paMM@ZBvj}oE@q!f^Zhp6ohs^>3||rpMEwP9_9C~&xAeLE2wtp&$Z*9xZt{^r$^67J3UsCV zSNwl*Lxq`x6g%&;%@x0p+<9f~tiGtPy2cNy>(=4t1o`sVo_KoowF(cxalP;nNI%b< zr{MV0Uo_Qtp)jwFL$#$R&&=!43Py@MPIx$v(u0Le zW&B#m;UAT=7p<2ovK6BUqxWV05JNllNMc6$^GDzPk$b(6g`gHGEVX%8`}@`^h&Hdz z^v~(Q^?!um2Eld;{{OTu{cSpotS63@VZYu*y{roAs9e~WQq*cgRezRj;oK(ix4q(} zogaJa&bAPuN6Rbg62-P_zL&t}2j=GcI^Kn7(;o*p-c^Wc4#6e$17iQ(=M<_Oc?5U9nt1p>P0y*%HxIRT!te%7OWRWuE}?(= zPvr;=^94byZ`i5A6n!VZt{g0u5Q*B(_mtPU800lw881X;m$GWIfr&%e2$$pC3}~^ULwSU2vvKG3>s6_cQRI zNlnb5D^w+{%U*!CW=Nm$QXe4fKg}54OTffsW4v69t!OnD+_n!~F&l~9Z5DN$iUMbp z2^yASuC$%F9NxU~1qP^Xjua9i-41&&Iol$a-gPi}xMGVH5~Dz&zBYcPf=w}V`%Whs zp1-!RIH~b##c#N8mWDyIOY92E!iNt}tt#3!O2GHVz|jGuU+NYd+dma?X%c;Y7lE17 zCU{-g>Py$Lm_u|-$X35vr=`D^DOjv4tY1hy?K07QTsC{ zS$6WX7{``Q?DvVtub~{q>KA>=^wK{>h23SAyM_M)miDt&d)VHV)eaVu#Y`*B0kS5_ z=6WNMrcvm4=Ol-a2J4~t9c<8W@K!TyqkKNnDj9jOaKawg-eO4&CPpk$TuU?xeIpu4 z@UPQVS8OaJ;~t^IoxNkjPhUl-?PC~;4xjxN0doJ`6rwc32VXaF^b-2CmnXJVWJ`F6 zF}72O7ilS)H*Y`j!RS9%;O;>2p3pu^^=G8svhhf?DphXWWn&`21VO~NZxp5hcbyuW zxUdL73_M(4ClbsND=#a8RqGO3gITUfNRg%D*2jXz$PXZ$t=I^>pE++AnwW44i?CNF zZWP-)zbw$L)Pw){+P+bATKts)fD_RKy}P^0grgoOX^!Y!0zuO_4z&jB!YsejDx;~K zB0IL(jipvw)Hh9z#>070J|#>yBTC6Vp#&JG5++<(ug6cQU&8D`imWnnn-8`6&>|<*8=}M6zOu7ZTwdtLae&+&5<;&J zC{Up{FOvy9WJn*?PV+eUWbl+O2DJ6KMbwdL$Ee|%gNj`=y(AOeEW+QK+(K|==s&eh z5o8g_EN2@402yIDoPx3<%e`?Ye_|^3!euUwB**a=K*be%t@0S!4y{n~YR@QwFk9n- z)BnO%6QnJpw>!0lXlDR$t+<5GHdc89M%Gn=&zsFCF@dA~M?o-`EEDhM=Vsv*t8(;y zY=i;Wo9z)}5#s~&s8qqe@KdRg=ve%Jq0{lR2f?cTolnExcKA}5eFoXG8m&dqSFO17_N;=hSg8x` zy`HI2=X?7byKbgg3%@?Y$Nre&xvWmTJB0bLfJGT4bzvHoj0)CuG?9^U6-M!&V%+UD zX4IJj=hrCTQq5-M_6axZN8=UG>qJSLmA29a--d4>I8XPrWt87Io+Y7qt1G$kBO;Hj zJm4ZXWGP;+R?lsPFXEx7H(3npRIsS=e}-eDns`L>|6)08)m;(tn~$zh0v{cVB{W}F z()irgVzmghW4}a>MYL2-3dG5hq#bJ|7v}R5k5mi!J&AZ*AQ&wxC=wP3f1?d*hOMKk zTZh~WEWpK;`dNJg7sk2_2XmT^ifg-8J4dR7 zWO!}yO&M6r1*Xd?$IInRqjd0p9YN;Lk4@iuG=weZ52i5W@K zWeamwewbZv?Vhjq&KXb8ff8FnunAf!=Un>^!JV6v7t?P3-RL)gz&{4e&&k-F3I<4M zYJlUktezGCf?ja2cX^bwMzu1_dRSbXujYTxZ*Cq-CuM}81eCfR1YLgAt;N0TFB{sz zM@r&?(Zi|*p3TKaGwtF;NM*x8k}A0?^iN3YiXUG?e!1dNd&=HKRg-&;ilyZu)ge%z z(MSO78QE*TA8o`@w5PznA0_vDfhY0M5Bt@1d*0SyvRpY>dBlYyNurfC?S-ke%Tfz# z^VDYmq!+cc#eJ;Qi4Mmer9ORBDjW9H!?8SZ+rmPg00>sNI4M)ph3SlG0aLp$(jvcI z@eBs)WFiHf7S*!a&-iVJg6~{ZQVdc{IT6|PgBGQa+%VCD` zbXOm}P6r6!!O)AN?O!qK26)_9!ql~ECFC;qf*G3QL=Y)+Jn}1g`4gjdhMe=6CNlBV zBp9(%x$B{~R`Nw&wBvtTwtpB7g@>XLt_A`5cl!Ush`;?19TRVfc$_~rzt0)B_dK%V zz*P&2%2AA^rZDVo6X77|QT%pFfkBf~@dJ13Ye-*$M{6Md3Q@^cD|Qd%N+i1K500nS zndgT5EYV!{L1MK*(Gy7#R!2|hbBI;6+Jiaz%2p1>I4UqYEZ)|Owc2V${x#o!0e&DGtm{C?n*q+p5E7X!_~@VP@m%!kd?}W z3%fZ)klXdk(^MG|L5`wUk65O^MQMvkSGW6?f~)1)N0(W@v@pYimC~a1_9*jPj~duO zlQnYDt-iXsNHT*fy5AiB^})f9kzc$6X94{Qx9vo^nV6Shk<)X$p}9r%BikIQot_Yu z7H@N6)xCyT@SD5DdE#y;wFIhzOy62bR**mV5HHMfZ^TjzN ztml?lz?pt&8wGNu^-R-kj*ALl>RTeEmJ-chobuOgrnziXzV(l2FqjZ3nrxL;) zwfAFwJeYulh2L6g3#;#9{St7&(mr-(c`^a z-nD31fX@&KEr&SryA}M(yh|-ZY#7LglcQ1r+OiK@=U~0Afu)p zroOg}&>Cjqh%w4%E#j)c7h%vjo%nL+7RQ8p4bV#jKI1Y{wU^*5UVgg$-3-Qo|E$gX z$4f%0LArvlJZw;adf5=|>C`9P^1ICqr>|~nTh9t&GwRoHuuN6y?Ui?q4}R;Xny#p% zyN4oRrnpwYd`6|4y@RvkhY4!N8=4-%e36xH9=OUsTj&)Q9=Z^7;)C)q=*jp7 zdPhFZ1ZjP>Vt%A2|Jini-Uv{#eW1re@DxSd-M%+{nIpvmGs_NVj~sD(jBlmu_n)5y zsF|Ol>da?;)44`nyo%0PFrh^y(~xQSTp?b_KX9WgXPN8iMV0L$aBa^o5ps*VgW7BW@!H=~xFdnd9bX`iG*T z%l>%H*+J?lfAf%iq&vaj8mV~PiE*77{Rwf-ZO{#=;iiy+!(Gnt4)T8v*8xvWf;8k> zaC;+*3LQvn`@1@0z3LJ;-;f7Q=cH`0kmtOyiEP%c)|s*Q-@=>ZF!q}YpFIzwl0iSO z)`v9Zck12s5$X-O!$)<@>-j6M-qQRWt`ZH{FiP7ZBOOPS-yQnP-X#6Uo4(nW)v=NT zZ!IdUT$t9T>!w$tY)EZWpWgqbwRz3FudGK7l9zu4Y$~{Ct6;=&t}YsimVuHOmD3JA zT136bc2dGyz#)t4@Z0vGG!Ol!Svr`0V3|`~Zkg`$imbltIeDPfQM^MLx7zOw(Ni;d zyw^b|xvPf(;?P~!!!{)uxP1lgk5gQrb6Mr)6F{nraP*$J=$%HxYq0aIIurEvJ|YV2 z3#(%!{|Ud+i)0Bm0VIySDP>X1y*8a*9(UD%uv85vw@Rt7ok{(Jv4$WyH~bu#(|)GH zmcEf2xZixc6Ltl>?mLBOAAy}{KmW0ELnRVLvY$z==f0Y2=#lPIHew<-P)o(iV)=nXt>k+BZx4`cklT-MNA|_v< z>qbtw1WKuQ-*1STN*b$fRkMxq$DiF$@qa2_JfrE**i+>lcY$LOenV8rHfY?xE0|;s z+SFkCr@ZdpxKeg9PbFtdx_Nwdcgry+znvDOaa?_Usv?61Dv)VxPc+!wAEMf>YzCq+ z+ty8y;nYH4Y5CB&=OiudFLSu9Qre*S`oqnYW(Ik6{m+^LpDWdRfrCAcDaMXVAUbY` z?qs=ddSn}vt`0P|%U;F9rhEtQ=fI3{PaEVt=Vo*LM$4DP*jwy@ABuOH-fj-rR_A0m zgm&*tOrd_>SP#JDGmdut*4ST_(XV$Iv@e^+*vUpoY?VkvrnTrwqFRH@7~G)Wl|KNl zWzQg=9-o#ILhr+0-(Rm2c{?3-S3H&eN=73@<1h7fD8n=g_Gta)=3>QQ`Q03^=eOS# zSTLrT3}Lqp=z5CRJcQkl@#1~<+pCkPyfE_nlvr6M0Mo;^)uu6}XlxGM3tg4$W6=&; zR^egQDrUf3qtnsrrThJmgx@%+*I;1~c~OqLk+^FTbe7a) zsJf6l|NRFU1bwL)HF2AKwddV9GXJ-{1#sLu##Tgf(sBGd;^Go*Hm|k={BLJGojxkD zP=O7bWtmTz4~C5Q)w5a5ubs&PyWn9ppMl;QdkVm<4uVLEl)i!0F}o`T+Bb}|fFf>) z+}h|Vv9G%wX~67d=5ld9fxhxVk2rO67r%wx9r^Q(Tggn7{g_1YWHQ}K38TXQ#cuw= zb#5p=&z0L-bF!|oSv`3CyJEe*%)iIB<=D=_%PreR8jc#zWzahVe`_>46DznjZx{Cq zPZ9}AR8d#At8(OQh1INkY1R;DO=k^N)^5CJdSZdboxR zNfABv;DQZ+w98*4{{F!$K5*;|?c&%i=+X%Yg+S(l_mV?~?-s|8_Yq6t?GZN)%)jqP z+%i(zl#z4#I$cQJ;}+CU6|%?@|MG{#?pO;?VOH8!BW4q__&ARkV2GGQGEPF18nF%+N^+iRG6ck3BYf^lvM+FiRD+VcZ4ZG8?JgY7d!f=!v)KR3S&o z{Z8evcivbPQDstZR*6v(CY>|1ZK|d!bqTIv?JnMxYuLorp!L&j`@f97z5kvt`0M-e z7&xS{+79j04g|h|-@rDbzft)$b%;I{TEUpTmJv3g+|8{-$UirW>UME;eBwA@TIlt} z-BD#&C3Nm(M%=;TmJ?7{`WVt1np*WJ*uYT&dNEjg+3e+qp!KQvWhd5#EO$j-o;130 z$VpYt!+x|u5&!4%qZ~!j{*P(*!HHTRa3KE%jiAt=`EC^KOMV!{nk2;HhNRixIs%OvoQcHo~gc`B0l2} zNVqt%BJfWF^GXvDzy!2x_yv8<7wePN3cz9+!-~94s-u~DDt0n8zX0Am*B>Il+;W@< zmi^H&n^CpHXqK{-b(I`aOw1mwI*;t^voWZpn{IEWKLVVI276*PZb4_ZKz!iUpbJ|% zDZr4uhQIM}q@&g8mqd{B<_mQIc@Mn>dk~y4u9LZNt1zAIXYb zZmI?VkWVyTRtFNsNOt+PLuA-QIsE^`B5yQBm+um|k>S&ODBcy@6UWos@BghP`J5Y_ z9Cr3d-Crk!Hcig2;J_*EUeR{tRpGU|neU7=TL3!kk>Gv#*itwMF(fzybb@s}xG4_J zX0FRbmx`BpYVI*rE=|67^0d5e`JK^TxBwIYi!?3C8 zL@((b&%rf|POaLS9uK!0&%!L_tpV4shwCMP?4FBjo7ty+HgF-;r(_TXV2IRN)Bm=;~Jdr*CVq~suRJkVrP zki=^!5E%XhL68VFwC*EBZZ%GK29ZY58qRtt2Fqbjbmw)d+dY*3j?WbJVW%x+@4La+f9~v4JM1|$+JFcX`GA+-O5Xc6VX%2{IUusg?L1o z=`!w(UCsWKF$s&DL{F>Ke`BHSzp+4|(ZJJh9s#N}FtsTX<|GqfE}y)%=5PY{1T58^ zC~*4dUU0pPT1uVFN^5p%sZox=$;j`0i$7sm2%5wDNBq$0FKMrxdzv4pC)kM+{?0!> zLbj=~9+2s0lnY?-R>y^mdmdV!{|$m1uR#xlWkxa}Qn^g$cKhFosWrH6Ec({qN!8#G%I{}PAwQUh*yt-VMsN`e1b=P5y%mFZ7H_uk^6+Yrh7rAw7{|BJFxu}SWvsN@~b8HQg=}%m0+RC9P2NrnNzd-$R z6{_-Elz)vG!vVmF^IwH`7M#qP#=~=8jn9BM?#tC+icHRqlv}1$kju zJ9P?-9vdn@00>0cj?}7Q(d_mN`k?{`<2}rA%nL>+T0?>HV8n+HW&|`JDcAD&?xRy5 z&4!nf5dOv8KhJ^~?$)hPL zoU6s$;mw{L09LEk)nj12=={`xt-`UP6XdSEfVB(mbi}^983ar}J@WI9(EqN~%tcwc zx^W+?kO#$c6upOr(eEjQ{#8%%7YWfbGE$i ze4jgyp0muULh~A`C@f%H^^L%Ff9fePWn%q?l1J1Ja7H|#n7eN&v?~NHf(=B79=pEB z&?f-#lohv#HM*!V2`DO}XV8@AKSR)(GY_kq_u@pI*S~1-D8U%q$5f+MIb54O@G4c0 z2sLFw++4>3)(7Z54F9+8Dp(^V1((77DPLBYy_$~S1osnfLxb)lYnByw$2Qx%ATZ-Bt8kgVc6%g0!L53iU8aQv zB*@UyU?zD%veDZJIU#^5T6j`6WFK2?Lw^vF6@KA6wYV}4j+jjY^rh4CZqvgs1BTZ~ z9T?cfKkSm5_}D_Pq>3 zN0Ez#AemoCMt;9}w27cu>Ny4KGVFVj>8bnFUVxk@=h0?m2X*dtUOK=q#p#yiIv^<; zzc(5R-I$6~%#yu9OSm(1NHG$fliaAX)LP_RoBYFHyT^~ccMVbCMLMfipttH)|JR;o zWy^jyMeH@Wqqn25#i?u0uZG`Yzp4SIGwr0)1?WK3)XLPq9!;<+{au%@T|eN8&A53C z-J?Fis58B^mH!Rt&>JeTXJBDRv5+@JGioqqQ*GGmvLpf(=y}_|-LNf_=u#J16G+&E zxcbCeceahixeR85NsUFxIHWhXVnBRI;M6yf$2WR85KDO-eb{G4wCyc%Lwy$m4aRMODDY_)FIGEzqPv$NJpwqs( zFYMjio6mDGVA|vX{pV5Ph|q@m+7X76DjHc-1OBAhnAL*qyPUW4=6?ZjSFgXdDy;5q z9kqn%x)8qYUpV!5pLLh}^l+^~&mFEqEnJBg|7d46KAH*3nbvO*@AFcOVzo_oMr_R4 zIzc&%?Sk+j202L5*I*B0#+4NHq1@0-_fmIY*pRR`@uM=QZ|-B^O+F5%lMR|Yh!Yp~ zKY9)@Ah=2I&OtBy@MMET&1IYHnK0%3&kJ8CJ*!eBvJo@&F3r`7JMawU_1xq74Skyc zz?3EE(=pi4=u&4wBWODqKfM!uNPr7SkV#8S`rL{7z0U*)27R@6dVy_t@Dab`CaGaQ zwTTdVjR@ZUEHfs1xWGkjROrcJ$>M`|xE?cTd{Zyi2Z99~D&muNKez>FIHzd*7_YEW zf3?s>pEDFBUL&-94Se-1-Qq6tkR|g=axK7tT0aZ8SwU1`ub|l%Xz<;3KpsC@cfzvF z;LatB@xp}^qzKcUiN15a*>T2YsAc0hj**+#}h5Qp+jMWnx1#pSx*wYQaWGpML^N2o=6dt0L%*mp))gw_@AfxO!1I-0G5+>jYr}|3UcpnjVN}r; zMbFFFMgDlL!x2?dBE;TT(UWE>H&vl|PbdKI7=lgyZ~TT)EYDyjt1Rs_%(nr)@0qJ(rN8Ci0yC5$?9qCs z%0?t&{s;Z*cU71CR`dOW)3QTWQ{3Rk_i^ z`|N!->+RTGK$z^s3ZJ4pWlZeJfj95lUh}DLh{w*?~sj?$(vKe1Btp%fP1RVn@WY z3L&dfHM$=g5UR@c2uD3SC12;U7$Ep+RQlMEKVG3XgvGGIzAXsP{vY<< zGpwm}Z39&V8#34c1u3Irp(_YT2Mdf8Q4x@i(xiqKT1XHXMLhA?!UsT_XKE%yO$i3-Ch+{IYF^|LUNPvzcizYbPqQPrU9r_Y6JONj2T4qRTl zCrH$M7_7YOu_VmX~nYzlm580TNIolsE9!p4Itrf83 zavV4oFW?eO(mwipI!T8Ckg4?k=sOxjSp!x6G7}NHBM?6AY2+F4T;i(yW5M%UGMB89 z^}#~OO7;0r!YnO@jRj0J=JFmnki)Lt%ljQev>UoHZ={74 zFgm^nnU#jQguZr2=2)A3>mX^CRJX{w|jWnb}RH0g5*iU}Dn0S%WqRfF#=^aE9hB-Z6Q z_3#a|&w7l#r;f5;bYYL;mzSv=VNTkp8gH~LxfUno`BEdFsK^Ike_^;AVJ$5C%=#)O zKN9r>^gh~T&v~7sdCny0mkAq*ypW;fU9QA6aKqM7n%RUnbV6dhukZ=M(ZxhrJ&WS6 zZ(3v9k;-|=7}y%n1Jo{2MlTz1F-hj_Fz0AkjWOyW`Vr!?^fj}@lG6FogNMOwMDO*t zuf{{|-7uA-D~6dGLL8?n+y~@aZl$7q?p-eVj>^9G6b8DHJ>*fg!WrV`#5N;wpjBAa zeg+HuV0C(>%LRZCj5I|CB$7XyqN~dB+;c(sCn75x;rjr$AieVnJ*f0+nz*x78P|2R zVT?MEF2GRF3qx9fsz}x`W7FDnE(c6{XT$N|2neHv;$(qkWl&w3iHGOih1Z?hq|H|8 zFVn+ty4p;$I^D=a&#>FL##gXSf5Dsu9nkmPOk7~fY->JyHb0yu`vPgP02IGAe5^R) zr`?8e`QhN@wa`OoE(u*u4il%hzGRQV)O9}eWPiH z*Qp(*dlSkHkD|AMk!KZ}YkNX>Sw-ndb8pW%q7KbGNUWRb({+|y3M4@;v{aVtj;}6s zJh+Xkq%uQ7t=f76G78VeOIte+o9eQrs|)VSW!T=u1@@NS<-tI<^fI5Qro$$Vcw;Mz z4hH)I&gl>|2+On___C04E^s?|@!h^J%*g5oj&7mYb|3C0LBsN{+Ub4j2b>R?R{FxL zSs*_S>i!aj+OXUD$MNy<`~`WK>-^K-Ft_NV9KNjg2~rk4FvD57r*AB%vQH1yWV5o* zbwG{+Imng4T9@EgOIOIxauPoH2pT`iEre+7)D(W9AB)*WBQK=oS?b8e2nJ7Nh%ET# zLN)KpF*oUEra%o(!gcg^OJtX}FywU|%I`@}-Nb|RVCQGB)jP|_EOST?$e5~<*)+&L z^bM++=wJ0=FB^yYQgl-+3L75?zS>aX| zU)q5u8{1;*>&1BPVsG`{>OoaMR_ER|HxIZNL(yxKPb;K~slNnNI~ci{wCtBJum+`7 zYNpH%Nq{UjAy+JE=NXd-B?%AIAu0h8)L?S5Kf0dg(KjZPi;*7%Q1JFCw36*+&y~)l#xcQSAx#>zhVuj%G1Da{(*@%c8ry zVV}HhK3g=kBGJLZOeY)QuWeA$YA-uo@jiwf!F;bD!xl$Xyvro2CMfvR-71CC1mWt&&Q) zTPI6&&zCO>)sl-U<|)ZvY^(uPq#v+d`Kb|BW!-B2j&buzgGm*F+I7HArg-C2z%6*| zYMs(*OhQq+G|yRcJg9y@`GWJJ_tJW<4K|DgPA7=D!e&~v-LkWAt{LXIj8sZiTM|xf zF|$DPbK_1u=m)oXm(rPB4Ro&IT33le;MaugFs@too{5?q|5zyT8Wu2Fp3u=6ddooB zfsXff+HrzRXQj?O3wFPCCE)hq;)R*=Xw_`zt@5(wa~xmiPFK(RJrX3XgC!w2`7SnM^XTBfh|tn_wm zFZy+XgNdwj!xpJHZ=VrQ0=RwP6ZKiLyTMvG&QZ-ClM1q+q&}fuic#C<_Ra#v^>^aS z4VFgEGEVt1XyCzMy_bnf?t$J;3H>rCYFf>cgud+!MEhB2lAM0qm#xQj@;BcD0aD%i zM5*RW1gBEJKhKK-b(1nR)Cvvl(4FguFqWeLy)t!T4uxWc)YZh!R{5b@@__*jmN6z} z!RhKKFVn2GL}VVx56}yVGYepdz5vwITyulg$JF~gzV&7r9UljI=Qh-kE^^n1ZkET@d&YI<2{!tu1X94tnic2CF^F3d#=@`3N`G zUC1MSuDb$}?9KJYT87BVWa4Vgk@}9W0y7q3IdR0IRTMt*?rtoPc-pm}pJH1UhzqP&5g_5%l z;#F7USllL3Q8JlsadCxW=(+U^CyYZb9OR9Tho?o(h!cP`)H+5Ig%zgeOQURrfDsZR zHuWHK(uRg+VmynPpl;XRomcRJinTFCIlECIP-obAy%R3XO`P>!?$g`uTbE-tS0hE} zH_HMS+>RJTk*ghrxJ&MemU>w9$e7Gn>&ND`7k=DCcaf=|w1p1Ih*$eUxm8+xa7Q-t zedEekX5AJB7jd;HgO;*r1n~uZgtTN>;f{Mf7+Es4&BU-=w1#YgIMlQv+v7q^LPomO z*RH!RyRIwrkcZvZ59>CBSr4fX z-0#O(`to<4a{(7|ZQiZW;y89A(i`%5Z#$#e!7{4TFMFd?I2tt~3qMnRD5s=v-oUV8 zCbe47FaJo&6W_Ftis0||?f9Da^LpEP!R zv~|ma+dd2}={4KKG2XQ{oWa85O_g+#ePY)Jw7?RxCTYeU_wMe=JB+pc3a145j@Rbe z=me*B*sFRscmNf|exKJ#e|YmPImR_Yfo{sZ(jrv>2i58tYCFY+Dx}XBSd}Wl`Jg?D z;e*M5#zJuo-CUZ?L=UJxqj&H>BNVA00!Q)&2j6M&{34ttW6bJFRe2(Uii zadfH+>J!K9g%cQSsq~u?-l^vw z1*-W|;X}}(>}zxaONFK9(H@TbW!3bSJJQRv%O{17wnT9~d0)=dimXsw;+}0!I_bNb zb3;v4lsw!(mmPpPg@ZZi5x@4)@L$M95gG z__I`R{-SmwekMN?9&wlZ@tda?q?ENPUd6w8GweKUK7=yo(6fc3TV_5%IVAn0Lqs?>DlChnk$XSs<01_m(nu5nVFn zD+45bx!ICr>P{SHSgH|{6_qGu%4V)G$wQKz{6c#?t{gD5)nQv6`Hy}Ui-*U=OSAzlQU*U z&1HjMm#RWLG9Wu)8G20Gk8zGX-T%SUu|zZjCtZ5YGkOIB8Pt8Cx6AAwv$XjrjrDR3-4Gnz;BR4$528mfCw4 zBZ|F`0`Tb-zn(*n0^){P6+?VyW$Nx5Iddud5uKfJ(8o_)%E$#I+dI!KH5!2NE!+>5 z_6GvvP}@&_zJ1x+&5gID$rq5vnAS*MDZR3$u(=On=D_qX%83W1k8pNh9HKfNRk*G^ zEbU3lcMvzhE*2IJK9P32hzk~Ld7t(baZeuJu~b%Z3AcoXa`JXcKN4tj3{LFGP^z4D z?Hfl76k4LwGRx(nlI1_`UQ6x>5=b%c@$x}+P=O7;6fJtofQvE5XOw41$<{Bjg{%+p z0e#sW1^OJB=r$u!F$T@TB?!cc5SS_9F3k%#j1 z(+9SphFAVvPe=FA(yf6Ry$8m2=B-$}z8&K#53)TV_VPyZS6u?Huyg?>z(>m-ZLHMTmx%+V}K5-^JD_ zdOQEh`Q+R`(~Z7dyE!&GM~{5HBk27hc}l9qWKzIYHt61so}gUk-m8%^H4>k8pQYjA z+M1#So)k34C7$Q76{F|Fb3Vz0<}O$Acg=K&i!B~fobYhXWiM+9aR zKP?`Al3`Rar#a{&4Kez)LDv~8>V4~zT~}_j6FeNZ@~JuXc;V@TUnK0*QO+AWnW#2i zj{X^ed$`WMbv5q`-g+99BS_V-JTsc8eC9py8z5GmSM&3fs+JHpDpj?mU8crb&KRy` zE#|JZr#J&&_UyuKCBt)H^p5p>FfA=Ml#&iO`$;NJKc6ca{f_e3W8xwID%QGbTgBA~ z@J6rnN^rGJ*-vU-LyPc7`;VNl2ar&8A z`Q4Zg-ijuA57pm!zx$0+j!4fz={?;=(32_C{)Z_UA-{3lH8HyROWcDW7Y88Z{Z~Sa z<-M2f2?(VWDf~TP*Wkm=)V<$5ygZ$Zezkr03T&+RRKrsr2v1?%!{e zF3O2|@jci4Guo_|I<1jGmMRfR!d&Gwu;=OkNrs3z~zlP7=49so1=cZDFg0(umF zju*P^!v;66yabGyb?Rdb23yM=JNGjDBG=RJ#|q~xdxXs!3B?0SBAHIEQ(o~jYTjjD z?tJWpLq3;Xih|!Q@Qc@;BDXU+baZt4vO&NqlbJ2Yw2SwwQ<}c;{UpJdi|B2BMU#=* zfY^Z5o?xh?nz8Xq!k>eWWG7^yrlJ~k@iHnzS@=H z$eH}2iYcY%`~!rNtVn$)r|?7>d#|V@sdEmP!*8!VNO2m zYL-KGDhU7}wdD!#O#}5V{3P>^g6Y2;f;X#NDyz%ZKi>DftQy!%4{Yqa^!914VPs9) z@G~wn8&?E0;3DHEKmGOgezrP&|Mi}hjihw7$+H;3>Bkyp*?Si}3co(y6#d6n{5D zrSV_M{ZF;zf7S9|EX}{*u>acJ|Jcd-ug(2OH{xGezyEIzRrzayL}+Jx`0%w~ zOj0h3V$e~uRAIiNr(*cmN~V8iT>5u~0JFoB-Eb9&Kva?>3H;-4^$H<&9DtKK82j#L zq|U{6`!*8l-wRGg?PHdnQHM_92b59;2AGTbw!<2FqaG9> zKfLob9GqXZtB$K&fdRq)cR#D&B4k*;s?r^g7-xrV4DcHA_PVg}@UL(7CPLjDU(=sy zUH)gs`0L-C*l-p5T4O83AY@dY0yG{kMf763-u-gO>c%ObzBC-AA(8ti)Jja4^9UZr> zEX{6myrg-@v#4Y}N%|q<-6);<53o1*gl`YJtq6FR;~N50c8V?X@FC+fV;W2ae$e5dd#z23=Rw4Wn8IP?vsP3hjNNa5UD4de$T898XaV*1Cg3gzM zxU78j_}TU!57W5msdvsW{3oT4pSykc?$KJwJZte53{u{C{^*qXiF2rb?<&jeztHnK zt#LjP$UY2Ga@vuB4!W8>7;Bcj|L~l-VLW?Z z$PYq=a{^Mu^(%)@SQ~K~<{O)KOJDq_kNWG|jHELh%L0w_C(`io&`IkZLWTqZ(O`#m zB+w1;bfdID`ard!f`HkwKw~v56n+I&=&O_@L6@L;-<2_rTY(LZB8w38!#~l9X zuv=!!SoTWhwOt{WcOS3&)=WLL&;B7*^#@!DNc;&lsNlZzpU?g&DSy2K;8%@}1Iq;! zw1Shz*!C~(04b!B$oP}j{)W^3Ms9Zm#sSa*kpaX@OaJzj|L0q33V=wyX7Rm!)89Y; z@8}U>3WU@TtpfFw{~d4qpQG1HiSNK|HIEW6{aY^h-}DH1$P1|3w+TXh(f{W-|Be8~ z=pE?+hA223`XN34`LQ$J0=7(YCabyZPq6FXz3xx-{@?5U-?#X;L)UXO>B6)!Q>SJ~@4UxliWVoO{!#vLz45m(7RgK{I zU<5^dBWO8vBOh_kWCO*F6SAnig7?M6C_52(uRY$in~i;ciZmOLXV5)jXC`4@>8=k9 zPAo94W4M8IO{@ZL*l%vGOcH^*2Ovis6aWs=h5(7Z1gWaAC-bh_(WexPiWCi|Aw4(t z^cFw3mT%Ql>VhHpOtp+BDeYn3e^^9g=M|1pBHh$>F3FH@uRAQ_VRf)QMez)ylU$qQ z0PIP^#j7#H4F>v8e*fRu_xn7n2V?3A_@@NW0#`h20+;j^vOz2y%CBicGIZx5N}3{U zw(ix_8*w6p`xb{#Q^PKOcvP*zl6o=f*r3gk@2{@kI=%dkn+fArDwBV{?w!uMYldPH z4}Sjm>P)^S@=i~UAGwYCvX5&W7{GC#78AVsihndyJ0_dORA8Ct#l!^JN?`0~g4xcatDR!Aczfmc>|8Xj}#2AxXoDiMPJ&dH}XRFdfD(3O^`P(7R~ z@8(=?%?+G3Frq$~Ad%4yuBm(Ri%E zecXR0(XqFYFDBn*YZ2{`qkYShl%^hR)!@=8=aQCZK8nrrpBuL)&R|f54lBSGwY$;fy~j|YAV^|bE?{Xv#*#4x)i!WP0>z83uQoI%d(h(0 zCm)QZx_%h9uo~PxF?aUBi&mLy@m&G2=P_y@`_?LSB7xU?xF7r~V96i1wI&U^X9-`x z=lk)i2Hpc-A&2jSA!K6R3l?TkoAyeu?XATII(12x!20YK;O!%@-)Cz04QP*s(GTei zaXQ24T3W!0kJIfF zFB&R&P5q88)4%qOL2iUJmxjqO(^*@UPRkjei5k3*W7RWOCXUm-Q!vE%@DReyC6I!3 z?0dX>k8_f&+kAi0_-cItwv->4YD4S|L&v6VjMtEn=kXA7QE&b3J$=kQ^e!5$vyx|7 zl|ZRlI{WLcY@!jno(V! z8B?f-v4ZG#umg%--&QN;CayvOnGn>-Q%=oXOXQOdxIkX&byqn)4{64pnT1eXB@=&K zK=+Z|AxOa<8Oa~~m66QOD{0p6(NXF^%Hv#*GKs?nv%Wm*;}bvg*pUQGA3`M5{T6lN z(rHVdo*Qv`hh7Pi>pzDQU-86b(}n#-0NwWSig_4)l4lGASupQ?98#Y6t1o#t4z@mt zbBPC*$g%6N!%U*)`;91vf0vw2~HNGghxjTmnIK z+a}`k?CBMP#As!*-Wl!a-xUbkh|Bh?Q*AN^DOX-Go+HnzGS>Tu6dYNvIa)Zsvo9^J zw7T$G>AQKowV0str-z5q-v&^efq-qC?pu4RkZBV zt2Y4L+ZAb!iJ%ey=Sp(3Mn1ej!*;>anCo54-=f-?+|u!vfTF6BOEczi1%I7 zO&IK--s8AhciLKOG*!-9%QqToO0lKR`P_+L5b;bM*c zCySt!Mq+tU-KV>9@{p*2>e|z5DZtlc(dwC@LZ>zb1+jAVr1?Cn)z=9? z5lkA3b)jga%F~c`gCe%5b++(K5yDxs<6}p1#fNmp_G}!Y5;@)BwEXh3bab$ky&KI~ z2{y5XaRwHJnj(V&lH}dYeATK|I^L?uZL~glA@9iQg01LU2Y8yA5)#u4lHlrv$qz^L z6-I9d2nMh#Hg0%YM8aD-6HwJ;W|HsJo(_tpMHiA(u8^hZEtPKpn#H`+6*7BGsv(C2 zQQ8!zX$#ht)xQX-1^L_iFI2cWb;ghZ7Ac@{Nza?Z~s8 zcQ6)EaMD}L^HwVEt`Tb%Fl(7kus{jD&Qsq{i4gKo)l;25=vP}e16%GCtm!pyFRGhO zsU%K#^5qD)*Q!Oek|4jdk<6Q_y?`~WSk>jHPC%{QmYrii18(kq^Nco6A-r^L6cs#M z!$tmtI#&~>Ln|kg;F6=p)cP@kppMprpuct6N_=oE1eT-s}dSw zYSfXneCNX&_^;pmr3^I3>E-!+YlazZh_%{-0LKWcOQ|xyt`(`*1u>_cu2KZw-v^-M zSMGHiOHQt$9~~$DIMCQCmKfT#UZcIe%S^57M)$o;4T3Dg>XiblzvUG%RCt@w7OD_n zIog3rw~&YU1~L{voowLXmk~vIQER@{bz8MPg7F--jpub-!!!s7p9TXkXNHDdev~r+E8{~+hXMtP3xDWg9H4|+LTqjm_soK zirR$qPMH`&w};j=YwrX!@~nw#sx%%r{fN5xZZ^ls7k_m3`;{@rPkL84XJZ`}V#0tH zY?2?ZiS>b`)Qb;-BD#!BEaTKzPo)Pf!^+FKCoEni3>kQG1)>E;Ult-(+tzapg0sC+ z>Dt1~+ta_c1|jB}%3XsdevLJNt@b%JccwP>3^2owozEt)>d6E4GcgAy%%s#-4$p*0 zw9vgxaehmAT>Kt=vVTQ36k4xugb#Pv+;m&c2A zjZf_zBo6t5>rr3Xqe!BBMNc0pda|~lDEjDestDSC`Q@+JYns=@xQA-bL58Nou+-O$ z(m~Rq2Dm{F_Jw%zK4HYvZ9raCep^qY){1vjFP0=VHu`?0X5McaE_W$)DG?rgp`IE7 zbX=H_;C!L5P-R;Db`DoLXbR-ZI>VsN@hVSgShj=#NDyaP&TfDgAEXTU7 z4p4!b>tWL&^jYMjbs#ZodS2(YCwt@@^d4>rF%$5kEAghktV&9cxuzLt#qh_CG78Pn z`2{DVMeu+acgTS|_KqfV9ODTMLiaW9kx_6+3_bI^!ss8p1=j}~)LWla?BmYkex0Q3 zc#F0y3@d){5)=?{#BO6&m{Ix+>x=G7BbK`b1U%chk&F!vA*heN1eJU6=tWlW_A73ML#yyx>sJkeqyuy*byNBv+S2OBTLRG#)U*g;^-GSOX+)+V z+$tr<9Lnt^{4@SpJOIQ$kcxP{AMwv4#Sniyrl$1J4bMI0XU>+CS*6-b&;Jh0%e6Y& zXBd!1Ck1EB#O263=ov_NSn=Rq9aXgwE{zxW*lLnq%-46qwk8em2X#}Keu7d<@BO1E0=GnYbv(F=y#7e`+mRluC_xc@8Q z{D!1S9>(s)iCJ#p&kXmN62vEXrceoW54Z2lcCS{TCZ;h)!?z0+fR7F-JpMfF49;+r z_GROGtpkJ}EeI}cPxlM3#P{bKE-*nVf$NXVYTVuMWrDd^1~$H8)zYtLctV(6F$-@g zDjtfG=;uLsM-yL7^33Fjy?R$2v~<~~z8+Cok>ad)q?W;?qKc&U_yizjt1Bd>(K`aY zfBjI%Q%+&mp>A|Z0diW#(H)8hqPM$2=`DczXCZ1U@%RJ_h+7z0y25e%)gKSFh+L04 zW?Z_qYOuAIMr0MdQSaanoZ|2!)sRs*<~PaHKVy_D=4`K^7t(0b2^$LvAD(jZWdYu{ zW6`1HghB)@49gs;4kgp753SCVgxG@r%zmN7t+vF>kFkNzSEr zGDiJXpd;vIfRV4%bDJcuL^&6SVNU{MdLA)86upm6Iyc37@^h~iIwEo66k_UKSP8Ve zuB2!}v)e0C3G9WSnxOKGQSi^@&>_ZLbEQckV*)$cQgylFt`t?f z`p3KF#ACu>K*O;WJn|4KN~lwGl#qPI^P%O{&@0-Ev3-?U=hOUUHb{LnUXozLcr0@J zrGCmacT^^2)Dt|NgI#MP6sq#gL@L6z{R8K7%bmJLRh=Ao_n)FFL+%n=0*1?-42DaG zb$+TJ09LE4j=Ja0S;JaIkx&?W-E>m9QO8&A3_IUj22QlKYpx-u$uy2DsZNS`up2Ow z@Z3Tpld-Rtie!a4-`>b;7Sc_wbk%1OrJ1$a;hwT8GUhzM#A3bWFZGp32ASBSEet;- zX;F3o?}ZlVMa$NBg$tLXw&Q|xjny~DUbiVt4vEI^#E1LYpC84_x7m|N>xkazjH^nX zt6L`Z+QsBqHR{uKK4JQ!4srTvStEAt>lfc#-60qL{9&vMfhr8Ee6R=Dpx#@Iynk|b zQyR7+KER@`dG1JswYAFqUO;`Geq3oWq4~i8Hql2MTA2;?Qn2SPmuO|H+A)Rj#LJy- zpO!8$Cb8VuJ65r&ICPN*p~}e?9Mr)ExZMD>`KHK#|JN4+3Wb&-$Rj>m+^o%T37c6P z`%3_9cT>UP^JRtF8Cp_f6Ln>iC06)3Uc%IjZ%$yhG;j;LpK5C_A7s|CLY{8T$cZ~%2yuz;Gn$RH-d-iGqZeZn_LVHr@=>%d({9jG*9BmBQ^$Fy;i!e7;C6~8 zO#gV|Q5FWZeIH+PdYLGj&IlT=4e+)%^{k^rSE3{(?|aQ_{8hE-VYM_wR(Ov?_x6op#m1`sP(kzQc1Je+fLJIrpf$g}Vh5>A1J3|lXD zF=+)qQDhB3-#OTsKA7D1*=wuK#QM-;d-Dz7^vwq)7HvhGk}>3gd_US`%=QC(Ou~^X zr*>$cmV##XM8?WL{X5P)i!^9o64P4Eqf5Q3(uBT&$& zd7q#ffC_?-EFT3;Ur6we)v=;c$>|eOLXAg1SFem+b9{qhg~b51FHK%G6G2|$4^56##N*O9eb~8Z}>{EYT;x zgmovwg~FxDAd5q*9gZ*dUADzV*iSt_A}X}%l%GN>cQZ#{j^4q&%*;iEbVL*UFFbM` z-<{x}f3x~4bmZaDCqNH^3E6XosuZb-+}hSnkU~T9@oG@|J-Tw{`I2P?G3)JK6Xz#E zwn@sQTG<;{U!>hm$$@;a>ec!g@Xm7ft3`}%p)0Td>A&+HIic$8W2rmQJOcO&0|VNP zeFjBEoL;TL?Cw{t87q2CJxAO*GD6>pcxJRagWkV7vru}u9c^_$K@>gLopu+NY7vm; z&oMu`xZyHgA_sxGRll+3F%b&R8}BqTVYf9%x+1EdD5J=AQsu%1+KNYc>^(C#cu?@N z|8j299R*n53{CGv6kD!s(<*oSol0@YjjgwrHkxm}h&);ZlT1)RZAB4hlC8}PZ-ok! z0U^aZa9{3@AOMla@=p9!!z(mP7TzviD%kpzaX!t$kSbz;d{VecdQ~Kj0Q~lcL&Z(A z**R%uCKi_E>Z2-$g`WaMhMz93_{=hSWl95DnR;#8_s zy0XG_(PSFnWOr1Z@CS_i!u+kAhX(O08{O|51v-a$fY32S6<3L|R;D;F?{cdicS$od zFVv|i3A>P^2Yd+1$rk!@eQ+^K+AXdpbD^kf!fZvF)z{45X?*Bt=lK&!sS6WkMc)t@ zEwr)rj%tRB@0ifGhRA6;{FObkvxby+IjHSTYn=N^`Znb1r@|p&(3#{^j*+H@mn(bY zckhwXSy{dfA+vZB26~v|SlofOv!pNu$nT;;Ndb5lkXTpm-GeS?<9MUar)y36z*uM@GG;H|nP+`aZ!L$IqZ(gmVi3pR-x*8uI45#%TO-2!)3=8oXKDxJ%Pl9WDXiI{nE`?7;U(N;*X6S zey#wwge=L)33y{uuyGoMmPOp$_^U>&z%Bkb6Xe7+aR;S4FzFpY7R^U z#nL>Zo+vFiNEm%psT`$I){6)ZAn zZz!;nEE(N@-J{1*o%*!Q)0Pe!b3LB%#umKc7t=|z>Z$o$Ey@Pv0bZP~OHW@<<2;QSVUkCldAno}4K7y|%kC}g&Fg7!6hhWmu?#?}XA zswQL*UkP}ZkQwn?eRCEjr;5^d*ss%ICjctoTo+V)cs<_r9SAWI5dglh;?eUtbf5G5 z0H_>-NZdWsnHoFeP!t4R?-|A*gj6I$g#Z>;Aj_8hpEuVgS3^_7fXrV;|+-q82Mf`5c(Mr ziHdjkfpJ*z_MYywpfIpQCu#bQ+jd0BjBjWWxG3nlDzvmkYqY`VkbNBP5pZ7+W;%#G4;Qky2qlG1l2T0 z3C2>5Yv@!A;S@YN=$)e{WpZM`#M+3jiq=AoK^lE>*2m#RT zd)dKKko^t=wg6Q0-grlc^syVm&5Qy*zT3P=urGB~7zM ztq#SjYHTrtM+dR_B`P}%cZK^qsA5dWFEo3p6@BVX&JpS^G_bpYM&|NFZ34-lJQcen zgWwK1%!kU_t*EUrQ=-tL!*k01%VYiGoVBW+B}}+vLj0&zw`ml=TF|2g1%*S-lcPb7 zaGck70`G{6V90R4`D~{z_UI2b-xcz@etxg1*JLwp!J0AO`$ja1Ur|OsRjIs?nOnXv zKi|fq-U74ONe3n58x~pB^^$|fpmG~7#u!IZsyB8KQI84AZcVs#OBNWsD(l$!F{tT9 zA-7g%&XOn|EnO76gay_$rjhv9_HiC-K(pI)2Uzma=C*yuMt(r0VaW6H3ZYGS|Fcr zD|BDFlI*}AD|nU|E=bu2P)IL1ug|Ow3?yqGK=VM2A1JUVaD8fIZfmx=4y30K{8^^$Cx#oGk@&JSM!0<4U+kS zvFA!vWM7<#)g2Q;PsE;m+=Cr55MM?`XB!DbCE@uMu@=dLOENq^Wg!0eqbN{}I}COaA6S_j+o!e+;RUI-C8psDMQf=Qf@}M?8L8 z6)zqi#$TIPa|J0&-;uvWH+2ED^VAXUwCxpb=0!$>dXS2sx@Rq7_=+E6ln$$$NmA~7 z5X`^?_g##A0B(|)D$4o5WCtK8?PO2kKN3~W}yO3#5$(KA)zMKjk*Fs ze9u{vlPbpuf~!XvugZSy+#L|UkOwSBn+|n^3*e4&ds2Yb0|!BGsTzs84M|XI;gZnr zHKp|Fgs#-&ooXAorNYE_d-ed@>ek9&!o%#{>UOEKhLHZkkztV)y~l(wF0N{CWGW_#KC0rgd)?h=LmQ$3f1N2lfb+G~Q`&rWtf;}YoY zv2E`C5Pr-s(#T39w~HJE9{`?yYxQwVV(N;ue445?HZ zSFsj;-Xw=Xr(}J`a#uF40s*pI9TTiz#0CSZauPT;t%fh^HmXu7+tB+X?u?x?-4^c# z@NuOzNF$y)Vh)7v<`nbFk=ItiYaON{WMo@|VWV*Inxyp`Rdz!upyJa!)MQZ+jD!3zzVY zM8;Sq7*n!uR^F=&3V^U8Vc%2zN>c+rU%7TltH-Uw1fRNO&g;-V{}b_PHdd zhc@=UT*GtVY4EW$hsGJWxj^ShEcwi?#joMVh?D7?_l8r;?|h3s2ao%&_r!sz;%G_B z+NpP5M$_9sE|qi{2!WD3QESTNo604Ba4DBa)K5waB~0voSt!=inP5#VK@3A=cE2T>3gkC*!|4_W;4>ltMUb+>HjW|8!)4%mJ{^t;?zb zfp{Q$ddLm{&bXQzV`>R4Y<|jjfts?{$dwL|T*~wwQwL1T6Tayh!j@HpiCuy&fEwJj zQ+R%e6Uc#J;1DICeWgGJ*a&J>|??(0bC-sMP>1w;Hm808|mH8^COqGz^aYb?? z&oo2#lwG0L}UN0?Yyvd{Z$P&W(J(%)28 z4?IgKx__tj(0z9k_Fo$1>{Rq{7g`hw>i`f9*H#LiUzY7s>072O0-L3Y?0H#3+IEVd_b-X2z5+AD z&!;_FQ@MX=HHw~RX=#z{TVA!XlhxS~ekB9IbD1?YI|}^wj&04*-XFB&LePs*XI`(t z@fSJM`*WCzH^y|db=i5OonGP}06r~IP}+_+TJLK5=2TAKXkB?xmAi|jfP$NjHFMPj zm-M0eMWjHB_0~M*))uW7Sgd(ZX0~GDnHvr%i4$hsZKVy2Qg%vHe8@$1Yi>me#2sfN zmScywjjGp=6@f#WK& ztIm%UNI>Vt9Wr|@{TP=UlgDov@v3f)<(?zHS@De8OzeWG)!b6{ZJUPDaV%Jy(=EBr zX{wN343e^8s2_iN>zbW9X?|k3EWZ&R^UWpzX9!?pgDQ9RzW(W?SW0R7L{yll{i??^NJ|)rnJVMXU|J%U-iAO6N?b7C34q z3ejnW0f6ulH=4z8VjZ$@BziwPl8oHfyMubVCIc&IzlQV0glL(b=O2*66>4on4FU`4 z)6MAjXf-H$bD8T_L|guS0ZH-sv;YTNT24%`3}cFdOV)p%_KjsU$NVW~i(aDXwr!IJ zawBsrmOq1%tK$fzUKt2nT}fR5%2oyqU|x{vkQD!xkEV+L%Qj{u{x@k;Icll)5zb7T z{siRez&d;}Y*Ig20h3CeTsm+NxSZiL9uw8WEI$DTVf3R^JpLo|YikpW1?&ZT=R~Q| zDw>z7sOt#?k|T{SiCUNoQS%Y#7tBtj^vh-@nTY$2nQKm4{JASY*+MEWI^65M&2o^w zuN!uZpKPaGw3aV~HTRk@D=`hP&-PDlV{M{Xj>B~|@);j{s_SG6GlRVejJS-v=8~`% zXadid{2s<14ofEAN*M8Hmgh3XlMAchWHwKC`UD>;MJUL_v*GIz&-5*zT=ZdlB9aOB z?usLk<&~OwyMCRfH}s5Y%?|q8qSd!2oBP`0^7&!H5$v3vC@%($3yd3i6aYRJCzjSy zu~b8#!<34HgPq#fLRT~fOiC0!#C5&8RN;?exu)jeAa27#gjg=pfy@67d*2;SbsIli zvLYc0A)=D3kUc9=gi2PNL-rnVjy;Z|WK}}8A|rcb&t%V%aqJPtI@Yo0d#kjcJkRg< z{_|dM*X56M9p`(0Klf+dpM7_xc#xd=nn)HrVNv$Xl5Ap{A7(&$YCF^l5Lk;9q<-hh zOQVHxrn+eR4;Jz+?lV!W#wJfGT;wLNuS428wu?4FfmIACqtsiD5~OkaK_%xC-mJ+z zijqDw!62R({KC}oBA*!;UzeTCo|{w9X~Wx2ow~PVdC+US6fcABwv8f}(7F5sC*CfL z*g9Y3W*=H1-tDq7qTJCJAi-hZ!KTK$RBbAtK!^d3h^u%}>6r79ZM%@UEG9$wF-2Xi zV&Z!cxk}bjgt&nG(r90a%TYeK`cY9Wm2ueZ)GVGgvkb$b*p^M_L#R4vk-a`KNjN`R z_k(E?0gzu%z7*#mDxmC%OMEm8#IsY-_lZ-n4_*o^Z9u|Q95j@jc_D*>IX3V{uRD{= z3EXEQ8nRV*w9r07!fm(s-@HL|Ukn;!z*qGp+DK(-f4L8sZ{h6d1oE=rO5e98TX^R+e@TtJnP&C1`v*@JpIln8TvxWYA4}rBvq(DgOgU&&BKKxb&Aw zuMOKxyeqgq^i|Zpr^C+Tqh(ktEGS|c;f}jG3@>e4o`LKUVv3}Ciw^AzQ)Bw4?d?4N z)8=Hcu~&H!*JXd&@mJ*j_Cu5qC@P1?6~lf-)o*|QWpM)rz@huSjs6i=KVtpMQa#Mz zDWQer(BJ;|lj-mq;Kj*6iK?vT&Ho1Bs2q5zC&9eupO*bS3?caV^QKtQztkuH1I|A$ z4xD2Ad9<9<#1{?vJ6iultnCMX3i$j>a_1`mW6Ne-jqhLn{xdL$Q$VspOXL3|gyG<+ z0)@W(KeF*JTRTSzG#0kxPAUIyX!;xEBc{l~Q{k&^|B-<`K`{5!*;oG!LhCs2)YOL@ zv;W4xe?{zjY5IRc#G-8c?Z1UoC4u8{7ge9#LGow9&!0dXzl*yVGh)O7#O#)wxMW{o z*U6(_y~;nTgB|9kKZz*z#rpG$epa$&>0#eGbq|}G6`_c9ohxu-+rk5HUtLK@pp~}%D)uU%D1?&q{N%t!4~S>D&05M{QM%CVH9M}?H3ZE zis6e>4pUc{7PSdH=3(dQs_`j#{hg3) zJ5h*~?f3;xW80@CG%9w(JB1>yIG zopp9R8tL>xtvr%myyNuI(|PH1rZ_(W^7%(SCz?|=O3oR#C1u?iu9Y)BA1UheerBM&FOdnbUUegkXG<19Nifp7smh2a3XK!4PgtwO-tJIiwe^w;dqPF@@pCLNr^?e{jPfr zFY|7>CM92wXc+N1P=!Z)%q0H-A$u-85f#@7$RkD=DMNVeL1yUotUPy+vV@05c?Fil4Jq5q_XOR3YfTV54}3y#rcLs1sbx7Lu(v1 z0)feK!A^DsTAk(TrVfiSOw{>+l_6X2rm^+pg~m><(`s^0`IQ#48M|zfgf@@7 zkSLJXb0Hgk|E?sHTSTdLV!MayC-gTvZHEJ!dP9Ck*U{%#q&Gp&J}YIu=9)4!iQfe673UV#GgIc4pj^0%^m}TCobiW zze;@nfHgNyCBk`i%zC9eFCeNvzAqnUd<*o}TRzF(#34L#)6H00LPcbCG&;aARz5O< z{TN@$`x17wDSvrURnR0thDcM0y?Vu;qbSQTa0HDMg+6}$JeeL`3R4*qtU6Zmy5=S`n_~OAZ8Stx#wy{mp@KY+5L0Dr z8@@9I8GAk|A~zqd$md*bn2ePTRSI`1=We>0oq6l=LYQYmuE|zIqk6Q21D*5ofHe%> zEfHms_tx@oRUi0mZS<@1Xi49z7*vyaKDf#Qd4to?SVNg&@j_EStLp~1n>9tLs@S0J z99BeX(MZVne97uUY70nhB$mgm*}(Iwq+u2Ize?&Y$*5V{qCmq4kKYNgcoYwgk}e{| z?ntY_ZS1y7QBz}q2-T5x<-+x0*}IO~d8BDn=PNjxV!c>n;uILFc}L7aIa{4~eLkr; zRoQc&+G488ue|jhl+IUiD?5`Q2m_|ClLQALCtzm6z&(tdnz~G6L!5rjdZvM9S@Q+_(e1DDegK7txYGXQh)eW z1!rv^QEk0qw|44IzSm#kUIY?>P4|P?60_N{a8bIdcjV(F_UK`^9ogs3*k!B}*`CzPHXQ&;v%HwlOdrm#5gz`6jg;lA#A8}D@;3NKiR39!dnX^Bs*w@Y;L+KYST&J zA`96z(x&E$4tk$M01=wF@3CbHyIa zEQij98Ltbr6KXj4!nL*F&G7KX^d~tNgML<3;!&@$?Q@i@vUaNSe>|o{q(E(L5wqLT zxWY#~=iII_4oy`8dCejvrMYz=#hbnzpTAxP+f&lBv>Budl~)<9&?ke`Z|rYNx|uZ; zSv^7>S(v1f{^F2C7_ro~@qE?}zKmxh!E#KpAvei{?STT~*_%R2PlFlOZ3y8BaBZ)) zpgHL#wQT@sK}-Ww%mps<#QM38;}_O*lStuyz{fSa$=*1Lxp5$*ej)^RUmt10=wJ+G zSY9Yzn@&v3=^{*tmPKix25){R?~+D87w(1^#n0I$hwsw{^6Ne zAert=e;G5@dB&&$5#2Syz44^Ew+`I&$v&JZgQ|OIQcJ2C8U!ZL#Nr)cPr|;2f|1e) zSq{EEC)6c%UCX7RrjxR)56v6|wKojmbh3xN@7Nj^|Cp&ucD~r_m}ABI`_@ z#nDK#`+)>fZ<_PzcAlCawH}#6OLz#KeY{@)o3Nw$R(FzwrfxK7Vp^q)3{p`N@Hg}J z%DyyX1%0Thh{@OM@xTvP+wVv1d7zwgy-J5TYC!u*1Pq{!RGZjKty zX431Ea=izOn}S+Zdj{c`PW6Et^GzZHwiHG;ZH()1JY9fpAscSgkvO(RjSw6}Qy6FT zt;4}yb)bTF&IHNYD1YK=zI|#!4{K*g?;pmB)|RzVdEv_s*v#qT-Z;hC6JV4j^_17qlp{{;qMM|`erm1 z>4%k>3|;2@>kRljT+_S+lBORzj$icnfUTIKo|loIG&leFB(K{+%%R{5Ucs)IRlOc9 z@jF-j^=aAU=~^ybGj?3mQT4*ys6R+u_PAnCw_`|QfoNTGXi(Z|Tzu4moehSWt8=RJ zb>dN5>bj%By06%Rsyl&Vnq$S4KrQ&>rx$Xn&R9Shu7OUViz}KCo0Yj?W~{42WQb%t zW?WNA2QNhI%DHzwLoo*2=jz5o@bD?(gjzN`QiRv6SXr=?{m3&3gOo_BAnD{Nwl>tp z<1xFD`rsAK;atc3w5CMHjEGF#7S>FwB%#IgP~0OKDpEaV`|#$j2V8C3$fTdW1!y3hB*{O0Qv7w2&2=@9{fK%$dy;>aAXFw3_6Ro(&1Q9xeHDIV)#ggb-1z zJH2S4e3g69-K1uC#jEQED4tx^YC{cL+ifA!m~rPuCYa%j7I~`3r#L62DhJ>xwpEGW!-<$pMnM(UBZGiw!g zg?2{fX5%ZCud@qwxD8}mhOpTuE!o;Mf6tBarE`Z_jIdx7tSXNfuB9fwUvoe3ic{9% zE&*er3G^Wb1v7;)p0*lzaVg+H@$lG-WYTq8-L@%eC?>?H`Hm*XV5iox9Nl2mE`qrvx#bJ;slBgP&N3vT$DRt$tXhw->4%Ag z>pn%*WLAtURA`?{Ww9aFKmXBgtlAQ`ps4&Zd(k`*DRB**pz6)i(=|4$73qITdvz#4m|U59n>0YEXmXon*WXA<{^%zt#32% zSNgrtD@7o2cK9J{$I?R(V8{~VvT6(y;1*fFw#&Z zHPZHySS*Zz(%K}j!dfS=f(J|AYp(~XqkTiGavYdD7y~J=QPyKiVaeD^v7bzLd`wi3 z?kzkD2h~tSabuTtbry)4PLuLesouwIO3N=caleeJDJ)ja$(7}7aAmE=^k+8lh87w+ z*?v6V^SB0#7B!WP^C1m4Re&PXFPydY_Udn~zS*S&&W6oe_Td!lE}c`AcZ#(9e%!V$H@WaZBYcCF6}6ZFoN&QRTVrb-W~E-@~1a77;zvwVU47~tA4SUtF20ebA{KttFi-gm;$2G|U8 zA^e=O^`dscz*^@4W20wzxF*dyvzQ~3Wb%Rcn1Z`12~28{C3F`bxXV30W3wYdcsZwt z=*$`s=s?TDa`Mv)c4bTxss%Fv^1EXTi=?Cx#do=*6>wHZeAAOMWGq+wgjWqZ!_Zy= zRwFU{hpLn%FFl&{9&2gwPgJI0N}kUNkxR;h>6O zF3I$u)LF}QAN402bR@%rto%;0ftUF6?L7Mz?u<>9WZrQACHFsCouGU$RlIB3d!jd6 zRp@sJ!?uqpeWjRqgOdd{Y=z?O@x2q<^<4GZZMBnb2fbcKm))NI-g!eCr?ed zx3D~OPh%l@*U|IONe#LJhEJ2)grLb;i-X*>>Ag zZpJ}?PgJGFN3$MWajiT7pGGQ>)vMCJi($gzOa(KeYEkd6_=j8#cpqVs2do5K$vryI z7n>P%>~(k(`HzE_#}iYeIh<-_&O}x}?V{4XczmA`cIT11rkMJ-v=Dh6g2uXK){E%) z>(O&%A!a64CM{WpEoUONO7(Pd8)UGx{aCQAMi%V&SnmXZ88T=pysM~SeatYbr}?04M=}P_GczUxt8{_GL8eUu=DlFi3sO>K?wF< zXfO`_b{Ebq3XzSBJr(#|KEQ}IoSwssF`nh-YOB--Rud1>0%NEpqLAU*Ur2uU5#x*{ zi0Z7wpF2+YFgyaM2+U(*WQ>{}2SEs(Zdxv#%MX)cDu!=TSR4hN+vf6*VLZ}0n1+21 zv{yi2P1xsT?DkAna$Y-Ci;Bar^XZS#yjY=((dN)L;f0&Mq43F$>tvLmXuYmw6nAg= z{lXmdaMHW@^C*4h2NMnwby$4fB z5?EssO*@SoXv9eOIE}pwQaa_eVOeer^@mUQhBI7*>$DtujDtn7WP|-Uhp8NNXaOys zFlVDoLx=9Tg&)G<>$TaqE@a%4egj%^`^xo~kJ>x#^;hZFe5LJnWzY#(U3 zG;7Zm&ayV_^v5}RL83LAM89C*2&o z?o8E#WBeFP#p2j@Vfl|*!hjY5-G@iCVV>MV!}eKYqddenqxIHj+Wlo#c+y2o)#euI z?%+}O?92iXuuqEPfjE5ULmHe%;6I=Z!g(Vp5QtNs(u8%fOMyX?Lo_d6~k zk7Wp8*<`rJ<%Y$GF~$xKl+iKpF-eryQ-w2Uh=blS1Xm+TW7iECe=D;j2y`@s=xOOiCWwLT!4-XqmyV z@GE4euErllcjslkkH`)r-J51tYGwj_^+1^qRZLvVm2v8C*cTmi)J#WQ=)0sIn+l{{ z!6TwkflBBW`>1-f?Fod+7+ zYA_|y9h=pY-AQlzu3;-ndF~lG+a$A&Hm&ikQ<0=8xvj#^$?jWMeY0Ch+{~^xwj3#l zS$unr)R7u(lo&SFr&>JeOT)4vyghN{s|Fgqif~5q+<6);n<5}&1<|)swG591|Be#E zW~byf8yxE)n(}SC^|`8i^f=bz{mixFt+WoUx{0RH_0w(sGMjhDi}&F<%;_0?Z=9eK z#Ia?dPjPe?Yq6XeNie`8m%V$o>E3Cqhb-+bs`P_pthwo`QTmxMiAUzxej|HhNDC<= z^$=+dfh|T0MGgzn6uMFW?#AX*6Y^B zXY8FHm?k7kCk7^SYxh|S6+lecQWH%&jV_9^`wrkcPJ>y&f=|#B9rC7BBN$kW5OW>5 zu<=NJEo-{pR52>Tw;sAbcG|ln6X1r{D9ZCYzNByVD1CIkNerKw*md#aom0ebxo@{IB)jqkn6l|ufZz7|N%!*64JRtSR!Ld;(?;PQLLmlWFo$H0$ z2u(~UF;+ZDF4h#d&`IyG{+1g2%l6DjsMlQ5buAAMGi8?T|Uj|tGQ*U`x$bZ2Kn7R)T=7?;`_WwzteT8rI5F&s@IW_>2af;m%aQa8jNbr5SV6({IRYhKru2XK)i3`Nm)|apCtC{P z{nexRXGG$MVE~LxD-e@?-;2U8n*S@JzI?EM0dgA=x$RjyGs1VCSl&Vwke#lZ%NOn6 z>P#$nl`~!xmxH9Fqzv36Ey3VcKf3>n=H+WwZh9XYczaQY6sKYjLyG4hW!X^5c{j@e znjtsO_|fx{w>=E?JjN{Z_3ir#5)<={9TZo#jBR@qQ>PqYi3O{z1=G%(VHx8^Yb8sY zTakUV@=JDotAB1KFy){h?OHsUef~euf`I^k^+>u=+pl@foelqt8K5JY7qQ%mO*OQr zPyFFWzx?a;3)d)f(nP(6f0V~xXbza>@3y{^oWIoi#*KfO@VnFcuWWs%JN~MS|H~?4 z`0%sf;NTudeJLqB(#f!ItAB^|uS%We#I+4@F(496z*cSw&fIGTd(Zb>2x=PqeEuRN zv07SMGVd4U=O2}|^8WK$*k<6K!OYHa{T#mjBkW*E6e62~WZrb`P#68DSD#K5e|ZA{ zmJ?-eM~5Z!t3&rqU5IN|V84oNRT3+Jq`T*Wi|w%qSm{UA`Uh17KkuShMRUCFd|yPw z)U^$!+eae@PXBIqU$=>k&w5{c)tlEzDO7SHvuijv#dzD#Faal{Zes4n_L!hOh(r5h zTsC!$jEvw_PDMp0JM)r1egBUOYwF^>ihLK_WYVIagS-7J^-$NS>DPGzUZ3%F`a$X2 zj~^$cTg)FWF3ywdv<7}1ob}6b`w4(Sf|w?~#2&}QNaPV4J|#H-Q@~-8d5Efu%@<^u zrHQXLG|$e?A`9l176{gQHO+(mh{vdIEas1)qM@>kPD+WP=6R8L1x(`ot2p_oTZdA1 zpfE5+)GW)FSzBA*>+S7DmRy6w;2yJ{o@Yh4TRI7I1pjQKkV`~yJD=*J5c4m3U&H5o zDpWL)XIt6zuVQ06r8YGoKT|>cJobArJZ`ePMNUpmnJ(#9UGl=h!Uz-sq~qUmJnwTO zf6w(to6mp>K|X~ZA1COUO*}dy>m?KJ=N(dq%-4VG798VZMJ8qD=ifo11_ zK{pb>^<|QV0SkCTz304I4Cl-?fBqcs`1KouONd4#^`|`l%@a6X0Bk#C+XO4rj{M(h()H-%|9~I z&rjXD0U$hCr?oS$>mTL)2ZZPX)yB3)rn&WySQ^V+YcE2ClH&T00`Msk9hsI z==Yz{_*cBX$LC-1`c9Ak6|e8b{QnQ}5;w-LudmOlypXg#!0V5CD(R7HQ=>9|FR;X) z0mE;B{)+;J;lzSV-;P=Bs_~wlFV#os#%G9t%btM3YfJVC_;gw$4pYS6Ji}6qOSr4v zV`1*k!~}e>F~s74wk8q(cJrKOW+!vQ%p?dZ{JExaC{)x&E_cO!jEaHZqXm!wiT6bfrVbO^lyG% zh#qTJQ&Y34SgVEFz*Aj`p z79RbCFc^-Wp57blmxs=@v^;-OT*Yx09LUMQN$4^3G|g zb-f`^hOPKk-LLIZKP`>KN=P(Uwy_y~cwb>O=SDDrzrO-j2~xfHq`0O#a40^M!-A+$uT2bGNB{b((QX}VJTgm^XO8R!7d(}!Rclsl4^Bz^#Z}B+|{e+ z!Y1eeDMF4nBfUd&@jg@Knh8P~-A&nR+qF1D=ofitjt$P7{AtekH--I8U422%9em)~ zdqhM;&~VEF@|603AW>0zaSF&3f>jAP(j1~V3WpjY17uZ=_c;z|u&+Ctd@~ronM*$~ z#z)f2=lfDpQiK&6w$~&g18d&SV*gxY)OoSLz`W;};E>prxizV#oGOpWU87hZNk%6p zy&+BoR`ut$hn4Wji8n7*BJ;UEz4mmW`1puJ(<0G8u~qcIXot?glJ=J<(?0+R(4fhT z1%dSBud?IRt7BmYf}D~K@(ScL&u96S)@7$e_SB0-6nqd3%^=%_I`oeeq8K*`b0H9j zfPN?lav+95E(hYQp#0fIHD#Pxe_n{X09OnNF)xs^6CA} z>{u6zdTyUG8yUR$5|XV$_szulJ-=vP!J?(5l?gH5#(JOvK$rjzciEeyDjsXd(No=sXz`+{cd!?KNF4qK8Uy+Jn`vPv|YLIE3f~3*H=`44}Wp^z4-m* zjlaC{PnzT}Z~Wzrzr68J82HN@|Ad*pdgK2O-VnF(71(Yr`@{#G7y1vYwcSfa=AK%D zvdbyHNtjKr(9+^^PQ3@*CIan%;BHiCM+8=1w$!eRYIPwsGWG97ujj zGrCE&wj#5MY0`O!(shbm-DLD};A|g*Wf6WhlA`uwL1<|QUWT^SJByIqEuOYpR-yES zxDb7BL+zm87q@}$LKH?){R7WVA{)&<6ZSgsjroR`$bhfz)MV$B+2X%(03HDsny(}v z_={_Su){KT$bZ8j?4aDy+0H%f#DUMMsF}o7^g*G1_xeL=`eulmNGHP=CrR@WTA;LWFCjSC!a3uRoczr<)gRtt#i+I?7YAY0scC82 z8N1kA-tsOlt0NmwFRXg)`_!(tyNj&N+Qx%1h^c&dY2gWY@cIC7Yt@b+f-?UwSZ#zW@XNoSK zLUt~~U>*vV8%#so!uI>}vCJpY4_}WG84o%gtU#eu3Y!*gz9?Z4^`Fg?ZyMHdoRasJ ztw1>&EtVj<_ng`-bq%VeLE<^SBU}2jVr7N&iyzS3tluOXXp%c{Khk+b_Br%^Upu-x z&7gTH(F6BQ9bfAHoP+cC(VW#G7m{BO*&evD*%17A#zCsleSmVa;i!f{mf(76a@P@> zPBE?{y&E&{9$iRE?Gqt~W;$)SEhuT_&JmUemCK9SYw=1H^fU07$6Ooh;rzI6YU$Fd zX#$hJ)u-PCA=nz~ud%p&M=<8vJYMv5bS??X$$ZjQ-8{y@5j|2iV{YDg*1;#qjv0Rg zPpav@n1H48B2?Aty@Pp2CTDl1ZjW2Ji^aV9vdXy)Woo=~FbgP4lcR6b53k&l@^mrj zkTG9!Fi(B{q7zE8oUYP|jaR8E3N516?x9>2GPQh1JZ~|qW-NHdMNS>x#c}ZzgPr++{f*sR_M*y|pG58Rq0` zC3yTVpiXJnbPiQGWE-JlS%`pl6j4r}GvOD@~AWwxp zjl)B`Z@u*S%wrT9YQb8>NpkmD)2)ItF?O%D(+XG$(Ti*YiT81hiP>z!-()e*tg>;E zuVng#A8@g}V_O#XJR;(eU~-#pO>5C@?aBGo=LPUaxNNdW1T@ZK7Son|uw=un2$rfL z!hs|0GJq@?_uy7=#Y|);?bpaOJnMMY<9Sn6W0LB`ExNle7b;EnISuF!+52lmKgN2& z{5G^$ba`}kCMb?wPp*VHMZlP-YiKRiCp@?>*T!nZE z7}L?sr*WvfX1Z8gP4BGZR3Z6=tr1FWISrR%k)c~hA|pSr<-_M~;JUcBErpvZ_icL8 zPZs8uW#$Ws>WfhrFIIstnFDdy!4|5e_+HFm&J&w=(?e&q7-1E1m|_l(w7%I2#)0&A z>$JWU1=&Np#Y&>8v3$r5U+N8hy`x|PRr_ZS0cTy;5td)=IBGIVY6 zg;?BFe#v@wkC%s|F~@vkoGGDszODkgi%4Vo;aUR4oT=>~jOJ?iLzltE&~aSrzQY9^ zeo9AkQe}JY_hIJIu+;13c1v&dXBppRL-Bg-QAM|xDm{+(<)L1R&+=6?mMloVx*h?* z!zkDai;#^W&;D{s{EP$y38)g=Y1&1c#6L%{T5PfL%1(KFdK_QO8RgsDXNPwAxLVeg z;|?Pd9BeGQJ&qeD_>o<=aJY?)Fg9)^TWoQj_Bf7h5Ld6G6+EXq$#_z|mCX4Zu1YGb zP;bp+CZl2HVsn!xVnWZ4?~-3uQ_`%leAs?s4VpSZ>)|5uIk}$jR9H-7fmnvbkTNg+ zlwR_X59fozGeaxILbyH(J}Iz57ThWYDZ{&aZd|C-+L;CLecbIg+k6V??^IyY4a)pd zbshB-tK2^z%|%DpYMRxx*B73qjaTJs7*h-n05N) z+2xXy{dnf%69>(UOmDju+LvcdHHFaQ!oHJ;DXqNmk}m zqeOV@5F(BexYUMR67#c_bjlkW)(4CtLY^Ja$h&>E@Xkc11?rICi1V;V>v33U!%@SA zY5V2N2V9{dA#Ga`-i=u`tD!l`#3k9-q1LVBTux`(X42oyHd7d9Go=i#fBeu&4MoX^ zYF}QGnyQ{s66O`5b)I~zeO##5exWk8OWG>$3ujl8J6u<%*oBe6r7fr5R`RZ~6# z!!SV_7k%MHDXAt7`=;?81s}2bqq;PEY!{v*F`xj2S@47yr!Q8TEEzvH zRE#|TIQ*H&#_*67hy1-w$`j#2XE-HRiaBT_DduFWh&3V((Af>nn~YjctW= z-N2t`BR+PJkuyq_*2RAC0zX;bR%tjAVr|oq=RAI*Yt-3%Yw+*Mx3`+DGxLrmD1j`D&j{I4qk)VT&%ym+-iX7ao}a+M@Mw<2$(nX z;iUEDn{TeR;B1NFx&#@=m{ri(j`-G>f(gC_bb?1ORwx_$!}{jmb{D~9+nytroX@uP zds2?1_EDV|n`@kFh?dG3C@Zu}!LoiGo_M>Qug z_ltd0<#7pWXsu`=+}j#ix9P1qi_*O&ho#}EU4F+zDfX2T`k8u{jej5#XtM1pE)Sk) zvNG!x=*zTG$hBKgY|2AzK)WvzG_dnVyv`QGeVb_jf?!jcickvjdcJo0sBxi= z0$h1ADQ|b3fIb}+Z7!tL8u3|8BB;-tZ4Re>bCs{CgC1Mh=6b@rY4HO%#FfSk&J|~; zy*x7ZrCBwpO``5|=-qd3vGenjyT|6Fd@;Dyc)2UM|b*JzJ5%+s^G%4o(u*MsG z4rQyY1FwM=j9Ba#wVf1p6vU{YLkqa`=af*6t5-Ls%B!>=3Bf!X2}GxZTVOf%$w|}1 zjbm-<4(qe;KIWvUnNNqI^qa<4o0{r)*@ScK{RD#Ii+R>Wa3U1=9natf@9H*PlSHgu zdB|nd!Tm+9>F<|%OeI1bjN>A`5ba6nd>(v25z-fGZoIN+&sT&AW$T59E)|hy7j;J^ zPI(H_I-#I0r*SPaCCA%BQ~C^q4_&PE!f~R;u`4lNs+0^$bx3;0lgNZF$hBqa8Sge; zDLxKA;@rm#*NF(ZPzm&)LAAl60n-t%S6N!Vy&SJvZZ0S~0Ks=#pC$ z1!=_uB6>XY?afw;^U6A1`m@=r;zl+FTKSqXL)YAPxAd|0>o5rrWbKvNxpwuOT7Mg2 zvtCU}tNmSPW3+=-=@L4}lt^B~-$`!7J!Q5bz1F&%8-p#|-oBqRPA=WcXJ1eyMd+cs zQFU8YP0uMaASN_5>6;ZP*QagA@2_uC&Ly{7E|)lusqp(Vo=_`tF1j{VL-_%kl!`8U zJUi2Rk+9%QYNA5>xJY6jhw^yeagjbRAA4hs$wJ90g$K8qa~?m^{#m+z(zMNuSap$E z2KsCcUrs=2j^@^Pq|mh6im~M@H7n=4$fq_|3g8~ra@Q*j!qa9vA}Y2zaud$;wU2KW z2qlWK^({3XUfl47TpaK%o1|X?zB_)TfKYx+1KfQQrE4@BX8J6iJC1wpiOenKh#C>T zs3RKgE&6#kI3YhoPT%UHgO)gGkBBHxeAE!MID=7%=96zv zC~GUO*cy!xysYojNn+m?Hf)>P+u8D(B5@jGtn7YYi;ab+spCfeagM5E>f1U0KjJ>? zN$H>=Lg`lW>z&Ah(lt#*WhvV(wAw^UKZo2w4S_{iXuJDn6%Khxr3}@|?Xda|%)c0j!{pU+kxyIRr0j%CU^qAUy6B3u9Vka@ zH-{7m;F~Qgb;^w;RjNb`!|OMR1V}o>-YtE zuPj1{3CqGZ}R>E_Rpk3yxc!JT5ygd^YbMoI8d{5T_};L|v@J4COHs<}DI4v8C&HWb+K% zw76|{1(+TpGOA@Az$WIwt>w_2S_)6^vThSFq>U7GLQkmHiXKhgP>V)R(+Gyzw0u@W2~A947^fMLexX3;K(ZDi$@$ zRgb1a&3X&_H|8Y?R(Y*X+}+C6SLjjer7K`?0pX1NstMZV0`BPB46$KMaTk~8K|qBk zG)2_E)yiH=e{88z?v2=Lbvn!KzKCZ&POaGs1D7uDYc<3a$2HIBH}Wuzb{U}is3H@{ zNw!?#*c;U}T-J%%ah_>}r1uS37Dr7BvvcgiLqC^f6XL9DD|ga4cV@fe-6_Us6Vnj| zX^+CD_#Iagd~>Y&WW?e$C+Qq3k_R$TQsu=RNci-4@r>KTzT4UdsB>zUdl>c0S#nZ| zC%E%hmD-m-q#LVY;WdqYw-Ks9UyQ8t)xX zMmcTGBOkLM+U@Ynn!U(tH%qzU=L%Q5%=+HX*cRRG+gM?GLl$&Ok9aGU5yf@4cubSv z%GRcG_o0K8dH$S~j&vR>~mPY<0$Y2&qb&Z3y^8~5eU3Bq)p zW}7u_hk6?ZA}CEvUp_Lwr88a|B3KzKmnK8yLL;;nMa4`W{^s3+Bmrp&L;gBSE&HB} zO^ZkV@xH8LKN^0>G#B5;jbfF8*F;#&b+8r=AMg8q$INK%^iY>K+D|o{`9LCVF0o+Cp;2c9RPg=NF%ZX`CjrjV;wNh=+!2g~J#3Oe1 z%*ESXf^0%1B4)U9J7r` zkPXE&MUxG@-m;*NNvS|-&t$+)c&#=1cuadADRClt-qZJhciPJVYJ}=1e;{{!!im$n zyHQ&Z&gwitLG12FE0FWi^jPk>W6&*myfQ0&?*w8$(hVcV~R29=~ZY-+c4D zUO(lXo$oG!YS>(=`VtN_P7a3VoQOvIP&UXaEBAy+n(!Sp-A4x^z;-Gip zYQ+-9m)unZZpTn)w6sBQ-f)F^x zg!8TKh*Q;sItOhDjo-_Zim^nd&4(S?#l30yiHz{~;RFy{S&o+*oL6D|NPH zB%71`hG^%^2L(B)7mCpi?a)Ms#*$==$U6h8d1PlF*^Omh5gDe+xHkhwoFZPm9`)Nh z3$a9xt@M$%i;=cF+21)slTUtke#jqI-qnh6+R+@pvqsXMU@ve-E+of40FizT=k zn7f?)xgZe#oHG3eT#=wIHdW~uo&91;N0E&)Y9Omu>>3aHJ*2n6r6 z=AZT{)o=3ipdcn<@0d=6ClPPQ|C_?7w}W?tOxhI455WsBsqrofDw#V9?6yg16IN3`?AIg+7_CehjBXi90hX$FXujH6tf_2j8XF%uL<)gDk<+cT@7<`D;qsBLxHPB^q(4E4Z z=0K=D_0~JfJNBp6%U9mbq?e=Kl&7<#?W)EBycSMaJ}pPvZA|rd!qxcX>iv@vCmly; z6*4u#K_)SFGr|Hh-kZkctf+S(_h#@x)G3yMUdfwacwh3yZi*0yvJy1PYB)%9C(Qik^Y$w#@jrm66m1V}W&Z{7 zzT#Ls3J378S`>cZx3B)q^HECRyis~<{4dD*9r$eYAc2c@DGmF-J@y*(m%e6zex=*) zf(fL>U@xG=k<)G`|JAR*(l#E{7$+Z|4cW!Y`G)oF<;4l{!9WmkQdY!&dn_5G&66Lr zf06C)5cQ{TZixfb<2=;d|EC}Q2;VkTMxf2v_)_7i|3v3ztnG;)*RW;2;^$v|xW)pk zCYHfJ&xHILe8dsZd~AwfP{I0_i1@rm#4SMQTcoKwYUt->f4^83C^t4IBriMkE294N z&0i7w9=*Sa*ru3+{$8k5`r@o%XKVy7%;pNw_(5_4a)OE;W;x5Exv~X^$6f_imJekt znLnt-7sRC)`sc@NjEL2k=Ue3|Jpk~94MB*IM#{(#UB*w=KR8;0nYu8_WaNPV)pDkvl?3}qj~6m zz9E2#QW@8W#ZU&}Q~wd6KM(*xPA`6`kKA_uRjmK{h5#~b_g{P0E_1Kye}mi;kFc=g zM?rKieJ*;AU)>)3&Wi7 z7Dv|$zR;6QzUQvdwlC$z>sRr8QMXlHu8L|rBA90f@LPxHr&c;Bnl`0E&i? z9FpPM0K(}!^3`~7FPK3`nx$t<*h;EI8iiNZ35>)DbT-lm4Ha%7xf7si#hx^s-8hl>p*0qiAFWwj@(VweRQ^4!S4i*vn1S>6n~*8+pr6&4j+C^P`y~FKHG=4HQ;8oA#3wM(ud$_wCKjN z6X(WKLdwK_%z1veZh%h%Dw|44br^Chl7$Lge7WP^nJtDqv4D+^Rp;>!$xLSX3uf1! zU%*Ls*>axkaM?PUjT(MA7cCW#9Z|IE+0rDa{5p@(sm1Fz zX`YhVKdr{65z>j*=1H|2I`!g8i=I})xZ>lUs~RUra1a)K#`g9ngpti(fsjINJP?yEBm4|WY z|IqbTQEhnL6X>rH*hC36r|NDX+iDPg;vW0W*@IMBoj}nfr3Wi`yUi|5Ud@aahqjKi^vY zzk_e`qc^u8+9gr-4=4OvVqsAz^B>)NWQtfzgoi7_&-L}(6~+MIH+7jb*1W-l)G^kR zgt;|zBF=T1pkruDj8wPc?vIn@OA$6<0%C9(JuKfPZft5=P7!^7k5tF(#Hhf@Oo?ODZEomm#$9$!aY>3E%tp{BWbic9pjK?sy>ZN2va2VeTRg35 zIOESyHhLfETqaT$u6KujiOHER)fl)i-&5~ax?H^@voRT90M*` z5^5y+e4D!yLTwCOMe{{Bn`t5pMgh zfA`}=8OvmnU5~*e^kb_~52Gga`rMr1frla@`2%W|*t?&FAdx%vK_cnG?!LZgvs+;8 zuo%+Q6H46w~Y5K?REHwaS@%}q+hECROP-K79vf-R~G*&wY{NC zGaWw$|25E0^4~lx7D2P=tJ2kKhZ#qbw=%1G?fayB#^4dM{{n8U)aP+a^LLT|!%-;$ zKM;J3qf#Vbr|If|=R426^ncI8{~xQePyJY`%QxV$3EK(4Y0Lfpp*)`#5zMDJ76%DP z|4Tl;Lq3%176ik9EiNHjUDsPo+ik1ruvN{}MzO?Jr_SWkbkCC$=?QjW)L1R%gltQ? zWh-^l0N?If%qFw#Tg06C_`34Vr}CT3ziyQ(HKhYPJd03$e-FRkgssu|7^GO`=@OST zE6S%875Of%!zN>)-XtMaz|B?VfL<@pe}ADa0*1kUrAcXDVcT*58a9~H+jGZUTK+9; z0KM)`!@$AQ1j2?8VMpvxKa)G}iSI2llvTwWi~=adtFe;#XvaB}*=cq1;VJv}ZhS zrypP&#ZWw~lFC&@mD5~9M<%?KkJwMPS=f`#TC+J*eHFT)X+^x=}1kIM~V6F!b{LD7;2EK6G=^prTu<(-93@r5>|D z-_sX_w)a@vrsPRE)hQ~C<1Hozp#Idl+;p@~R1?30*ng2A7WJv(tUKEnVX@Jp;HPdg zg?08h8rq(9p=5|ol_uNNmx>1SwfdxmT2L0S(O&nbBi30*^!D4uMvH=lW}6E1@&!gn zg<928crrk%qO*>fN2?N|`^E9H8RwGlAk6dnC_a4zh`!vnHfYhW~0?m{^A zy*}6_`Tfy+gol$^5ItT-i#er6am8Z_K(8F)7mh<0%6`$+YzLLpj9{c5jv*vxw^;$w zd(Jl$DfkfY?@y#$0{Zy1?~Tiac5liWb-Pr3A4@?+ zNy((}!9Q+Lmr!va>IybC&$%>&W1ckHi#2D`O?ru>HcL%-Hp{LbI$Tc@ZQ2p*K^g=L z6C95iNEaB$KvHx}!e=0hbt0eY4sKtpYK0o)X36%le#`dDa>)S>+LGlWbI$4V9+dQ# z58+Cy$c^x?7N$pC*m^U(+S7D;6xG+aJ{fE#(0r$Pa?$7D_e0$GIt*&hj<>+Khl-8L z8B(Bqx~h1aqoIiB$8YXxI%oYhbKoReRZLU7>8XGk`yrsG=WOqh+Y>OVa{nizvXpgQqp#h3;2y`w-%OKYJJ zyO-hLA>owriO&4h(A+$8aSPJP3pO; z#$(j{>H-~l?d=jsOar-fNEfuaViQt5HOpk$~7+Y1PdtI0|+~b{}B$vUJ z%VW(&Y3MT!&EOwne+pbOo==zRUki$Y&3Nrj+S&fn+6TvVJF?U-^}wY8Qyzx+bAna1 za5o~(^tx-{FvGYvuI(7pA5l?{zA@@Bq8z3K9BE(P()R?iuobc;Y}?+NQIYAUjw&Q8 z43Ckq61$x1lVV)N(re-?Q>Yh7Rc#T#y_tMjmgj%BJ&87dIq&jWiv0i4hY$YWdtOB6 zyq)q=J7~46S6X$y25vU{i4#-vzZ$EAen4d)b})8xnB&4jb)I=fkcv3#zSaZ|k@t8x zpu_j2=y+7ADA^p`Oqb+v2UBh;o^^lSoy<7twk0yqzwJb0R7Q0gwg7wVAEON#mX+T1 zJ=z7SSW72hEtX_CH1Dr9#HbivLW$ts3Ao<^pd-KDDsAl7f1EFKXY%uW%{j%!)AnxL zU)hnM1{53Jj2&zy#H>X~OE$dzC>WG1$vjP1`$9|G`G}X})vqq8T(Xn+dji`OG_`kq zR$~OhhWheol8RkCvFRp1gR$Q%`Rk1Y*g5?0URWf5~fna65n|c0VIY z3Q$K#1wpKK*;<)Co?oZrAX^*lCeb?PKZRFRyUCFse;xvE`_a{O_nklf@_qS~V2JS+ zpRs*gitYXg!IaZf=2h1F{y=;U{D^PuEFFcNdH|G?u}=V|(t#cFd`>;5!d1Y#5l*E3*!Go)Y*lcl5sD$Bwp>3Y+K z$0HT6_WfJk3+xLN?=sQnwV1Z}p5{0(?iT)O)@on*&~2g2j3!7ukN{cwSW~Ilbhv9V<*VOkkWIu3dQRGd!;#hD@Ias7Kf@GP zboE#1&tf&mq$gxd3U>kU@&|El9bXQe^~fe)_ab%Q@0MGMbKjrr;ALa3dR^i2nUFA1 zdJUnfb8i76ysnM`!RS1)qIEV_(eB%MzUfn3r@)JHC#O7k=ziOt-exDGPnWnsTM#U( z&?Emb$K#I3tzR-c=%&WE!{v!YvQ@mk{Gm>;1Z$M$Xa9JR(~i+Gp^&ks0w%T zR`~%PzYu-O)%`I_ea4^ovOQ;c*y%CIDqC8G?~{CYC>vw?Bo4%;;@#oAT`WHDwg?W+ z(hVd3V_>V|++*tY73$IzG>@K`XV`0mt9kKMI5%t;U*#pL)wJ+ZX338~cd-~v{pRRV zX$KFwnN+_T6r@`Gx52c0mC0t6i+p*)x{P<6PYlmDecgbOQpK^DD3EpC_noi^W3EI+ za$z0R^4q*d`)d~to)+Kp#SlYCA<9IZ>vzTesa+s)KTS?x097)pnA1 zb_y@TgKKt|vnkm)^igumQy}c+HHSM z52#5P*wNRkVqP!yItGy!U#@p?0+EL5TA=P4*Jy-4hi3Nl+}pIhHERDzgE>^Vzq$Ik zI{hM}ylYZ)U8Zp&8-c%jndCg;RVP#zsCgMO+~?5q)#yU73jsKP(&=D5p+cQ==@?r&#sG3cK=D2-+2>1Dou6~K?mpY58{+GLyy?^kIUFP!?{_1E@Pl&pmYzuxKsCT zrYr{fO+g>!KK!HEXP?NLuDh|VFHu;zMBK0b(xP-_`zO@dV7R==j^|!K=VK4He{HJ&L z{y7T&f7E~7p7Nif?|@W1nxbE-|}Zly%nUQX0MkkbrSUa4kI85sOHZ032T`1a)hM@A0nKC1I2$=hLaDj+0O%l0)OvZRwEw08?-3*=D! z<+af&XNTyKi`xyb$>la7lY&R%5MUA;&&WG~xyPksVYg6L(s2q1g9pZRK2Hd|rM)MU zO$By61ZxFyVsi&6TmE@`rA}k=a2gOLWH?{HA%W|&32cws;urFaiYcF ziWfm4&|>V_#}QBQZj^}4?S4cjV(8u4(;=g~IURt-QgAUSOjp3~A~4w_`$05^aRlnV zj9R8Ep6#?YR8IVHrrAG#Mq&|{37T-vAFqlb#6&FR1pDkPfKt-jyLlZ3DP-z%ez(>? z%5@~N*PZx-jhRIJ-KWFL@XH*fjCII6+sbm6@B2+VFg_-#MR(gPt#1c8Ze-%rpM8FrjXXOn5p*xyQW+u@aL5G94>cm zu(!n5!~y9ixP=*Z{o>E=@pN{TF4#K5(j7U1GwgcQdzI{H{DiC&bo-*Q%vppTK1INF zN_BH1~9u(Lw0ttMXFPL!6^;}kE{jRB|1MCde6$5tM=ZUMCP?ZlFf*M1K z%SlnC$2_Ot`!iWV^dKTh6_5j2Y&1GCPXy0d8{?mhV7(biFtLD2rpsy2Zq?Tl+s}BU zdX7VE46yIB4_}Ya<49+^+$7jz$)Vs~r*QPZ+pqWik{- zVo*C;cLnMe(JdKAO)ebAfR}rm-bh>s)?ajw-x!na&csJ%O~w672`|L=(|;d@Elrak z{67VO9fj3)Ww1zs-Nez)CC8#i)`6a*xI`VbtaPr*OTGx9_&1`}JE+fPQRCc2{N4Fu z%`EQa!>9gFR8d-QZ$#w8ruMSU)C0CHvFG7P*U^7K z`h6N`cfFSN>T(GIr@Iu}o^3;9m4aROJt>2OC_SjanHm2#7rH*E^jC*Yc_4!{jAY5C ztK{%fK{!eV>wwasMt+aP#(zRb7?pdm4&ar6=FCN}y+)gAv8)3TLq3b4Ryy}fW76*8 zOX=S#jeG0GX}IJyBm4ybwUO|2OFvUaQy5%#>^et(Pw>inMcuWuXk-5)Y5@3|lS)MJ zI4Vzjma$CIFNIqEpciqQ4frL4 z7J!v;j}FRJA!O~_MzG{GluU5wQ2G^2sn^+}x=5#@;cxbhIx?04sPUeS$s!nqgZ@nx zpsL_#@9iGS)^KPG)LYcY?I&R<7M#F<4}C>x#K)JTwSt%x{-*DFZ*V>IMLqlP^ahj1 zPi>+Vqu(VZX9|a9uZyR1*e#Vp%z$D#J+@8lBS58#Udwg#&N*&UN}e zEw)T=V&kXn@O9Ju&WD~&lf_Len`%S@vaUU51dx9xr$SKDnyf;eNIY*2w?rbII?N_X zTrw-&wna!n;34BQdrkUu8a3bV2P4RSQkoxt7&$NjbE(MKuPzs1 z{?D_K)rvXA8pyh|)pRoTRNHo@G;E8VSSOluniqRKqs5u{DBy;e+p+{0UuZLvg}mjw z-XYR~WWwzF_B*ND%M(}i1-_5rvF;ncc)X?G0^YYty%SvRlR;KMiFx1kDf0Jwa0>!eloQ6jrf<68+uLuL(C zh@+G153~D|DqLwTe3R$8ExJDQEMTR-oiq>11*dhCth@hvFZ^l@6FT|*KnikFqsplc zWYW3!OrVelEF&q?j55iD;^~VsQSLAZq=x^yXNR*(ipj$#(Bl}F!o0sac#6XGfx{CXv#uk++$v(B)mxeBPLLXjw%eiM>UNDRN z^L*2#X6M16*PMT+r*TX6L+t`1u7Z_d_Aj3aF zc?!b-g3Yf7H}({hmJeYr);{Cu`(Wj9_k4e+KxvQH|n`gf%k>_|!Bz%xHBqB_xCb z`#QvF5yZ)A{f#x7u53BN1r6U_^-2Y*J#n56CJc%ftU36Tf`%8X`%IjqZNUl7f92U| zRcRmsm+May$NWE9U}>!Uec+ksU^Woi<(Bf^I8HrQ>xzl&W z-j4By)SOSW71_w}%nIE#8jjQSpSWHM$wrmk1!6`3r{|z1SZtisIkMnK)QBuiQ7VX= z0HTb);(O`Kc(lBu|LT1{zCW47rY}<~RJ&6IO|G4gB>}6H=|`Wme>qulRTvw4<9o82 z+1nSm@s`U2&JQOJOO9LBOF02ip6?|$z0^%kO8hdpYLIPsuF34@NGex@S@_eF_irtw zmD-DtFgZZ#744ntipN3zs90z;aRgn>!Q&sapaAq~%%7%)B5O#0OA9dgKK@QG#Bp%wr$^I(ewFwVx_~2V9UOIO^k3DE#qxIRI;$ zgx*+H(9dn$KM!Z9yQB^ngOIcU3YosJ*8Mu~L3GirsZnWGTQkl7JHaP3o@U$8xbX1N zS<(p%&O>}N$B!lxgXcY)jV^+#!6?FARhD)Z28&uXpOt8sIM^!Z4Fv;}jXTMSQ=*`V zN^xerxqY-WKo*fK({Q&p$ki_Kb3Jv){n*Nq_>h6rLMhR(qALA@Xc;w-m=^YROUwHo zStwWelrl3IeD^Bnvv@h&H8cd*pUHR*w#lTcB(~7%ZCYT~Gc~b&?rJzOv2$CPYfa0k zVK3j49kZbe6X~o{#R;J}3C8^X4)F{esX$HZ z=0_zzatPT^hPGbCdB4ZoGc@bp7U*R!kBi`fa2w+2D!;ta!Xja?oMD=_2wvF2J~%ks ztV{;!g5rYcp$~|UEGnw3*=TJ;QqB%Xe_InLRbHHm+S_0z!@`(^>Lv)?{xT2ud3(H~ zn)rYQ>W7usneBNcIIH#>Rp?REtoVvF^xn66_BR-@i?1R@weqo463$~ZVB+FtbF#EMK$ zU;EFgz{*+VY~CtAXa&D1mL%ds9z{$Yyu{?%^U&Cj`Vs9xv*;8`@}AE&z}T2}jZt+y zZ!)~hjw)2&%UQF{Q-PNu#c*({Wa~{HI%77}yoaf$HFxZOn;fI{;TGzBUDSH>kdbxc z(e>~?e3jdIp{zRS;dhDbM^fKEx^V(!tdT=cwV>)z86b~X&fGE{P5W0z_3=o}>F_%~ zIRPT6^-11)z4--Hp$Lwwwa)N!qThy9X@)c&R(?vApo#cT@Y5D3w-KW2o-5VSMBqxw zBiWxzO%+*}8~xvEmi3cSPYf>8$Q;1j&9+9z%<)%?e-if3(?qVoMhDRG%$tnr z0JLhX^!ffd9TMBh|9ty(sMFxrQ4wCY(uR?ePjVxsVG)AP=zre=keVm=xKYR zOS71K%C`hqSbjT*AL7$hjrpOxWcxlS&aZc(8^LJ4_F0w9Bl<&py+}DusRQO5e-|7s zW7nU;J2mtfa*|5j7%?h&+WNboR{!Q~Hh_{WteH*x8JE-4yTp=c+6fn7r8g=G1SkZv z49x5$oG;fvKU07D<8{vU+IjV|{EAf@jx80|PY6;XAqdN$cFtN8 z-hz^PH*YYN-a}f>*eb}0WrDQlb=YK)ZbmI>*T;UoOnH(EG03%snT?_UVzk4q>(qNW zgS{<@JM$kh=ibBQvh51H0k^AjB+&?}KUryN=8Xc+XhGK{IqnNBnSP{NCUw!1XY*>h zY=HCiwl&b!j^WgX)?WcG$%NC#p;r5|l9K;bs+x1V3uC$j>+itZ+)){t;a=3T|CYS8 z-w}y%pExYk=zmV=gjf1nSb5cUzZ;b;Zaj+JAu@EN#i5*Q7P2TKp8|RB43%V}*j*BL zQXLV^*l9NI@c3j#dVX*iPiGtd>Za#$eqboo{igx+tXb#n5r;{W2q!GbJ4sBtqEaa? zEv@@*=(-_B!2avKWl!yz@hQohAsl5`RfE8ZC&-q!PGw&ykM(WyRNh-L;TT@G$#S?drFO^ekU4^LT{rr#)e0nX{<_&NZAMNc&^ybXgr;oN?EN?nv;A&zy zLZ+XdXNHNljmi|TBE?LfJ!fP~8tqw;8qfHY+r_b4Lb|SENZWbjRCX8Pxtm7)qE+eZ z`$xYU|N13EE`F-zs@cc$npO!U>~XAg0qDds`nu32fd(0D4vK)gY6F54YYfhVs+WJo zxF0gnzg<+K=OjE}#hWmEQlIZKHJ-Jau|GjK+ntTahiCq+hI#6qmehRn&GlaDYQa;o zQ`{~yj3h@=#FuyOCF^!E!6kF7)2@Lpt(2?D*ujkV-{h`L5|&#jyVp&n{cmycL%`gp zNb+u)6%b*OwPmqIrKiq@BF!!dC2<6v@yoe=V_>1c+Dk&dH3jT2P4w1mG*`1lnb zucPb_0zE>is%|=q{$EYFk<6KS#=% z-v}(aYYK{zlzIe@{u;H@)SDL>6!S1TaSC%0HEgElJs)X8gbo@kXUXWkCTtIu;VOT@ zfJ_zR;GKxS_P5hhO*cB9DK`3a@u%$T(WJ6jPS1pyUKBbEQ59c{{vo}#ok9rbukk&% zN!LP_Pv_MAQIhlh3yE5Dld%iB%~#;#fE`BwRx|L*R=MhVQ;UO|-g3T-j&`Jqs30jj zSQH`fplRA7_;$cek0)e34rdsyev3;EY1$;2&D1`%QoGAE$*J5UA~~8T(`dDw>?k(1 zaqMtr@fH{OXBOI=W7u&f%TIky1Up5`ds2O61ohs`1837sUb)b=1~VLG=J{-xlE&Q$ zyHFlD$;;!8r{o%T?tqq~ySxRzAgUZ+W~pbv#R`g{rx$&bE-|sG!4^67$u*xQ<*^J7 zaM@A9b#&%W0Ov2UUugIW^F~La02&NujR&?{;w;FsK8ZmhPKo5d9gK5AN)qUM!m-% zmcxaAZV#QHv@Yp%C!;-0wd4*Pi&GM~A%n*E z(h0e%#4}WS?S&E+1TV>i5f0;K+D(>0PWaW6d`@ELK{c%&=l%I0o@kd2cw6OKr}(c5 z+cSm*$IUvs`;GU{LW;`s5ewJk=9xo0wn{Cw@ICAO*$q<@7W3tq z`~tShe);M2k8!r&M%qQ9KSQ?KP46kJ^WP!WPx6xAmbgh}myrn@+z+ty2m1Rle@pSOw`?Vsj z_7p8b-t+r%C$%O=C0C}?3*}+6s|^p$Tq^eTbjjI2Co1rpJZ`wM?D`e-fFoWl^P|gM zMk=~13X#=z(K%&VfiUO!#5vJ1w}Ww~wbuDc^ofRA)ch8%L7x!x9W-kuqA-<&aHTk@ zRiPl-9X+`h@lQxku>LDSZ%Sf|%2rx)YH+W`#+VgGd*-#b*WD)Ph}u5n+SgY&?m$4g z-jjgDo!wsvAw2U8-B+|l<~%1Yl7?%Ui(l~YIXOf(ekR}+419I2On@Y6`qi6OrTgVE zYI8FFNw2Es{N~?}#(q(*hCb_HVuttC?!XE5xl6mW^fTrY4u%6aZitsnvQ&jdmpkNr zQ-<7uowjqGMG1xHM!v2qFd1DgFqvqPE*YhZm=*h(!{$jcXhjO-+wPsoSamg#!y~>w zM7*%+HkA(-L?rW8omN{S;6|*xQ<^awxQtp<6s_G|`4hGJcF`g7)*6*wHJ?aMjn918 zrakXNu&b)za(Q{FT2t^!f15 z>v89&nSRfIDl)q_AcO)`8Hy&2y&(?AK9U(SV5wAbwOejyv*-OstI4X5gJ@>=ebZ+( zXpOJB2e!+#$C%e9K!K)B|mE z&Jv#|G}90xaA*m)q-8Uj?D>Q|hps}wv13C@)!)fDOKC^bGm7GCPM7mmd@rVu;P9}P zq)Iqy4Dl#x-UOZopGQJ@BLWim-eSLj1bT&~XjoWdP#anEZ7?$UBggacW6A$Te;ovT z%w0+i52&dZbDWbU3jFwwe|HvAh_FO^a`^n9Nc?|er*nrOl_8$UFu&7^XO(!$IQp2yzd0NfUE5QvluL{C2s+nEweOh?&9|usru{au{Bes=`R->(Unut8cZYKj$Jh@CmdVs(Ed~B;pF?Q-pf3$xhRng3eY5kcM5nlWp5tRpCFO~%=?{+_~g z{rgU3FKB4bV2PunSld;v4s4$e=aY?@H^6TOv`th;#EZKeZa445r&@f}sF~D2gt6qt zd_{cKs!a!xxqu&5Hu~jNVLvoHG~_cS_P z8L3R~-JC&74nuOC2bYS4-OsO#0;Y|!q3vwo1M1uuHCX=AWC}Av_F8D-+R@7Sih6fE z3lL4hE3&#)=cL|NF~+*XjyEId(Aqfi0$@`+0cEK3uGwnW1W$4lRZ~Y;oSY*$Lrq$A~Xx!evyZEaDGGv@? z-^xfaU+pT$?+s0S0dIi*Er6v*HjB0I-LR@26?4zN#PaBiDD)*DQK*81=l8tS5#tgx zkHXx0Rz+msnY@~qfEItAjeaviwf4iW#46_J;<$e(vZiol1V5*4mNcfxS6#{aqusxKt^C~?sSCbu z{|WNWe2z{2G@?)YKezic7lNnsQE4$^8hOVpc1l!h^@85(8}SazZN6bqnmO3R3<-wQ zfpz_M{)D(jkFe0WZO`81=BF|uqiIJ0BXP6GJ&=+Ov zj7M74a?acD2b`Ep)J{!~CbQ+XLBBdr+6)4gbUC@+#HgZHAqIDi)FS~Yx-T(q!`=kE zjd*zfseR3>P;qBxx4h~UcP!_Kr!MSdLmn1ixx3VR0m#KeLhFz(ru-3|vb4ql_;I#0 zZo=Q{4p-Gi$40r74mdOQg|wwv)!MH3&R^8RzA&Dw)D3VfmCvr+PtPldCMY0>ipUJd z-ElnY8wfTkQKF)?uGP{>4c$yL{52Ksj<*!ymSa2-vBVY}2_TcccRf83V?t=$y1sEF zb}Zc?xn5&uv~!&>z(oc=OPW7z~_+cKsOBek! zOApGW7P{wfd?`5-3Q5>zVuz2~uWo5IK4jh63DDnx6j&Gldt9qAyiC^0F=nrA-2Q2$ z3>cFf+_?{CUUPz78i~;j2-DiFg3>MccT5!P_(G7lw0PS;c$?+Rg=~7ru0~V&c#8Q9 zGpH5{?5s!soTT)Okn8{J5(IiZzz)KPmbG*7w${oN=>z5!pE_-h(H`@&`I9G!(};f| zTEV#yxx5Hg&ifwI^Z`J$sJA6G5xHT54Gh0vj3_cl|F|YWyD+y%9s08LRn3%9y~C1= zx{zGs9`QWWb4dfj`39Hxka<>SbYu4>I!EmC31{0q1keXOcK{ThrWVvO%QEc}&7L4z4sk2!ICXM_VUfPY(Lszr|*~|8j`R>qa zcGe9Czpt?GH=Th?^U)~d(QVCLRX@Y_r>oIFvyJrmXXh`57oS%ZWCqm&KGaYe0VVur zgA|lXbpX{VZ zA^P5fANfQ|7<6WD&NSbs3!u{jQfd@*|7M+hXgBqMA*Zll;7*UuGCJ*QE&FeA+F~n> zM)Pi?KG7WEmjSPUUjGZBvRERiPpmYx_3s3b(6OyG2q8UCHZEJzhExwsKau#9PPzk^ z?X_Bc6jyngA(1qDYwGt!Pu?TAsP=K8Bkoa+p}c0hjj=7N<=T?RtIGO|3@gpspf@K= zU0O4hNo5RQPS1QG#FzXm-PT+q>bMA6e47|*tzIL{HBC=chte$*NA6-YbZg#^U7Ka% zq}W<5IA3eUFQ48QHr?3g0}=*E*Tm@!cW2!poAwScd|KYwd<&SZ0NW}`gv1@|B_15j zRpBhP9m}}zv`Z0^aTs7Fr(98nq-Y(i_PP<4Pl>UxbF~thwmQQ@Eh?7 z@vpvxUCf^YYg)^9hulX$kMr)&XNYfE+o3{V`dS z;%V&LA%0-uYMWI^sd`Jd)jY{b5BZb&t3cXBfF5OdDH<~*3vujGO_>W61mzu0-cuYs57@|9(H$e zH3kF8tV}F4+~h+~c8S@fc&`;OJp#1^PI_&Aiy ziydCq^pGEPxg+A@M%sTcur(Z&VO|nx*RplPO)G8n%d>*- zjLloTPAWUo{TrpWZaD>DrWgrWcCG0>)SQC08>HsUz7;)V!@O2&8->r|DpS}pylvNE zT$qI2B8}KB0>)D&OK`?YWbP)>`NkA{MgSf9WiU`QZRh9DKvk znR+VVmFfVvFe(`mu`C7?oaOWAg}C;JQ_)kRXb^x%MhPF_H9H-IaG(^ZhoPL0jkSx#Q z_TV5&&bj2rJo-q`p4llfDq*PJaz~%5 z(W6`QdUUCSC6uUB-v)1LHj7&n>O7)H3kZm7OMlUsY-Z;eBY-Y8c#mIO||ZoIPG5m-i84 z)o2&F4hh9;${$Gs2)g+I3dpFGC*02OIwJwEW8RDHvVDc1_4iD=3$1xSJzW}h5$C=c zy@R-DwFya&RVQ5NC#gKl#ec!sm8ENb@XiMXOedD!<)h%u`Q<*nTy0@UM~sL{9p+s~ zwEn4(uIOC@EOy?qve0J-HyEFGsgo|#M!2{O_OM?Z)|*7=^tsWlyj^yg=Ikvz`C5|o zRgM^xT+eQ&O}k64&cHQ*!BTY1FGC?z+lmB%bUj?TOtW}QbAqdg*`ZT6o%tscR&!%B zigzz_W$Kf+-mKJSlk~M}pTzs5*7Wsz}&Rt&u(PHKm0do!!GNX8)ix5<~Z#+o7X>_EO^q!=ujDYQz<^5+n-UT zA6dM4UN`Um1qy&zXnE*?v97Ed`2J#^f9oIKf6vfcew3Jy(X!-YQU1S-qJ1jnzNxic zOYN@*c}{GY(ywuQK#}C!G)-KYz6Og5AD(%(WicgcJyVz+;ij0(TwOT}*mdv8@n1W` zM&yIDH;<60Qy8^2wOOhb`t#pndo{v>nxgrd*M|?ku3@E5$6(mchT6bG60MTb;=t3` z&992~86n`Ox{h0d6AFAogW05Wbiz)rr5hk*o84WI`A=z|V9Maf3$AOP?yHLm(ff-X zpJxW$+FlsInj3v|qPvIbsiED^Z@K#rG`jC>AjYszibkxN|2B;Dx@v%*Z6G4xqrQOq z>P|yj!~=I)XCmMJZ)att(Xv4%GIxy_3O7}-flSWF&IqC4u0mM+fVZ!`-XdzsYfBMK zM19)1_c{X&O3^;(B65G~$ouiWV#VhX1NCY---M1jdinGzp}y6~bNDv5NbLIEiSsk; zHOncUp+x0l%dC89_1BT_g>ENH zO>)>c5U?#Jns-g|PLhT#_Zw;Ow|lK)EENi|x+FF+WBlD$jz|cbTXl_=6;~^n$WK>ck5PvWkL}XvuqR-RjH5yanya{m zsFv|27)wVL)k&R>&*f%3t(^8m2pnKHnwSU$GFh7Af5_N487)v(x)y|^*I<(Zvu`8v z$>NF~!AQy*i=S+px59vx%T%>h-fz_CVwX-ZmKBKBchx54);_ewk^=}NSi5le4HMw zTB*6%*9>7XG4|^3i*3T-UlB|1&cYl%NupU+EQaHUH`mhC>^wy<;O*WO!jOQm-8zsZ z+bMAcFcv(P`qJ_3l5Cijq5IfU{a2X8-ZqMuZjw~@U;4U9Byfrcw&Avpdei60O@F;y zpKn{t6n6?tU4#XWt%w%pU{^azCm4bihMyy;;>$bZ6xiYVN1<=i^Q0!ZE})nnZ`KZB zr?IM&RI=T=nOb@|Qhz>!X=uiG9{aF&6`jRH#6h$LemN#G!hBddvQwOUpOrAJ$kPzry8EC-Olhk9 zxU+XA!?>A})9psA2b=E64+A>_64CQMSkZcn#YuHfY1-I}VsG_zwl!q(Rt+w43at+AUFYHO6 zlVQ|Z<d2S#$ATB=d+0-*>uG0bf`3X?nTe1UiVs7k?83 zc0@{kPjpjo=Q-<_j_8sW2^4(`(87@oO}}SP4xFihDrCYY4f<7nf&J0F#h-U>3lVn~ zSV<8TefU;tU}lX9Z}Y`rjhF`puKK9wKu2nksTjcF|6%Vf>|?LJ;lI$Rt`yd24G4B{E_HA7tb&Z5vvK%?|c0Xvl;o;_Kls;aN9AQa<*Zq#Y zinAYGcddw@>GD6&`W{5Tyz+>Nh^?wg9wGjFlX|(OC;&GzPnZO-dH+ULw|$bCQXanHhpj4}_4Ve*(AfG2A~Pt` z6v6vr&hK%)jBVw?YtbmLEAQaIkJ?_>t3_JpG4ajVvvSS*m4!o^=wrUS8c9{#Z3z~J z3pk(w z#T72LQQZsLn@Bs-fX2xXDDAVCbvz7IENlPob;ogozUt%T8bePqOb?fC! zd-}b4s zzY%KLHQ>Q8DHxL_=VUg;RQE{#6-PRP4g8Tjr7Aq)z zd3X~z7X}#YjKZ$cD_iZnDXXJuw)poFDZ(ZCXx?WH{JX>l<&j#STk$zSoXFMzkyY$O)$>g_74-DJ!8)=vaxn$Jk9{tRSn*8mod;Rak(D+Q zZalBf;Ct}IR}?d%5QP1IW= zmg&g!qJT2@G4#PTifUe)pgB2)A%>8)5X0?>Wh3j^0+BoOwPr6@EQxkIWiKtjHUB|nd>Ql_(e6cI#XkDI> zhs)t>wSg^weo#9?`Ui*YniMwK5B}^O-f8yhH0achJflp?MLMFg{f6KPrSGgtZRr+H znb(2z-b}QtvGJnuyTj(*;wjx~`@&7B3c>DjK&UI-jjus4gvU+ZJLqx5Uh~@Xzzjst zCah{aSJq4vXfJ#f1@Qw>kTRdmF;T8~XyYm^`Xa5#SZ6fs2+5}=Z0vcqAh{@|5iyC3 z!pm;;5t}X}Kwl|zb6%wwIOHAge+#Z(u^A?4M>%t%w%ix>1F?aT$D`Yj$?#50x$l zSyEl!olojrdfUjAv~ddf3sR7IP|QAiOWR|Vc=rXv^oXvh@O9~X4JITi`$z2U5lo7f z7V!NRRb~$BpAR_S`0w>f5fZw?%TkmMd4RC7pabKIfi3l5MEvZ&T_+Y?G_^R#GYNhj zE-u@E*>^GLeSr)QO6WUwBl#I`~Oy9%D;mvAEiP!d=vZ7$lo|4tqth-^wE3qbklXy z(da{SVLTvbnJ@&+A8yvjfcL(}zo`DmgG*MR(!i5OKEXA4u%#N2C#yLEE}u18Q?K}i zqgPKt8&jUHp{37WJpFqPr)%cYN1M1EiS(QY&|SBl*Ea2c&X*8+tpoWuY$w8PGCgYS zWxAh5@F?&X1J;5*!g(&(_no0ma{H%%{wKF^PM1>z45Myaw6O&#r148BB<~iouzv!` zG}8eUMIMJV4QEjsGj=`4{uWFHYFg6j%%QKdTQv+oE2p`? z>fCJf0qaFS)8maKem(=QM#G$gdQf_` zoH?wa#X|SKJ?4f4;%gm4}b;#Y$xMjxB#0$CQpBCV=lD{dufEr(=>6AH~|L&62| zYa8s8fBH^$zG^$`nI0>6oDqgDaY|pq1<&DMdLOQ}O}ET*J}JKPpJ03Vv>n|1ckgQy zt=X-7)mn;J5j!+9_;EXSexDxXdFbDZ>v0R*Qp4qJ5l#PEnr|NZ^QMS$GAIACXjdmk znrva&d=SgSz<~GV8v9a)yDYVqRZpJ{JM@}UrTJjEDph8P$V~Jt#eF(xR7hb@JHWPt z-|jT99%N3@2a|u;BFb%Z7wR};Euyv9;>}$egY&n49E9+jp&CJ}AG+&*ntjGE|65X} zG_34MjjEm~F8>~vm`S}j-45mBT9Uw929nfyZZq!lBOfB3u;tpVU`q*p&|O7cBS6$; z`;Vxr#)4B`OjP0eU*M-}1X@f0qKPT))zGIhd$V@OyGp4GRjE0}B(Jo0gDlciLg-cO zcgcwMO$IOWJLv9}8a*uTjSi8!1nr`3uq>1fBUnns2+UZY-+ldJSebJOGrC0jHO=ot za1g77oc2dbQhKKuQ9zPjb5Yk+NHN9ubxo8Xug3Ad+9*J z?}J@@sN2~7WML1(GQfiTKJVCcPs9LxglqM#{CR31T@Y_ko!^N#IOcYuYRr##0UD8; z_i-~OPlxh6eA#5YPy}w@#x_>p@U>imLN0yyT2JjZpYENHMBIMPen!yZPd>*)2a@1)^Ar6t0?ye`e+;P% zEIYdLHH`kG4I1W+CSE}ZcYQ+MS?+OicHZ&_U!)~}nSSp$eBvM$xWV7>Txwt~4K!Ox zp6f-s5ibr7?>;kVBi$yIJ5v_lE3Mc+4)vA>8DQ(&9>usJWauw)~I3xsLhU-4nC|9Km&EdlV}0}5!Z;Se^qA`Mzgq(v};l{LSp8@CjWqAw77j1UV+IKKXTyc6 z`MXu+AcI(^6KQO!&tB#!Hwr7GBRRkH^vR{lJ3nV7>GjT@KDU?|mMrouh6EE^Clc{_ z+2;ph2h@CXyHViMJVj$aLW~~(;4lDa3KQSj?4bD`5<(h-D2?3G(2tst z;B_ih!2t*WtSK7D^~DwNhC!Z@7qU@99Khbbwcr#iemd}RJYirbIFfr{Do7k~b`OQIT@o^44xC;;~ zxTd5&^I+a1JG@!SpdLDf8eThuoX+>L47rT3udb}cQ&7NBUY;{^phqh z$>EMJgymVk;{c7K=sgEvgfHXBwxW2r32o9YVULJKIqyN*Mu%%h5>v0Qc_SeYNlo#p z$&|e}fMdyXdJ15ZTo|zK90rVpvIA?2+=$W4&&Z7 zmbXmp;u>ZUNA?61LeT1EFFI(%T#Rq7o$W))cRv&J>6SLPxA%|cdh6aZ;ejkG!njt= z8ihf$@aIfoSj%WC2yr)44j3|{@NRk4GWB=}iuz_tZnZ{Qx_dHy?taK-# zZKioHhOPZ9r2Bb$IWkI{0yhQ#f01Hszn{0a5G_svsU;Jd$@WR1?)A6rs(lX4u7TP$ z{H4Vn$zS#;sj*H;SmE8|i!-&oergB>brRo_Km6^}VP~ojQ{88a!)Aq|Up-YyehKGN zu)`XZ{?_5{=y~@!Ai9Pwe2;4l#Z8O-vyNJH*K)cd|F%unJ#e* zCzn2L=86eh;4+$)&os?nY&7AlmCXIX@b$iKq3AHGz79)|Wf;RV0l7X2+IU_lj`zt;2J(O%x zQda6tp}q!0yd6LKZ^)PRy~$=)Uyl7m-9n<(u}>s0>zmtD6@155{IZ)+S%#cwSgYDz z^!uag&&p&gzbI<$ep8$_3@Op5{U|azs(saV+jt3cuwob{TNiqN?Pr*9CpgRMb{*pQbUK0C zf!C6O1S6B}q zFQ54%NERwXhq35fCE8uAghz%%=6MTj>LG^ZG)`fmB>jnMW8J3r>7DV`LL#)^{#i@)7MwiF*M?G*U$Ap@_-k~`riJCum5ue2 zdNU?Rc-THxn=I3VerGcNDv;{aEAm{x;NDEO)Cn84Kpp1Q-Y5DE7~p4AES*8r5^#a_CJ z?NU7ie#ZpF`aW1rwa7%`VNZw!E0e0- zmhV%hXE22%NTJAG$^Dd()ysdduQ&q_6Z}%|Cx5biQ@Fag;?qEzbcT zmt`#CQ|+2)mc%EZ8OJdqDAhj;|J`XXN=t&AD0ZLCo*GK`d(CuOrp4iA&+ZDSsg&XV z;XgQ(E)PdM3>^L|LVWj8QyBsMa}g=vOn*pRrR!egrf!@h2zXG$_|j5ckZ>QYwLt$K zxB&+lKo(tqm)_vnU+B;)^_Tyrdk?*kbC01KZ0}_4Pi?v_=wS|Y!-_YaURBYCE0bPc zX7+@LVo|D04}>+TlzFXZffkALS{E9Rif}s7voDW;#%Al$&O0lm9QGN@_A|`pN@t4n z`+qTo{;Y~OU9GEc`tE&#NC^gifTS66cVhN=fo36l>4FAf(JA1@$Y3Jjc-Ogkj0R=@ z0ULP=V3#vvJrt@BfFY9qa^9Y|fSj>JR(5u6z{yS$N89;n8B0U$jU~WYmB?pQX$+|M zZE96W1(fCxErWtId8Wp9Kij8YnD-^G*8FrE&DT{nH63-Gi>($_ZrGhAD{&F|m%o4g z-gBjoCS+|1yF|brM^zl7_h40XS z;|1*MzjWZh!7oW8V9xtvQBnP^d8n@Kbg6;DLv$zr*Yu-#w66hN2ZkG=6uso9XXwHn z7N{nUmwf&~z5CYv+S-|4{VBp%YKmVqhJN<|?x<2eZ+ldHO1*oCovzETe*OAi(%N|K z%nL3OO3ZY<0}lkb8`Sr)exevM0J-h26}Sxg=Uwm=U;-~p{`zoGaGL(qD5wd5h~CC5 z;2*SwZ_l)0j*!2qe~QOp_t-RAI70m+wY7ZuBaG+no&m5TFK^vP z+~f^!@?`m!mHg*b{l7Z?ueRl%uFC(_@Bi`skLp(zDkRGP4>ZpI!*Blc=l$=w{QHIb z-*x%lb@_j}%m4r1FB0cCfGjdZE{3^{{?6;SFK(z8XpkRK^D5-?a&i5OLH&DC`d<(7 z71Li?GezV-`NQT3o7Tkt#R35S#s9}6$3JE&P!)EH|2b3PSybeEI;3o?5*Zest~k|r zXDh)NsBpyYGa2ubTHF9*J6>n%=_I~%-A(sAX@-ZU2)ontzdYF@U>IzWVsRSoYLyE7 z9QMXL4M&U4L@WUYGlFwdQQnH$*HY{L9W z3Zr=rdBJc07WLCzgm$>8L#;5k<!}l?1hm+ih_dh z4id_OXy3cKOYMqpqH_9vC5{#TAoC(<{}Ez$eHDAJ_s+M(zf`UNX~YbJ^^LDdT;GIV zH2DAHt@o6TfXdsK-d+Xrq4+fL9TsRDlh}JguEPxh2~#sSjYoe@4rqRrM-+hbn@MH* z!2FpN-%$f0yLz|B6>VQ57kG42i$DA+n)M%d*`FZ*w#;KD3+QCImrL{`f_FN| zx;*-d=($pmPimeyt9P>#GvUEIW;kt5*gwwX9}2;L{sIe*kAdkfts8a++J7IP^QM|k zR0GNzu zQnJ4zfB(akf9m+~Zh9u_!(sVp-ru*w-w*O-(ygErC2tfHUyi%=29`@20Rt_5cXiM` zrzUO9{V#sizkT_Z%D*D3?bnxoyF?*(JM*+h1gjlT24$ig1A;k$|I?cOvAzqtj1r-Z z!RWKKkv|$ABAY%)rfU={yn`5kj*3=Bx`hX3Yh+c2O7!vFlEJ&_T2-!PE^M6u#a?u% zO!dJ#&5IJPMm1KT`m;4#%hOqp^wrTx%rk^%SdM1~Su4D=Qi*YH_Q zD`dN@bgvlK`f3h6?;p$8)vUN;?SI$cKX9)8I`(6)JBH;~s_1v860Ne#_0ihGJWaSi zu!izMWwQH;0v1)1fWYIRfuE*~vrrS>n5WL8Dh2mz6$(}~FP?r}=wdOH=R{U!)rwbU z-e>(i1*Qi$y$f;$VGUDx?@Wf?bC+mB{BQe=tcE@InYvd7KzuayRwV&Z+n7&tE$9s0 zzlz$kdxf zvw+pvx$27>H!Rfj)J|2!-Q3LW?sIV<`SE4eZsu1kThg!dS}3T8WSMrkn)h_3!s@#e zf;VBHk6X;bCLAyls*_nca{9ra7JtZ@h7JI-@kQgulkVui;C-`1 z(-d)s)Xu({)gvm;CLQbry@h`aRw!=ldRET5Z*x<hx~84Z5Uh zpM2#_D_&SMT;=q-o6DT{Q8b*b{JeXrT)Xx(;(xj=7j_?AnYuOo1KB@K-9qUz$5{fV zuREgN4}30wc1wbDtJ5Q712r?zyAR89X2Vyc@9e?pIy)byp=`~~^<=~6RtEgPh1O15-#L6u7|9jv*b~AW zQ9lKwSnqJ5PD|cb>He>a7RgIJj+47QF`4@SW`?4y1!{=#mW^d1reGJ17Zy>De!NRqp=XGa!Bsc(&|^KK|{p$0>Z)AWvfkC3ydx z_;jrRDJ>UNDcANJQEyT0iQc}ft!axANaAyNbY;G?T{T#_y>8rA00tRVX~CH5Cs**^ zKayJm?Vinm&|jz>YE@qhCZ&Q;jth;uGgsYeIBI`yURt2U77Fu*+atv9ymg5FL?v|V z7Bd5L-bZqBACAfTlDXoYdgO%%!b9IfA35!#?bF82tS*tCfhNiL94YZ?^HPM&oZCg- zIchdK>Ae5!>qvjH;DM;in!!A1l~R^VaKqYGw%d!C1v=;fcl291f}l>Jzc2nQ2D?hM;%l ziYiv=nQ32L2H=w}1Bb=Ak`4~>{5NnHFvr=-X|GKWzvg;wy;0)6?s~S;H(~IDn6XKO zU2GmBaxCEAw8M@06jj{D!Q{)zWcGf4L$_SBF;3{;JaB5BIRI8Ya8H$kIz zPObcifoidDjsOJ0#%@rm{;ea7c-#O7Qs>5EuD9@lLu3-$Ws;%g;a=B5@}qKF9r?(b}%w{h^_6YZjopU+W2aR@ym`?BtGvSYtEJk$ z-yAp+n0n4qPij@QSHFWziP;;k#_iiZ)pePxr~kHF{Idttd-JZxEY{}h*FDmQ9upH~ zW5EQ67wfvbDuy>X`2tt$;B^8<4C%0l)B#5x68{jfJ5DGpDGu@e80c_%d;t4$L`gB! zoCFT2yR{-ARfTI)1E#)>m(`c58t)E=5-~IOhg&xqjWlhVLd5`l#;42423_I<)&YSo;|59*820;M)Ef5$SNe~Hk5Id513qDfHZPu-B!nr z=6sHw1A2H(mKy}&T96dOdiR(jZP+kn$@h-1*vZNLrU#(x3Os8oX)Tc1IZYJy9ZwBF zeKUuZ>v{}Jgg0U_Jp(+s!glMuDp9yQd3QU6khlAg8+ti2hun^(8yK;rCN5 z=zV)Vct4FzIICe@XLn;#Z0ydVTT@f>{>Z3o>NkiC5hWv2n)m0C67%u155EP*wYFx< z^mURB&;M+}C#I%KS7n_}luO+ZfBoa@uC;IF0jP`Tc z+4Ak!DL7Wq&Qd$j`M#C4dXnfitUn6^TK`(7vpUiQ&=xEv#o@(1=X_+<=7(dMY0bC? z7D)pm)>dX>;A2tQYAeUREPD8ecCIBwzcA{wcqG-nbU^oPZhBUptPj@LNKtR@8n->u zTUiQ98j*g^<4xbNw1aqwxLFr5&oohF@F?M+Z*86x=`|%8;GITeS%OShrOQFr{rGWD z^{3i+vG$X;XKhN?^5;qY>gPP{Oemq)#+g=|Sbd)!?Qk9B*mMEPMx$4H;yT~E zkcRPN-N5WesXsn6@FGj=KOqmcFH&-swv(hTtPeiQGx6-W4-I6STTl4JhQs`->|WEN zC0C)M;C@>hJ$X5~zQDV!$v#>or>R=i?qPG$eCqgpw@~bu&tHy^=SW&{%$wZlU=-YJ zhc>&Po9F*DOjo8z1%4waDCo#XBK$M(lIDJ%7Zum7yAs!~rei`ik!wmtMk#jTBttj%2hYL zH+n5xrq8Bs4w9K_8c-`8pZ=StJ;6gg>4$BABwxBFa;vZFJBrEAu6V*IE=x>yyaA7C z8d*$!w40XAXmkvRz_(~*BOuLh(C4e*r(HNp)n*f~+WI;B9*0WtLBl*&y5O9SDn zBDii(^99cUP7oNNS2pwG>%)!gy#{OXbZen4N?ejZeU44>=LTROx_&Dh+&l}_y)&Ya~)98!2nbZ=%~%Yd8|@EP%_fpaqC-J zPG=mMm{a0lHuqf>wh=o52=_Qk&N2!tO^W02i+!vI;>-MjYr)Fy zqt_`e;*RO*(&&@V=Os3IHaZ_~2g;Z0oC#Y83jt>rh1a)(f}|Sj z%f9_b7xvnXK8bWQo|iI8cmH<70zdL%KAJn74J=*m6JESvWBZPtFTV90Wig# zG8K6J!5H+G>gBP`YhnIY)7>%FNcWAA0dda3`SCldee~@>A=6pmJ5+?3cMf3X-_80Odj~e zSu65=RN(0VD1yF$zHT!dQ1i|r%8@PW;Stlmv5)&kQa4#_?k!Un!8VH!l`gr4k&vCV zxFi-b_}Q>kK}wf9lHJX0QA`?$MvTB4L6@HGsz~zq^kD*e7-}oiAL7oaudn@H&p6;6 zyu8GR_`+|5d>6H4YA)tdnL)~GY2;Iy*=*goWUlW(?|HLoY?5}_rW)P$DMEB@ky-(i zMX(QeI?hKpr*yNWeIlHD5bm?5dQJw#TV(Go@{E5C-F6p>uM~)^HMaz9?t$^n!^eX? zd2iP1Q^W^r&q_8PdxLhDRvx4s>m_y25gk?_)%b}gu-M%vp9O=54!n^^4^qs0q{ST^ z5(digl4i`l5lBEF-iIpMb^F z80@{YQCRh>cjYH-okS1d9x#^!nXexoG@WvSNw`VXX;|G?y=N^Bs8W_llW+o9ZOo=8Ep+Iw54L_L38oy zR+>8zsU3rl4d5jkyNLE(1shCBB{h$annGppo^7l9vwVjTp zS2O}I@Vi_1@HkaF(4XrNP!z=iEKY(i;tMoBZ6UX1EV2`Z7}`Y0nk?hgG}9Z+Q>vgZ zkjEV2kWM_?iRxUIShl0tnP8&A8m1|?07brAuoz0+df(k0T}eCM*Jp8zFQ?e4T&JtT zE=Akt=T$}${U-QE`BKaRD(9M`8|{S{ckszS(@^^QKH%sj!kju9x1pFGFJ=kY66eKh)VACX-$K9#x_7Zt9jLDt*nJnN&&Ksi`icnO z?Vxl;8$46cmsWQ797p|S5K^Bf1s#0 zWU!iUQVKpJG*)uFSpSL3YVQy7o>&~>*)jKf zQ9l$MUD^&@%*>uWN|S#@J`w65j%=}2C5OZe@HKZOW~hf^h1?K+>Xoy#p#o%%ZtXfy zD?FA$O-jpz;}HIYv_NtMQoR2g6wk{hpC!}?R5k$tBFfaGBx?<2>`1yPTd_$d zcC$wFjg*wE@v9%FzR$kk6w%=0(pP3usQf@u;g*6-v;x*I&zioNCj6|PR>T?&bo%oh z+cxFnF(M5?6tIa&bgNOvT*ZeJ8liPg8z>$-^5z?%)T6yqB{>BOESpJO7;<6;dObIh zT%Z2D>}HX$TY;yFF&3ChiO-CD%_3ZNX;e8hB68pS(q7BD{E%J0;q7M{-xI6dyRXfH zyf|OWzjrSG6_4Q2IkdZWB&sp)e@gnFGD*PmnfLbf8zAa7&Ow4dH=AYejl|08@_Veh zsW9bl1c!oq(PhKA4&bPv;y|X4ze+~5axrzMM%ohFVh%urn_8LEm7jr&sR}Q-#W9XCjj-Ah<;rr+8Gpn)RR#wwr@vFi{htrz_>@ydNBL7%koI+RP`#-D zyzO9}_wSj*RXrCZ28;6DeY_ElhGhA6EXUPI-ouIpPdjW0mwuB*Z zB9R73eD7GZ-0xtW68WILnSuQTOz zziRG;*RR=}oL02?D;vdb-I062%<8(s_8pUQXI+GPGjSePzaQ*a0oh4^4_eP*Yyz-Z4`}bor8~UbL2+@Bqjf+kxm>X@MiyuFwh0w+2dZ^l`ZNcG$;m}K!6;gf ztkVu3(@xvlRCq+e)*THUsGppcqJLE`Z%B4nCF1bf$)mG6EZB^#rrP zQt7DQQiNM`|9vv;KEq%&C5ce(UtaOilXQqvBewrcwAl$mwO72#H$|0R;b53b&XChw z@xXxFfOi2}7PA~3((Brc85d)lgT9!+$^G>+_HIA&Li||*!P>b_(eiM zGrRldyzk81@0~!rKKuEGp@zpk^;$FM^j(7}P0pa&6XPNap+*>N!= zwX6Fn$Tsct+x9>VOG(4LD&!HxzAv59$!gC4^R~1a3-Jyc^adKel`k}sHy3~Ag6co9 zc0i|C=P03X;?zFE5yn&vX~hB8dS|i>3ZxXv-^cP!prekVjAm)4BxNYWt1CX%b=af- ziokXZ13bsqR@Fp2qv9WWf424jBfYO4W9oD*6DnX~DGisEgRT!{Y5TeP}u$;j{Vxe-0@r%z$tPwH8oo0h=z;zj=T zYQE)e%c$$`pbT`+SxHNYN8`SI+esbsc@6N4VW$0*?%jWXn(3 zYcMv_M41ihA69MyNm6&n?HS*fy)EMj*1XX+C0~_Nx&sl;ii4_(?R8YaHlylK`hI`O zXr)yqmIDLcdv{5SaI)L60&+ZTDJ@n|aDHIv8|6sy){MJhE0-I+4E^vIK6H6Nz=D6) z#s;lua9_T(N|{B6bj={}IGwOxt+()AVc0>6xjun2_^`93v zxBQPLaPnfOp!SsA*Rp_+|?fpr{+)8+oLS zq2o>;Zne5rtS_g)V3a2*HB+r_+S#+Nk=oX8&osKxBpEEIel(fpduY(aU|2jlW6D@8 z`+}AAhoN8U3!weTVPNMb9!YuZ(b4oyQ3K2yeKbnA_6oQg2KO_x$wB{qpt`0RvKJhUrEDHap)}fOA)x~DnN`^9QfNOxe?0@ zhac`uHFo(jjcVp2QFWi|a_W<|He+H=PH=|A>qkd@TR*$GlWF)k?d|nDrzfPApssni zPe{1UAzPflhS2t;MbCw%=AG9keWaW-9VwvHWUuklVaTNfe0zs{u`c}ZdR_rtof9}> z=gMbJg@E?3vtw;*x;LS7hz(G|$@XBCzRys)b-k^Y=3e`C{c6W%8lR{`;Vd{2w`7C6 zwr%;zv>Boiq;YJhzhh1JbU59pzDTQaG}Y{n3dFxpDfFqO?_F?g^|?yCwENSK$usdU z4><-D0jgyx_%4ZdjhkXI ziPs*2+A8$NOOEhrCXqK4*Lp9ew2LX7BY=DnP+$FdT_25IjTlD&-flBah_tpk?^~hh z;W5)?d6FMeDu&shnH01xxO&#T+N;w2?4#mN|NJv4DXIRd^>s@Nzp>^mc-`;#yB+dt zfm8G;w@VV1WYX4?d(4&~Zg%Seg&bNpIkcXl@iw2gx6#o5{l`J3o+^F}}#<)axPRK-%RMsDK$2GbJ zAf3KmT`QWQX9im{kRC`~f9-fUJvm0u77_c5D&8XQfaA7bnl0cFC3Cwc>yH5$I(DiC zt=#P2EUz~)^(7f48_Uc01+l#@H@G+XynxcNPgS2AXw8#ft&DTVG{hqgY2PpxRg8ey zb(Ss;|CHgd7;C{jNIoqv2lfmCW)rv7H;1Iz{08mkL0D}ko1qnSyzy&o&-unZ#)qCn zMD5Jo#8H|Ua&tYZ6wr1cbVPTg(sLg^-`L^St1|r#lifrfz>H7tt;GkD(m%%NGN}w* zLm(Y4VxY2c(g*B%3#`cAx=Nd5{7CNJKzvI46tpQSHsB_1YF$rUEWPFoEvTidzpD3? zyt(CAt}oNC^W*F6GE>#+v$p$xMNa=EyuW(6Dg99bQRkGc{+C~zb;HZ6R%w8Qo?BtM zih$_#^D3 zyf7K=r*69BhN8ALFq8+6uz4gZ6un4g)~_?~B-hkOX$zbNqeOaQ*h~{yJ$9O={+6ZW zG|9ZKvy*8*p$9I^sL`|_xy0X3hmVZ>}78yK-xSG&?8g~ju-=AB8FVu8RNoxomu z{s|uo7ja8gGt6k0k|t2ZUjZiY?wPueg<&E;&cpHI6@DGV%mDwU-!G$AAr13WwXac` z@tF_(uR&BiAhYO+YV+QYAV(AC`g0D9u6gLcHW+ylLCYpXBHq44O-B3VL3|U^)y1${ zK9=Ab0?IUFP&BT_(@AR!~Ce^6=1Wvfzy6t z=*G7;1maN+2z;&gKU7zysU2JzIVvHljEaXyV|{%YC#OBL4XsX(`UJ&h z%Tws6qQR>JY1^z-f+vHrR#y4stXsC6JeX^}0EXgidy?NqMZwni4k$t9zj5L_@8@~K zjZBZz44(WY1{k|H*$7G^+s*W61PTz>S3X0?GQ&OM z8^@-TM_ysoBNAVDsM0g97f?MtL?W899(j7Rr^}8&R-> zx~?6ayR5$c1gS!(mLAi!@a^}JX&l?b!>lYGx@n;OMrhu3^F;L#5{j$5vY`3$^Qj6a z7`g38t-R(}uI869(L_K=z*$c+?QFia% zpagQr?D*bLQEY2C!0pRi!mvceXbilA)KavU!6>PT_sc@<&n{*l+ij6Ki=2cT5@UJy zH!Dy3!G=+1;4>yB28Vcp{tV@4zt12g3((J zDf}QkKfN@a=uas(JCJq>YrK2hDxeW6!IWrazy|T3(mBMy(AD5*y@RGte(l2}LON5g zK!FE0D^=5wjF%@V1Q#OHw-?5iHbHyn%L7fML7B~(J6R_!)Aq=4ip@KuWh5$bjKz(A znR^U};i_yf^bMwSD0Z5J5ZCfcn}zkzJn2JSK!M0gn-gr`*^y_}hB+@85##^GX9pHf zF`=Wnk{l@HEZdEH6ga39j=`%9#$>~KW*i!gLHL_DpXrbY8|NM6qB;7y6YWcwe3C$s zK$cItc;PotSFq?yW^WCr`XJhn36hml_~Em28R(Waf~r(ntqw+^f1i87JFg!kwN#I` zxn=nmQhl6#_A}{xCjuM;c+N!w3W;2YSjDWVXpimL#SIPMuBZme%zyyLWu7NDdKwT+BDCFbyon>yo(3+3B0P-fA?hFb9?iFgs^l=b+BWR5fM zrs;{eN5ZHkH`%Fd^^(d>I`|XBA&*;=@tWPaI(CWo=jz--8?fUnV`8H~ns((tS^RJ- zcPTyLA)iSK-kbU!VF%d%$KG3pMcH)$qlzdfA}AsX5+)+u9VQ9_BGLjP-5@3Hh>A)| zhlF$^3>||(Hw;~)(hLLAFvASr<`vZO<>A%u{5j`3&%cR#@4fcwwf5TUzPJ&jW%=`K zx@f+Vx$mW6vu-}x(Jd;YFCiRi1WG8rV$ilFFxm2zDII3ZR?Q?c!{-Q{>vR@-t&8?J z+N6W)lk~1#t)QZKY(K6ezx`&JO{t5!bF|}{Hq(Wg02IuN@C zm3ver718xsla?L9fQUB0okhr{Yckjn50I*ifcy1}>RBHmK$p%%b$TC4@1Bp#Yg}WE zuR)tU2PKowG5Q}B&j{BngXiWkw;tK0jy*Goa%?|v+MZr%M$0i{0$b@)jxc{huf@@& zFH>jTETS(O`gyRcST3C5ItHg>0slO%tmWFNnGQE{aqXIT$y33LeY-!kJ>~|hBkg1% zdf%$?<6$?%qe^y__TCig^;QpI%}3KW<&HTHXw0aiHNG5bXkQeUiO}U5cFlrzT>MfD zyw|CKSVaAFEE)F#2N~CjW(eA^uA06SnK{|eRcV`R*LV?>4ZgJY0v=0!3rB#~FJ^I7Kv> zTKbuh9t<2Pu|u2Z2lFyGfGq#W+j4Acdk^J1*$d1jCZl5OUms*W zo0*l?P?|=zXHre(r7SKkj;!Ox5NF}KJfusjaI5ym#rvbtM2~_B(MJr^QDTbrAg|3n zhv?E;B6KpLfrxq9^-aUNkxyg>p4&zCs&%98^4TJ)3A`hn5IH%ooNk99U3E3O&ZlMT zGm_enwKP`(J!ia^ueiFRi?JOR7_8LaBK3+HJv^P(RMO1YA}}$gBEB2|Tj#r9o=1wp zFw(;e2$t#X2(H_@*uEOnv2`m8F?pvI6MMq19KEK1q>Ec_kf?OYGHhKpWK2RtljoImKj>2 zXtG4usaG`Nclt0TbjsXskrt5_2|xzWj?v)dX-pg z*1QF5DR$8X>3XAjP|IDVeAO8ADs-jUi-{tx9_tguP2+m7x8p#^Sm{CR4AS+(njI~w zTp!ngU<}_YrqUCk5S7f98w&PJ(F9BRdO_7oY+Jwf5`?(n2c47d^5nXQzOI%x79nc;ql&TzE*lu}Gziuhi#8^qZu*Htt0 z>Mz`smE{{#x%dnusJbk=^d#eAV{h@*(zW&KE_Nu(n{Xrxb7Trt%W`4Ojc{3ox!n{t zjsv6xYGI~%8Aag<&4l0X7K}5;R0F3vFCwU{lQ6&cnr~l<0+o?A*Wh%2_JD3fKP3-& z^vkCFk5qElC=gH(OPi4wdv}NlU7{L=W_GdO_KXF5O`F0pxg}T^r z^qf*qsPF4B)*PZ``Fug8WOjCco0zD^k*^eu%&jD6>j@w4B{_Yl^ZEtkC+%Z(R+lp< zrg|3!w8Y&|y#?HEM!~44DN}116vuoJ5gjI2d)ILVk5P1>~> zYcG%~1sR;SkNwU0;a-8^wY*29jE!k-N=t_*WyEDTeey9=Pk6^+*rm+ zDl13s;-@_(izU5_g(-EF<)G0neJ#r&b?9oo&0q;Xo(hkZ(0r^bAu}r?$Vfgx?i{=8ypDIOSQ`PxT>UW6h z>n&a>6I+;1`k>FdUm$I2C2t@x3RDi+Yqj9`fWsENckkYuha+STTbc zy4LclyBnBqE`wzmVO=}CN+R@h%36^2PsQHFxpgp6A2$tgo>xsxeTu|op3qy&;!DWP zJmV6YR7|$85+w<+#p|^Ed~pOa0;{%29=Tm^L6hosl4^%|^CKfj#;>p#?caLF&=L|K zubV~|&h%(;vZm?6z~@k#?{NTxgSeui;s(NX&+x|ac!r+Yz;FY%`}V1kEmI|-2ac?j z5E2^#4c@{YRobrhFL6_0AUx!EV17jZijpn?Ui zzS(uc<&1gFIL8*ZkgLR`r{7xAoyq6ZXA7k%yhCilZ#H;==FmQd42=?@r=rPE{sWlA z011nFvC0vOBN=;8jkPJ5JXE&OfQy>L4t z^yk_?Kk<-&Gr)*S4r~8Ef%)gSjZd%71GbI#K90S%Em%8Y)$rIx5rwDr=-I8hy`7%M zN5yFwke#_f!-@9X3BCBBZf>rHg^+l`?AWJ4?aM}DREf#Q z`&gcb1$^h9zd_dv9zdWoW)TFsC6lJv%O zaehU<`lgjpw(~+OW0WhDTnqwpajcKDAN;~2VBaL-Fp}5xW~7QMt}7?k@Nl6pDY+pA zi2;XSw8BEzqGcF{X276!;@)xnV*7eOOrv1mIqNT{9lkuHLS0Mz6A$L;hA;b0zKwhn zZXP>`2fb@@9b0g4a1B^Q?`s9U?r6HIVrLfefCrsWi}j1$Sd3G!Dsk51eNUXE{8ZHB zBKN5fkEnIVEQ0*IZk1OUmtNi7^7l)Yb|u%|#SB@}#UIWaaf;-D!Y!_zxupC*D1*zi=<6`M zIee3AOO&BWQ`gf=c-S>S877+s@3PEOh}7X5DF!c!_qRj!)`l7Q1Xv9<`H_jOwGgh! zde$iTc)vVsZ#f^Fp*q)cW&K5s^;`I#An&duK;ERG{FXx=9`wHE^_jD&ih-r8qi!@) zrBv*ir+vj|;}6n{-8;sncER%)oB2B!p|GXb{*Srb#rcMZDbv-0ke@nagNTfuQ`$JQ z6@R-t0m{irXRFi?Gq%KDlOCgnH&s_wUF{ca(f$+v&iFJyo=kf;(I)P~pS~Bz&B~35 z`1|{xJrkGq=HcAUBQ#WF>Eh_*xb)Axt0cz+kdsdO9jP6$Zbu0T_6GvOd$N~(HI=$` zD=;^gNAO`cd4N$-22|6)himsxeK1>qmVWbWy20+v6?P^lb<&1pSl=6`+~lzKYzcY! zY}4M-9_zq_`rz7S@wE$NxK+2ayu2Mfc5^owU(t@!P*R@rpyliC$+sSp?J2YhxGGr? z{K0)+?I|qT>yIBVuR4FE0)qTlLC)ao(2z{b$ZP+oV7A(nTK|X$#=ZixkREG&_4%ke zA}VkP4%{9WYf4;1^4Clclth98fIAQU_fMZZPb+K}NNAlt&{Lu}^xT`ve$bhTiOEWt zQ~*(I%Y1^*Ce&u4?dF}n+}Bf6rm95`gVNQC)aFR$L@|Z5YLb#p`J^WvK82QAemTv= z#%34nVqn}S>*yGMQ1C0U5ds!T8BRGRUZLnRK$dW=>--N3t_9QP?iAM!WD` zs`8>cM|IBJnul zu5z2s@O2&E`v(MuppSqM4;C+YXp_8GpFZAK0bA^J8(HeJutxX2y;95_ZOXN-X^-M< znnT+n^*Woy>no|WhST9;H^pV`2wZqu=GCCS`v{0Gjzzm=vZ%u@YdX%JGoUXSWPmo0 zglHJE*A*aS0{2sh*$1P-keMY_2Oi~x48ZHzN^T9JXVlNH*hV?!8Msb$D~x!-tEK9L z<)aoEy-w(`W@(hjMxmSCZjoER&g;+AQ1^9rVk~H0$6`Ay!?RxXfmCuIh!<#Mdee5BZAcDR(?_?Ed`WVTa<-x%20%;Lm;f`W@zngOoMr)9u;4 z1hu{1*f*)VW~z;?%{K?6C?wTk=$(fL&!x{B`x!s!l;ip^X_vi6#ckCgzpO5-b4lnS z^#P7J$n^4{weovT8mCDn|BwPXI+rQV9+-;_EZGsV(2 zAZeW8q;A}Iw`e?;WFSpsKKs1D!UyqnK|{YRjiU8a*kN|JRp{BXXS>rbM`>CwDqaHR zU580|V55_1*L)8rzv0l&eIq#S_4q@w9X3kTNoB0HQx|PE-d3jmd~HIGjPT&`JWS&5 zdd4WrC;isTkxQx6GQy!#HT?aSk>Fy?KzGZjD+K#uCzrlR(lSxKu{Xcnb&OT5CRsiX zq!g=r8bLi}fSfqDY7)O=ubAs_c9fn*GRk(iE5_uRrh7RCg$?pieemGP+Gy9Zr~c7Q znG{sEko_b}m!`EXsBJ@a)f}#_aTtrzh+xb4qvXXY5)g!QQBrPIN){2HJ;&%In^zd$ z4xQ4xaZ~m%X?LzP&|bXiYHG0Nye>`FS}};Hn!%^%-gi{)M$vW+DntDSo#Ea~4{j)s z9--wkO-`ByR#f*(>@}d8##FOTSaKKJ&8E}14s$R=)1CBGRl|TPR0Z#MpV4H!dGjR~ zu8uj~c6D{tKPX5KYvf{|-Gyu~Ahj2b%rX}a*Ivx;GhZZ$8UQ&&)81TFDQRgDkMWMQ zkT?1{lwG+t6aBR(v>Hz$h4p)3eU*U)j4De=^_Ub4;CZ&Wi-F!M?9uBfaEhYf!5DjIl4m-YVMyj?5u)%R@Z z&LOsh3-L<1XTF$E9p@G^L$0$}ejIO&8bsCCFS20R49P$D&6G0Fk2VE7*+cZE(a6Y% z3%GFxss=EudF-vwZ$;4Q_yE~J>*kc2L%mP~vJDeTNjP!$02dslA>7I!Z|{JfFwmRG z(Q8VTW-q(yLo4`Et&^odS;IDAZDw6mm(}FPdu@k>N(xZ%z-+H7nk|8z}P41M$*TGuKdJ^~8{Dh_4vB zf=jWhuv@@ka91?6t)YEXrMKxOV-!QSmDTk5kvL!R*GvkDYC3TzGAv3^ z!BX55PImf#V(}qr2mD$Kf*((9RjtZMO1NK@6UXuh4l!7Xj5*vg@>(|;6txjGi-POTx%l?FDT}iZ4gwtR_G(u)=5L{riMR4w}>FFtn91yab z8YiqfbX-7!=Srr=p-_eqgD8h4Fwr6nzqx;{LSnaK`eVeYD;@&%i=y0fp*kWS?eC3* zYn1s7IcBVz#n~O%>{@q?eIgTY&`e)iXyivceBx|7=6&A!o5H$76f_pV3mCgjM8B~0bur8?! zki%62aBQjj*P7k1>O3*MY@ePVf*PdpW}vbi7skH`M)|b*ipxGEcxNB6YeGXYl zgJvI=ANqL**OUA_?c_DTOPN}v;{MNmr z7q@mdnyafa)ij5!V=&^n>p1MCG&AlGQ6HrI_n)*2Aw}{RQbn$M)9?w+3kCR*&!`^C z_Zx@f3atzX(6()WttJ2xWYn#@$T`W z!aXj1@rgnhMFah6pU6vT7QHz=`xiQ-${ZJS2wYq=oR+3eZFnL|DY>~uNLpVhW@YQR zrACeRrb7!E!0?%O*$>(`*f?D{rp7KNCN{n@X@|Jer!x`(3N5(Pt~)qjoXLRGqh1~* zfq2Z7{s*~!;sSt(FUJx@HysJXBLpROD1X3|_Z~i6QgRg26H`?k2+~oLETPf^4H2XC zoV4X+eMC)U)GzOGyqEH4dhbq{n%+v!6J^VHHdbz$o$x4wW#1Ya8WPcHH7)s2 zm#LwN6bQJM4+<&e>{?gX0X83%r^m51U*pV?d+SdOmtw=+1ycN7B@}-TrOB2+}c|pfp}x+ z#DucE{9AAUCmqbH#im}M?~vc2t6g48PK`Xkf$C2PNY^au%t|>#+a`*ylTz^e!9>h40?AsA-n!X7e`IF7D&BpK7nQKvd;^Bhu{p_3Q679_T!XH)xI;>5)~> z_2W%bmcDeZ$7T=Tk>^2rdU_k(uQJqv)}MAvrJ-&e8_?Lzbm^A^|?m!)|SNQRG-tBv3cDm)u{m zmkmECpVYbT>)#%D)Szr1gUS7ZV2Am#%qt#;=4tFf$F$E&h2z~T`ox_=d8~}lHnAtg zCk5oV!#N#WzrH&73AhR(-b5;vzG3^C>D>CWcN@R-I&S4P#5wwub2qY^SwTUeZcj6c zk|-%pv@@|WLWFhj(Wgb%>J4vdBdnDZJ+?jS@RPL3%)7bJok1+9%_B|;C{-v9evr9P z$(<&zqPn_1vK$>$y13MrV`~x|#Jb?`$sRmBeAc%kHw7+I|KXT(AH9HOjNwwJoEYZr z0TR#jf#>vsx2k;0@2TZ`8@S-DV{`V}LCxj?425_|SB6)f2V zBbDYOSkO7Xt~b)rVr3(}CYiH@2H+lvR%eF#*p$LR*y}2Zdf>*KT^+sWOD%R!R&?>G z9Jgv;zF>V{!x{*FHu4v0A)%oR%l*~`BA6*_Sq{tV*OiMKD4Q4C7={7yWke(SlKEc z(GJ1oY0=_(de?PfW{%cFyX^SF!%`FyYp177ms4ZrdvPF%#1d}X&K6##xX!b}S*1H| zHqeW)w&-1mj(@LflUJXX1v_s)xXSF*dSJS2NV$Lrg=iLE|4OLXD{RKSy9~Tt8cLO5 zkQLP_IQgm^JA=5kN9zjH+gxsoLFb-FbJuHYl540%9NRCnij!VEq`UFz-scZjq>zU1 zvS_~{)#ah9ux}rwqdI)WmY#}ydp~oo*w$g6L1W-rK{-yGiDP#rt6F|;RaKe$zI-;| zl9yc^b|7`6b*mgX)v^A?gC6Tc;e$-hac5WYGt%gqZuqFIWt(u%cH|LKsN=o?!U{7E zUX3GTd_SkRvZ_)LDaQf%fK~=Nd3n&jJP(#%jjkmeqqkmYZ3FR0nkZHdA?A`UZm{=< z&)E*~M?)VI~ZsF&R+hTvOGk#%|3_ zQ)**jIq~`Qsll?otP}|s+{YDm)trhf^JLKPK>d7pWns?TM^ARlq9kUyrksxVgo(6B ziE&KozWXKhFc-|QmhW0$*~O{(USDM`CmAu^F#NGu*OJhI?qrh@CwgZF>ZeFHAx#k1 zx_0#@MZ2B{2~a!bywUQtNt1Hh;;;8Vni{B^`7SQNn_u|c)YEGlt_?ENr}-1>u1)cu z{%{wqJ($wU5tONC~A zd`*s#t@m%+MwZ`)7?hR8j6rQC9!_*-M076`Iz`CxQlKhk%0tGq9?2gn%wZ`(5=Pi- z)k7u??_0RKLQMN$8ZfTiIqc&O!%Wl4z%Ne(`W_r9*HW;SN$iqgWT zPYlG%(9DFIEDZr389RjR&jxIJ2_WBo(K_+f=R{t3W70t3LX zdfw2oFCXP^_T;g95O;OtDV^%5NmJZX$xANn%ij(bQzwT1R%SC`yCaFfh+_uSH~i4%+Hb5}Z>h61y`^XRac9UWg{ z9yv&<2(BP@RB-MMF99k0=V)B|7tB?%ElfksGy4TVl|hGtwju?C6Pyp8CQUX)3X9gm zNSv02L#I9n!qTp2HZ?bgdwBhkd^7F|G6VQhnMM#Wk#)) zNwJ(+R$QHrx;`CU%X>|1n#}$YbTTS?;W#hteD50?%%4;`-3OUB6KRegbzIc1-_z5t zlm)GJ6@X$@wndFfu0K%X01bAaYaf!j#z5ly?;7a z+%bkYi#R$uA&)I>{bG0o6_5qPNhQig9wPeFdAK){Qfs#b2^7JlY$ziQhgyH2&qsU-$G6<2D|7z0u!d*oRhhhx>E? zkfJdBxKW$<<-Y>*c zeSb^MwtOSdyK~1F_sTQ=-MiZd4jhOtEG+y|a_xuC_-%EF;|5Dd#RzWo9^hfyP5Mpd z){VgK!osQ!PRHLWf1Vv=$5d$186+OL0;%w)hh-|Cu9DYX0r3klbdAyZ>?iG^A0$@;}(`X{y{Be!& z2n9vP!P~``_Bbz3H*)sG9J=w^ft2Mp>5G{q9^VsMdFOQHxpQ}J-)3+qayVbZf89So z0c0nK1MeE0pgiZ`;NYDEUm*Os9Ns5l=th!iUxMIP{-Ts1yjEFjKJ^^9e>2qsl{|D( zpyiS9t>)igKe^jQ0(zm~1_+%%Ori+ReKXvKg2E;4b76#THT;I2&94#^6ox$&O&(hp z)^-yT9LP29kn&f!lWs;m91$5Q<7Xkkq=c`_z11b?yW8F16XmGf@$$t5g!4ZgNX0M# z;qN;t8Dzbsmc=0zPp?8VpAC=A6mYE`J9Z4+q5Yd)me3_0FP~UoWkp+vU<))?%U4gw z%`E&=O=q$XKvzd=EZe49yBhyk-|m&SCln2{w>T8$eCFZN2_8I^_nES#0S4v<^NZ!6 z9bHtmV8d53ki?Bd68yMi(^j4K#ltVWy@Ah>nDk_APf)uq1>UreCC=_2FQ2W0qQmba z+}D>p<8g3h{3(CXIp!kJFlk2~2yX#hDgngQ_7G-yCM5Q2>QQelpl0ed^g9+TxUqtBSGGK4h?(1GstPUt#{XiG)> z&U!6@8^zF4akWKTTu2U?lR)_Av@!IldjAGs3TQdj$-G{m6(2=}z5W|gw!RWnLJV5% z@DmVuv;AL~8aorV+mO65;xxEccpbXdU9=ETpPK-QZFBd^yg zMmaoj3zAA$azV5lxcr##0snoS_n-InJ*pm=QyWR0oKBg9!!;BKxDCV_LIhnV7bf7` zNd_rwA@zDCrGfP%;I-P`oSu!RIT*-^&t@BHNjOPKF%=Xw2bo_u9mJ%Uc<0X5;TciJ zmnDd0+#t>26XW!9M;Ig?@7hg3NKF2ZA11XVS_*L0-IRau?9XZ1V;;v?kRA$Wqxi>( ze?I(U@%C~s3hSHAeD;5W^~>nwOS>;2s88}}od2s)ZeSFeUPt-H|H8m8OEKJbCwKzm z6)-Hm^;e_T!Kg*?s!YHCf$U$Gl8D*2m(az;vc)FsuSVg(D5RU0#;Kj@inr8b3DN_^ z=+4hE6I_2a3QGb;tsgJBydw+YFSQFoeUyA5zsDa{$kK> z0^SP@UqYLOj`TGyF6u>S{d{=o<1+dx$I5y^!7)u?|3>{llESHON%m=gaA z*sm(#Ujh47izWYS!G1CL|5`9SkL3S*77R;qyp1E?O}N(+&)rE?dT&scN=r?9<`-gb zJ#l{*A)yP=uGUlEO$fx8YP>;Mz~+UPOR7u!g74O28<=sS6qr?=={6{bOv-IS zKF*cq_4R=r{;q=eoNgJknxc22@gSw~8xkb`RTB~4^_7@a&03jK78Qk4Y&+eXqQ@~a zVKhPn-^bk^AwZdBIFL#DoKzhV?GVKqGoJQ+wyrL$nH(M+Hw7MId<=L$qphv{-^bmT zAOx>752rV1PnI`QiA#m;c{0g>ryK|%D_&I5i?Ni^*wh&H;%$)kco$?h1^EIkhZNE2 z?|-K%#(=tvnckY$acwVNe@e@XKwray#^vaX=0~%t>}s<;S-u|c1o2R^+Y7|jXu5QZdyx>n!fR!`JHv%jhigEIf3H-gC-|~uX~-0s`93BEA_XKYHTFB;L;mh7X`GD^m~NBofQan94cyu1l-d!iw<;fh{T zOs+h?(2JN{V4WZ`MHJ)73?y-4yfrQ*A>rEl+qJeHsYftb>lnDHaq%GP%1{?G7B zTFd_c#&%l+=!9I{h{8TzYCVUCqF-UzcETsH>A!=FKyf1kd*&W1{XaL4w;-Vl=x_Ot z``r%c)Q$M-0MWIOzZykMj4menyAgNaf;$ZH(%U{NZ1(`JgNs*O+NQZgUm)L&s7mBa(eC~xHf?16>%8OwAq1;bTr?3m zGy3}CpCprfI?tq_459C5icS)aZRZkvF5ORzj^cM@+&l_t3VGk6edf;43#&2YLX$L} z1vOwG*XlN{bL~}IN?Pg+<`(eRz>A%>9tNH{j?Z?{_ch(-3DBMkE!{k7HTJtiXIj|9*D9&Y&b8d!&|ItVgH2I4<*ld{Gb{T`m5~3R?9Ye{*=f9)+ z^H~T$KO-x2Yro&Um&q&d4PfZwlFFCxfB(UBcNbZCM7BFUyDhg7sPTknKKqV?ai#l)Loduj)bWp`7SDW!YGJ(+m``ov zSbcs9vJCr46ux`P5|IaZ4$>+mDUarC;p{(u#E^gM$@2S#Kkw!cQNS{taKmEIR%~NT zj1%Oo_W*lAAU<6r-y4*pPe?0oZW(`z}U# zps_szSdah8#N~egW_y4qH!u@*9iE4WukD}xIdQu;5S4+02_)MQ{OA6En9oT*Z6KRuGj?r;fhDwjNAG>V-u6KRg;IicamTg41E+Ahp%?L!|O!#;Yp`t8f7dDuz8hw-s; zk&%%p$edTCO`jT~v9-!@kU^T`W>+iZa9MUjh?A9BO6{bGI!*x%LOT>g^()lLPLMux z7mMQQUK2To$iszZMuPsD>Lq-ltL+L#%~54Z{kU67;I2(>F2?WF6)E^4Pb#!bwrjKkcY)#y1RcbnVoyB->4ZJ$&3>mOjz@ zo7r9KvWJzFtIf<=={J|xrUtFmCJMy6ItRq0*@`c?%u&!YXP_stLJ*=IzcgvG@EL;eq&S+ZpqCVRr*Y> z9@8B%k(ij+-qLcrH=*>2r4hKbY-nc28p&CDrciD0yi9l~Zc45^95-#EB{$L+Y+;?B zw7xWh6C-n=7kqfO?A>G~)TLOAR=f)8e9ME(ViJzy+o`amMHy1()`~<9Zl#X5^f>nD zia2f_ad%4aLB$K34|}cQGW`91`ihw{;%{6RhMc78Z!O4uwg6bk=;r)b zO~qbxVPN$wSt9Xy$p``M%f&-W%Ly1)E4Rx0G2`3TOY^lM@GoL;>YRr$hK&w281Ro)R&^~JKcqQyiTBe{iT-Ux8g z0v<#4mI;I2L#`4Rcl!cDvfg{gAQL6RbnV>Nfu3wFx1q-N{{H?v8YAapx9EiJZiVxi z8CMnyLJg8e-K+BvpoMe+r8PJ`2|mWI8JH*=<{zsz1@4={t7IbDnj$TfPnyK&_xAO{ z>jA4p@R`ZF&5o^~r&J7LFIn(^6*DuX3T^Xyernao6GlcaCZb{U%BpUpse_3G;USi%H6F=2M7D#6|kC1qjO?dOe(3dr{*M+Y(m zD8S#<9e@Qe%E?;iII;DDx4ajZ(aQ>j?)_Dee_GVW7FW0?+SzUvzk-r))VP zTc;{`EpwQ+i;pOOkA)|1_>4N#QOI)hi?<)J7pE7DVT;ke!+4$V>mBPrMMr z?NC!#LOWRV5r$a*P#!NJ*D8koA`CBepgIaosFrh?8%mg<#|}s3>Nln(tcDg2xfCRT zYibvHd3f%!_=XKQEyd5cE@O;lU@nXqG%xmIpd2WZtPB|{tjaM5=va;LAg8#*k+uH@@nJse|RlE9;N>t2Aj^4e7=qs96jhZ$BShwWU(EjNgRfq-!x z`Q`D+&P!W@_nj>7!}dEbW7glqel=~ab5E$u;nb;$&vKsd9C+@m6G7ZKXfs4Qq0yzK zHPx0>&F(fkFZ$ehNTM~V*=?E(ZPPH#2U`qYPBh6XOYHNrFcoJ?yR+6Ij+1&-mt&At zhHVn2^zgY@G>}JwuywgsQ-I`?r(9vyLSObhh3IxQ&bRYp0hY5B}d32+p3>?1~yS8@_9gGytupR%uZU- z8rTviw!lcdGc-apOG{5r80ZtG(Q7f@^492{>IzS46K>7w$ zakI*>dz^^_QSVH@fY*@COMR$}9lvtd!6&tG_V|43Y16gJ=5_7x(7o~Xef@&gcf3p- zJWXC$4Mch0%yvuH$~Dw3W+Ty(>?<_V5wl}2Uy~BkS~CDwkrOykYHy3Wt9C>z_hCbk zfJhX6q)gb9C_#AROuuUGEJalkmgvwhbc4C)>fTirYl*K#EDS5iQ9+G{YhF*Vw$O zt(wvub1_<+JSq-)L$M4jwvvS`Ieh-0l`xv~*fRaN;KQrM^H=CEn8DlH{BfA|`SpY| zl0JdKWn%;U2`ex8tUf+1y*wM|E2^m`PEG;dGdl4#2ZaG7q+bodt((jJqOe%&1P6+p6zM)S ziE9YRF10~zq^SePVg@PA#mlg4_?J%}aC;aA+lD*5cCYl2ybMKzO>Gcp<$0E~`jk4=Xn;}R3ANMprFJ$qL7S0rLZAF!>G*wTsx z^Tl24>UOG?Vg^FouKk59xoeeo7=(NZT(L+|I=kg4(Fx4@8apHKxjdMa@5%SFKPg14 zE!l4X!9~zB67&jm6$mTa)K@WA(vTld#I16Woa*mrLYd3Z$N< zVojY7_Hfp5AWWYrS%<9k#;#kzKwBQll5Hd9EwyLav{!bW-Ds>-TK2b~-e*5h_^#r4 z$p>j5h}cPE(;}T}pQDhD%#78~A6{LfYKU~IBR9#OZ3yFjRhw&pz`d&bkU-gURl5H5 z9detc*-6+4QjWjO@XM37^M_ebHBUYbXjEqolqe7?#@QCYZ2aK2oL8l_E|?wuFlMDw z9fa0Oe{p}_z1%T5RCHoCud6dEH(iCp1)ckV3tWR{hW06kvq!5ewn z+Ze^mY&L#mk_{o22>J}(%QiGoLKO*n79dg>kq!+}1r?r#kT1wF`OtV=qy$1m^1M>PCn`*@iGtOkl+I znq}Z>B1QMv=!~KI3YH&v&DE8TC_0r)lb;%x}OzYHn&U>*=Izt3w5vb47e!X zeoai&>2R~385E7FW}E4P>>+AvPf?h=Ca-PBko9&=q;esgH|tn{!AN$$S=}sha{4MT z5a}xYwj#_*bkP&VGW}$nd}U^s;=9MAL{03}*3rm;X}Y(Qr^ji#;_>3#-&snFfOHI5 z@mm6z(DBGhMfJ3l^;koS3U(OIm^yh~VhOYXO<1fC(NGGX7Rt7nsGOJ^sh^Jq8p&Q` z0JR2MEK1jd*PMj`?^+QEcBrtu>_j&_Nse91wrwGhiBY*wqr_apsDwDADOx;>M@x*; z>T5-t!!g!-DzMblM1J$$yOYiF>CND6_iT++6o&^lI`Vn;w70gt&R>dcn*%N>D~bXr zZCkxcXHJUUs0XDX8g{Bo?=Z$8SPO?4r&k&m>9WeFix;ACXm+^UTH3nb`oZQ@zUB7w z(Xqx>au^la9auMp9njCEHHQ_?yLv+jNsbcI{`fT4xhH4Az-_L>ruLjPbJP49Nm^UJ zSs!z7SuT2{Z7q;Vp^Z_@RoMsz{A&=F$+@oSOq`*|-Ntdd^yWV3V4_zRn>RIbA+#(< zOKQo^stmGe=A3nzAc%+d~cZ8ZT2sbAqjB$iY(cDw@1=dW1hEUD~b3Pzk&CZhnMhoKnbSo+JHmZRF*OtOlENEX_EAeHeGdhI5b}TN7#2{Z4z856B`VMv?=A?ZL_q z#um?+6~GE|4S`=o37LzN^bPK;tf-`7XHs;{RMCF^8~^;OY~SzNe;3C*vWvD|`!|Ps zf)H1*z9=4P9^i}x(OnXT{?WI1Gq=?=kG8$mV~OBxLZe8~u7ZaZ^lZ#^srG4i%;jx- zBY1|)^_cMVKmmK%>}W*g6cas&E4_0cj&M)(nq<`$fKCPXGzV-!2PdQE!7?M`V=Q#y zuFez3<%5=5tLfMqt1Cd4Lgvvk$Jff&s>`J?OEYrI{qs=ZVRjz<(CUW!Kn6FM!P&sf z2({NcqH#Bc{GQ#h*X`mopDJuyq$F}0?;@iLP+UF^lgqjnmRYjYTWTS%v5dg>i8p64 zR_T7N*iWfFh7GHfb45cnwW`Hk#!4o%*3-mUpV^DgeGyi8T2x>@5FGxTKOu};Kc0i7 zmn2QI!P|3{9x)FW$<=7k3V8M`tB#->G^dgUmiXqG>s}X>Mtps-OZJrWoD@Ovo)^n? zpycyf>m%iIRu-b5{mMj2PAZ%cWw;xUN$~@Ih%51%m98w;DN`yu$B4m_Z?Efm|NO)Z z4u@oVlB=Q4f~n#!4?3h9r0K~A8in#Wb*A&U;Y#lu=kCnQ&5d_ksp9u+bX;7i_i&BW zbXm-6%a`}&Pern6<|dyWrs*(TpC~~{dmK_!`sRHgC!)ZV2}MtF_;O^ZA{!mQ>pi1Y zbeEQ#c=-&j&H2{V$2?66PeVO}d_~YIY9)3Woa#Zo<&NWD7Uq~uE~1ZhaRYDYm7j%I zZ5Iqjwo&NypiiOksv^Q|rP@NNpX_k4#=HBjV$&n15Z)1dAnPGNQ4AvbfXhSKa(CxY z)N|MY3OOY&x7IAiXvgAE7E#%n%LsVVa;BP%5#x?tq~ocWSPOPPQ~cbx0b9$Uj7q^; z^5IYrg~$*=-%kMzJQ}1;MwfoDIoN_8o{a^NdM~^d77qkDjJt==dM~0-sEHoLx|rzP z_|R&8cDiA9rlHmJbT66PT7V4(V=k?nSr~iwT7Ea%(o4VTJ!ETKS#9bp>~3p=%Wi&y zE^u$7O3DyrLSJFwi_Oa)QxzQ^Ee5NbH(h~^RKJ+8A9P?GuwUN;gr!kKIr1T_zck52 zWMp@-Y7dACk^17b7ssyW4W?z@dmWo<;o#|7y4d;LW~O;Y+JmehFl(}70kp#k*znzD zH$s#)uL-zZ?-d{Z z8>WPDE)^z^61?1Z4LKzu=%txH|C@`6C-*Vs1XmIpL)BNaJh7tw*zf;A{NKM3w4R$- zM5dK|)lB&$dP`&xN11Ylq_lsw0!^2n>|Ob(I`y40&6$J{;8F;1L#nE((v7F$dCaG} zMR-bd#(ZpwV=T3rj#C;j%Df3YeX!W6c{1R9ap7-2d2HmPqTBM3R&~pWki7x+Q{An$0SZmkkN9{=>kB623|9k*3j8

2R-}TDD(FN2Dga(*N|C{81dy9ZLyvHJ>XAgNipdgiQ>8f3x+_}?h%4cEz=3SGX z@=DW8ck|`FJ2pLg$7MYJf{?wSLTZ=qW-O7#g7V?#R=_26(;2Cr$A4JT5y>W|OK3XE zxVseQZz}M&FZUe1RWrqD(MmN2&=MS`p_yK`pji=O=Tg_dV%+?qE|#$qz~A@YB2o1F z*Li*GwYk%L%eZTdBN=aX+^{aougd$Bp1oDJV;YZQEwB~3$|0O`?&{-v3nLAj&-rYm z3(R{k!r~MBCph+2B>ZIsUTKN$?C8qH3SN>Vrw=(uT&)`v5*Qs1s=8EhlI0)N`4co4 zcB|?3s*gMG;V-Aa7^slaXWn`CxTD0$l@FQfOp@lA2AEjwr%#{yy32Ha9q8FJIF;%i z?I}CKN-45+Z_l!ftmWuSRIZBH1XKhfXK&Kh&oHU>Ge5G=?|QXs4Y-aKYzzDj?;6wqTMgcB|6o1YUBhcS5W+G z1Uz2;_HJ|P9?D%iYIXWy)&$h3L?LDT?rWd0z?-8P-J#BfRs&biJ3Smn zwg-$4)dWPk*)iN_N#x!WfS>a8U2OjrVdO&2^Y<)Pu6)R6T-Q`T!Nz=VK zSkDBb2Y*r)PN1 z`+Yeh+=QCU3!vDwp^a?c{Rxquwd4FAzH$luHa%q{TA~Nc1Mg%!M`EZ;gKDbTigw=9 zH1nR2QytH3e^-E;!J>6-qe+U`$T4<{$AvHJ%Ogy!iz$D5Y{&wTLUBd*SsU=z2NDdv zfJx6y;V!x>KwOStx5hE;lH@AY^?a4CV8fOTf5r_(w%1#3={6i6~40zJmJk3-tXTzv(&V2XRV?#A$EKjMGTnRWXh!&bjGs-)pF$!^1Dsj%{s3`+*t&8+4{)7P zVGh0UJWebjyq!a8zOn;n#=w8*J^6A8UFoR>EEm9kU>;Rx!gz3#DB4KMI9{071p%ik zf4(63(XZ9tq^pwI8&9(n^)ITxg>Lbl08459=JZOzeuOTxO;zowH|ITUNjF#xHNKR$ z-lXW?J9@LjrDqnf^T0XGT=!Zj8e(dA`1U46>KLttYV&U-kqGW?<=Y_r8zx^6{w#k1b~d?1IS6)h26)e>iVa zaNb_~f|P(*MILJ78i)A>S0b4{@4fBhp;D?j)aP55tMrz6?_JsGI~;Bt8(48h{i}ceQeZ=YC9u(uH;IR5b(%k{I829{&)X>HvP*DQtwE7U{hJQ4$h(Ol{Uae;Br>y)61= z)~vYtUb3*yo!vv#uimk!P{Oh|*Ex|gMFMW(+X@~)@F1{YT;#sHJF)(XgGxb? z(-pP&CH1#6hNP`B3jFReK2G0b9ws3Dp_R#ND%(AeS5W%e{noPtJVyM7@!hRwe<_3l zw4X$ZCARO6F-s3+DBGlf zXi3PWuOrHPQUzTpH}rsul~;d#h<_i>Z;A;${=ZN34Kw&zt+)F6cdJIC-OyXd+(`uz zMCS8W_E)hzl>{Cj!FH(F;#axZGfbi2n3Z#$pE^ML3QChnx%hrAtpv9-e*${I|BBmx z#SJL%|1541j~O^PWMyOdnONkaYri_wAzmvoNcvxR&jeHDvtKgFO_6zsGmw)w@>2q9 zPXXbj{?dH^Pi?si1X*JIE0_79n?XQ0AKi-RKL!~n(Vxb#<#eJX0KJkbg4|nHD&#to zh7qIvPcdloqz z^+J2U3wP$MuF5v>eYw(-`jFeSbJO~oR?(ZU1`S3!hV!2e-<*%(Rdo4gtceOgM!^hLwdm^xAyrDkv5$4twc6+Y8f!0f1XW%fi3I!?oTZ7mw~ z3Jm%54wankL<9}j1f+~Bk2a`S}k1dtpoH*4KE^M?-4fdY^&0dt!19z!1FKc=}Gw{}faVg@)r z+tHIRa-NaEhlhqolQk{Fz5F}>FBbn_)sI$|T?i5guJbKpV=W+(7H>A`~ldG z;9F@V9Ji%GXJ6w#voK7KtFwAHMx2(elUk-hjRe)i&GQ*_Vz@`&VT2cYlG!}H{X#F~ zIVy(Cis!@n&iMVn zFugPULW^YXjqUep9@u!0GsM(r3Hbj|kD@k0apJi&6i+zOL#)LsB~fRDDx4~_-0bTU z-=4j4Ne_V=_U!ra9{-IWH{&qK<`;PjrRup6%>_?)AvT4$!^O8|r(Q2Pj}!>Z24za5 z>hzTsSJZ>SGh>b;8mTk|TCqhevHJ0w|t%v;8 zIed} z`jP<~eHLD?2*rd;X}I_x+*Y%n2Gfg$aR%oW6f+fjV+u0aXsMy z9?{evKQ8cDubHnF-gIcbzCP~xcH5q*n7xy9W`*|F%~qcC&2enOgHeIw-9h@gGUx6+ z>bO?vm8K*dPN;}7B3QWggj!2C2+S-$Id4z%dF=B+r^D?$RU0FX5z-_l>1J%U5E9)= zY&SU9^>Z3yw%%dNpQyeBNXk*1RA|N(=XwVg-*6ly=c9r+w766p<qE1*S4% z+-Kp{_x<$~?I}sx87y1&v^R$i4--WUMFd~0zgEa~0);93VxdAtYN2Ud5zT_;ux?nA z+x8E_se-+bA&?bVzqF^r41ehI8%4{2BFVqF0Kj)C@Xz<(K5!9)NK+r{p6o^8L10r+ z7p)DIf4o(eR&k;vLF|)?5F#1t%xlrlutO8-fZ9mgM&{KMnqveEp6$e{I>ce@>Cn;> zHw|YjXgI)3+LlDErS}N;fp7R2wOW?%PW7ob`D#g{XSrU!P=#T$@kY5ayTNDTUJYGErZUh=^ESdhy+j(l2v<}!-S&FacJFA zAhjD3u&N!pf852tl>(l!G?1$i?=1IF7jH8j>Qhd^rgA&|yhFYvcd8uO!$PaA5L|ge zb=lY=-9%w9EJ5`UdBG=?D#NV6vlpKT8bVBfDed|m)wn6t=rg)2`&YF3?+{D@DxLc< zM`_-#OaP&n5I@(6Q!Yk^f!~;*YrT<)T^MU(krV0a zJh7?Kx2a-dt7hJjp2JCX=>ei22G~M`Hpi6|6I3l=!J8=Cx25YF#m{2P7~i}uD!P*} zIYlKPCI}A)B%M!it?)&0Lco zg3dx|uhX&V4Z(7S1!$8Oe9W4+ZG_}ox@IqY{j#pYabpXSMRT|FMlLqmW^LY^P#3MN zT!LyIO~Pnep`|0WonG@LCP?}}=#s_zDhV`?fOUB9&V^bE5&Kd^p1kUi44}I1ygHjx zX!>IFvt+Z11lFfx%ZVjR*^K_X#)F2%He4!Ai~uIW3?+m{tvVKJg+H{%uJ@aO?m3aS zze6$00YO)UN!aqC0u4#0#Hi}D@ zn_N7bzS=0{9_G-`C=;b^WN9xh3o)O-ikEcSWiL;cGPhMGSL;G(yn9$|9Nn9k{c z=MPXG^hO@2@!*Fd`6KY-RBqd4;lr4UskkEgmO?Zx%J1!4t^=rqnU?7Sgr-6F_i|x) z%x5v7u1Z&-d*a&Lk=)NB!k+a&{z@kDHZSMLA0r%enhj}6EKPQZ8@U+y<9TJ#4# zA(3ke&D+U0>w8$QmTHhywo?BXz#b!P9KLc0#HCQU?JyzB1UZ^khg@dMi7T*(+slux z_VeeE^zuAL$gssva!+U8wpd0lq)&}(&|2lFHpQ2abOysr;X2Ww@qNNO_pHN@7m0)r z%57qoUQVujcD9nvYsd<0OKOPJCq1_WNPRx`6Dt{w=(n<3=4O9Xc{kdvityr`ytSMh zk2~j8oI-N%1G~r-CfYuR4&cg8nd@?rz>%es8pG>oY$+4j3anBDCF3^Uf|3+joYR&_ zvVo6@_dpRL9eOEOj?b>1(&(@;85N9i9M+z_tCgoNgS)u&a^%*(b@S)nPEkNP($mP| zhld2g>`+&Gd)4>dlm6b^^!BRzEpywqa2rN%vOq8k+B-G-dXmSi&W<5E{z!Bl^x7rW>RH8TjB;<)t-@5d+`guV&>zcb#WE$zyO1Y7RT(y zp?;m^f=U8H-%hq6gxxqx$DyjJ+S<{^aVo570ZSS8cmQ;fWLz_P%osLan(-u>v<^vp zUkWkr%@*z~iNHnFFFBSgm+(llqRJ8P` z<$Phz1l<<{f+=3T0tL>uTh~1YPSrb9$PlwWVM|e_^2!--*x?cTm=YG+CA*7JS|2py zUKh|ctH`>V_CHY1b4pU@DOy-pX~LLQJ1FOkg-7Wt07}!)FRN6c;dU;7uWK+tR7@AH znxR})S+siW3?(I}fP-Z?HbeEwI-S|c#(6n2Tuz_wvEuM(L?99Hz0{F&m)k}27`{_U zR}D^ywa~wqZ#iS;sMk0b62tIzaATl955v&4+3^_*<<3n6`MC&yY>MM?1S?vE$jO6b2qFk>*(K&0?RGa?suE# zfPGJ%Auon&Dm=o~GrIF|G-#x&E|n1nkBkm^$uugJWUNnC_u6s1KSIw($uQfN6ADVF z9W-}8VOU}<4ZZH!)il%f8P2)es9Zg3cl$P=%uwyM6I9#39vmE$1^7R}dm$!txDy{!$bKfDqkG#?F@T`j&fvXy)~zGI(7d>9W*)zpzF z)Ry{CsnyV-U4E&*CvT)ZfMs17ZrQe^SiIG|Q;cTO*jb4}8f@evXJ(2Q!OFmkZW8t3 zNE0g?j_VpX zRrNj&4B$S*dDM9;@n*{1$fzOdb7-vnJXX{%hO>;(Xh3!0u7~S7qHxBV6#~puxTL;9 z3$i=prtq4J@FDdyg~hvzn*>=Z&I(Q)syU6inHG9ylR3@4A>8@euZ6e=vw`uex^~OU z)`-*HUCAQjR5!B=*9W9pcunr|@0PO??}E6TwdKyCUxW2s!}3WLe9|E+#Ov>F3`Oil ztW>1C5xWt922S~@pD=7u%eZFNU2kSpy7K8daY_!Rl3!x__C3>RZ4hIw@hV3G|D@YW zx%~CH&F@73KS_R~UXxxR0GOXr#*7(QjNP2niJ!XZ2ecZ#!%Nw{7u zNXe$!-w(x)%f?{3ZlQ{O=jEbD>W{4o0(q8h-70ca7rk=-?cHFFq=i1K{PZPJlYMNnwQC{N`e$Gw(nLlcTg#@UF zOX^N!R##W|4)8o6cC|6xT%O`I=n@f_nQ1;uHnuz=(m0r?cb|+kOFK{MB)#x;!v>W= z4a&|OPv_noX>a^!caHuFSIJy=Fy@|v>WIc+! z^Lbjg`-7(w8BJuvvafMs{OKWVGKD!FvxU{_bjv@m+{qr*w45bGln%OVoc?8!gl=_A zhSp%zr{aE9&PFDz2s;4OU$vV1iOQjq$xpNVQJTp8E2cPSeA7Kl7z&8hJMPDsgoYG) znKNV+s@$0|D#6QqAB-Q%#NEE{zmfJNMu*^f)w7(;w|-!iilP*;@=ld}dqmtu<=_l^ zR(bOaj&Cj!8OjJF%P#zPaJD%og8=h$J+5K`=6t z)cP@sq`R-BR>%+M$CXnK2o&;^hs*YQzn-MCQQhbySi)~--7XKvq`x?Rc-h%>*lT&g zZ@!sD1>UDlt?hOqr)n*$3!i?kPEnXpqFNZczGa(Wwl24_bp`eP1S7rRGf}72aTD(r z;Ha2tg#X_LvLKwilA)(=LG!phJ&;D;&(BYK!D!$|Z6ZG`74aa5Tg92@k>>g)tK#y@ z$xjrI5i1il^tH%}O%nvka+(S=&mowKPc$IZT^LwOa}8($TWJK%4#^?*rP%itIv}YJ z3AqjxsjC#-d#flcR>vu_^Vl_#uZpm4n}Ajv^_{?d(Bq$Smj|ni78CH;Nrc8X>_9a3 z5l?g^_JP0{pXTfK0ktl>EJ-r@k;0pE2g!vj)mX8C-)r>_o?ULAi&G6nP2(J=c-Dtk zansT&!WHR)i!K7r@YO6g1F+^%_>wuOs-i(*sGG8+9~)`{aCV$>HE;Iy?wL*SrL!i zo)e2xhs#AbQCnhXDmIrqUA89-(9%~2xrBNGPY+KM%*fzs89MFdUKOvQx(4a^_Ow+v zs5!C?I~RKu1MUP|Qu66Bx%3Hgl0lcPq{Na3F(u2R9^UkYL|5ojWaHL z%^Gpw!|o{a?e-b}LS^hW>kL$Z;fk;`D&{iG@3+^aN|9Sq481p}mZvb@d1C*E#M z;jN;$_eCo6=;Cvl<>PG7HjcpxhwX>@tZGFB9PaS4XxOW{&h+Kw$$jSpNzb;Ygw(8{ zV=qJzscwrFSoKZXM5`WVS1nB}wixJD z$+euJiQDS*S=>I){(*%c=hD#2Bq!7-k?E7JpE$e{(g6;-$WS0B z74irkuuh1aO61tuL)*dr{hAp8i$dgTEo$tjp+f(ffv3YmiE1`8Tl#lP1=OoL{yXn6epKtp+$fOah{f*S*8{7wf6 zK*Vv0U2IL@Q7HD&KO;`PRJL8MIa;5QC1a}(ve>Wy7FxIREps~+M7H|sClYH=vg=dP zT8y82-`Y>)U9nO*>Sfsa@Ta zRq6d^Hs$WYF)J}o3qaj)25~C$lCfJ8-MtIk)^ETtb8|`tH!1qrwpPT_;Gwv!I>fD_ zqMUvkoVa}Af9j0d*bHkJ2^zwei0(s z1xxQA_~z~V!W(l!apfOfbn*`rst%(fz4)QE3j)`XCr5qFiX8gkapyRnGiM{<%RQ~e zwPq9Zvs0+MbW2!pvH60IZRp&F)N?b)B*~Uls06Prf?0BKw24C3FM;yIrWfX5Y-RW9 zak_ROx4G1qtp;Il*eTbxuSe}ub=V@hxCb4kYA&ea!*!{c0Ol@RwMovnQk&OAejCB7 z6J()T_<@*5{aG9F)fIOzfJTJmEl=Tuh{wyBje#VbUhk4~vSgRN(Y~JkXDjqC%Vo*J zb~{0LA>NLTPtoLmgv&ScKwQ))i0-F75OfKA)6KEB3cEJw9>5vuT0K%W@hmT-62nco zSelRej4t#x=x?bubg&}igxh;hs?7GG)izf6DI=HoT6;o|!@5wOZy^-KVl&&7!^dNd z)t+N5X;fXFPe1D^HBG2cy3)I{Th#p4k^H#=N))aoyflm-%hWMjZiUTumt#+Squ^AK z0wp?QT=+_B%Y=LRKvQ6(ov*7|rRDb)1^dxqk@KAI9hggJr=N19FoB&QO;B|i6l|Mp zm@+jPhb73RZOLF&N#TWoQC4MDTG%H@68?cuCq#K6&JlUbw6|Y_r>e3}#mGMZW2$<- zGaalj>A=uhTABu6sFze~$|dHoW=^vzY~h+2Z-qI_GGBw64Yczvz^pAjbwuM=1@v$DNzqM}PiqS-{ZWanj1$*I9`7Ux(sNi)|@{n*yqQ+%uRP8=It;t2JA zMYl_iWtQF?LP?KvhE|GV^q!NIc@qb^j;An>YZg6F0ES7k>A7(e4ddZs=WbPSM^l*b zG;Yt2tlsy;&W2qS(@jYtZj|WMu8E1Q4jO+Ulx%|xu>QTs`KeF1u=fs+4PDOnpC%JeII{RaA+xn1-L3Ens6;< zFCU#Um`=U4EvskMZtOVHtv0iaEML3ly7@!ES*Qae4eCru(F&oD`@XE(jL_?EAK*cJ zMd(RoG{r9GsS9a#wNDMm$+UFQAc=WSej3(GSA< zuM1{DI?8b;yXkK}8%kV!7H8=2dQwf7W_U5C9nrNf?`6@&k*q5-f~SE9k~HiV_CA7| zJgu2Rv-fYo2^673sDr4)C{}xx%%c`0+_cn-U$5>8%jJ8JR4}uKh~c0F<1^n>^UJgr z5YMJBG%n6$ijRa+O43qj?i6$><;o+=pKl$xm_xoklov39r>`jN+G5|0rsQhljt-kK zwP(?3GEo<`*T2`$Q|xPHlx&pG@bWnbDBvqJBdI^~W{^$d+E1Q2&#H9~5Q*N-02{@K zpME@aV@CmUA7R)j9*`6Z&XfQywbxvD))7#wlPVklj;ReaOvdyydWzmD1htzvX~*E& zBr18k#{i{6k|Clfy0^2AG&1hS0lca-$M{rvtU#qnOwD=^pyt2!RM`(Zc5P(IGKTf3*fI{e??%o>7VlNxq z0)d-d|0H5DWk1YfV;})1)_i_89_dQ3wcLqbeD50W?Mr2>wjC>M;iDkr?9;=EAbh~R zW6H~sK=dw*598AfR|x|uE7LtOjSAZiu-X^hso~Qx%>;|pfOGjnw(&Rk#dM>z8(A5dP8M*!c)+b+w_>m~XXLd||id%B0z3W63s(B_@12V1?{3=`ogHdw6~ zu}V<~+OuaF8LLa561Kl@IT(B{?OAb>qTC?Acnz>Wagl2-)L2!=6}hp0zjlmPOcQb5 z6m<=(H|DO0vqWrcb(m$SUY!e%Gp@(Sxr`Uap|}9pfrOmi7y;3JT^DJJ*2@xE8L|1K zav!mRfB&uX=_fhFl?$}A#+F@A=Dn7WjxB7wLOoPv=nTy9@a0>#dKGfy-rNC3lv!8om?gI8GJon z-TyU`2(n%@0WQyB+5NSj^3iJ;BAd9Tgn!w_=(Q5g9>p6`lTx!dv`RupOYgMwusD0= z{#e+ISA%?&q^46D@gsn7cE_wH5>zo+Gj@3cUx2?kZaQiM7e2t_kYtPxIMBA?f4Ia* zv2OqyqkBQ1KXto|KTZ67KYnwtlit{*TP-S2qrlZ6bB%~}$ET@h_-oHUt{Ao_3>vP) zz?4~ZR=VQ$2k0N!3nihkH!_L0!hcli-7Bd<04aDBfc;ycs)-Xxk??NaEE#H&`c3TC z&1%d}sfwTwS~*%vm~0lTRQNTv8Gidhbm`9~N3jktt9%vphsScg*q2@EP@OX+4~iEk z8ZG+@EQ9nsi6nye*qY4l>sip8nCVQjdyjQ_caEJItl!MT;J42%uAJ<;yCWvCb_WwN zmqXG#_+sXMo_C%Uaw;%h&0)5i11$Gk=+mw8@bvP_IrxRvCoL#0s z5x>kkcv(%yF2+&A_ybQTDIfXsSJC*Ubrs>*%~;*xoq^Ttj*6ln$CH5HO)j>y&8mge zxfU$Ncn`Ju%3|AIgYFtwP##=<5JSyGDcI$XB!MGyi}!#HF5v#%p@vNIlYfBTK7eYdx%X^AW9|k7eB-{6 zvWxqC!?BxW5`e8*_UE^oVgDu_a?5JAJ13znNj&3Q8eGx#f03@0 z+|^d7k-Of_$C7`RA`s$C9hi6M$Q4QYM{NEUM=+hoD!zs&XOLz!Z`A;ii=EVz3B8}`Z;MfI_50z*Pu5aQ*^XRXj$X!e+!zTzGwzS0c;?PZKqVN%yU;m+98ByEK zBbh;ZgHS3g7o3|LUTJFjuYJn{X4nfM-398({x*%Zup8ouU+whXQAVzP*z*}LS=#)!B8Kw_Zs?vLxHZ;<> zKXeXFPE9jpl297&Y~(q11F+Es!Z!0#vzWwqPp%B>(scQD8M)x) z3V-8~Y>!;SMG16;jTnMfx2?ZF->_Z6amr6E8qM?}o&bW*AXb%(o*KT4M}4$@hY`2? zGYC%vUS$HauRGA0u5EnHtw1B4e`yAL|Kx==HHY;4E|j z)IOh-8DlJ|p9o^irje%OItOD_owq`tFRU(9WU3tfmy~pAtKTV(cWRCE7^=R|3 z&7=6xzS*LhEM_F3sU(l$eOHz`6F>6SUTMAUG6)aYoi6Ow(0{{Yv_j*fy++Z*`<2eX zdzA6A_>%5IF<$OMF&3co7(FTSB5}n2RbIYgl4_=H!GXiar0}zFrrWnW2QxjMkdX*z zR(Mn~$ql-!B#ZtSfTBdKKB6*>q}s`jz;J~8LUsV^d_Tn%6e}{8_k%rzkE^N<@7CtI zve{O2I@ffV#5sz?T5a?1- z)8*_Me3n-RtF0W&)hFHt7>&b-+DxoEA~`eyplIG-y{=ZEb-4Ap`u=+}I1Fjd>;Sq( z@D`HG3huX_7fIs=K#Rg+iez)b3v1l=qH@F%u%?y$aR!N|Ool)J4OeZ7Vn#FC%LR2e zA8Q2l(ugDCFzn_D&@DOXJ5}mOC)8o=zc`BF#Gob_Ui+R(&RajeQ4&|^=KE|V^~XUl zY{j_p5yH$IXs0tj0=IOwhglKiChlefJEJ%aDkmUttr{8ciBGZ{Xviv(vMd?3hw&&} z#r2*BEBg3T7P*V#kt=r1Iax^UJPqJSU*B6z#5lqjU(wOhrVKPDW1~<$d3m5lp@vK$ zM5sQqFHhOfe^WqLvf&cD|}x6$sZ>x;2&|+-IAlILc~7)kw{ZjZg7nDzw6}uKQI!JIa`iKQT4& zoMx^gKBXf0b1|T&i9+Af>Ov^du7kjE(@rLzokLism-eHQL#2{i=J|m zs4QtMc1KwXSUx6n>%9v1JCJ|h=ltSPzo~Kv&YE5@eZqs8g4Ja+4WFd39O*=jR_|&r zwj=3Tj?Kik>$a%Leb1E2oO0TEcfL6sKz4k}Ih&7tDZy#8s}&|C9wwHK7dbCoyn6Up ztZ|%4AOcf{wVh`4BAYv!s6hm1KTW)?D+y>N76XJMa-=@A zPgpq)Cxmv0_%Syv@vR5!Ie4d`(!*yLbPL`jS&!&<&|?T37F#j=@e_%{CzPI z?Z$UzCyPtCl|lD!zSC^58EmxZq9ttp5ch5*Simo4J~yj)ecYFx?$M*ogo86(J!?6l zj|$9JCh`xIxVlaE=V;ecQ@BXeV#;hPR9WbS6XVu(`i>+$@rbuNmOZ{Z+Y|T{xVCG| z!+?tFFJ$k}zrBGzQ4n13=Ra@}lu@UG-aet)mAnX0WJmIjaa{m|WZYyg&5Bypb9h_m zc7C>PJ?!6YPi&}4jLH}n-IO;b(>8lx4GLhcXp>4c&vI4bUzsTYyLLPqfs+fef_eeH zvK!g_gq`d9gm?S~aq67;Go^sCm5r#8beLtf9QO-RPHrt@D^hE*jA0!|EJ|#-bG_Zs zmKRaomoCF1U^_jCoT9PcvZ*6L(WFfw=sb8Gr++d2JWabWwn7QikVR+bKEn;WvfNw> zrlhjPZ~zh*h1CIzP=d!VG?UpF?K~yXdq=^kXL%AZ*c(e!5tyXHtS`k;{`cw7lZub;3KIxJ#C(gb*1nyhkno4gl#n&w7bARv( zfErx83GY3p{ip*z6OS`Iq6 zGC`|Z|X=;zxhK;u9`iUlZJqd=< z^rP{E-idANDhEhhc^LSge|eGDYZbr9x1;PLm9bueNuw}Aa@|FN@X vx~0+ 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

@s~J#!lGNB;C|Cb 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 diff --git a/docs/mint.json b/docs/mint.json index b4412dfe2..458ff795c 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -22,10 +22,7 @@ } }, "api": { - "baseUrl": [ - "https://app.infisical.com", - "http://localhost:8080" - ], + "baseUrl": ["https://app.infisical.com", "http://localhost:8080"], "auth": { "method": "key", "name": "X-API-KEY" @@ -112,6 +109,7 @@ "pages": [ "documentation/platform/organization", "documentation/platform/project", + "documentation/platform/folder", "documentation/platform/pit-recovery", "documentation/platform/secret-versioning", "documentation/platform/audit-logs", @@ -227,9 +225,7 @@ }, { "group": "Overview", - "pages": [ - "sdks/overview" - ] + "pages": ["sdks/overview"] }, { "group": "SDKs", @@ -304,9 +300,7 @@ }, { "group": "Service Tokens", - "pages": [ - "api-reference/endpoints/service-tokens/get" - ] + "pages": ["api-reference/endpoints/service-tokens/get"] } ] }, @@ -320,9 +314,7 @@ }, { "group": "Overview", - "pages": [ - "changelog/overview" - ] + "pages": ["changelog/overview"] }, { "group": "Contributing", From 9d33e4756bda477965ddb8ec53dca43d8ef2a459 Mon Sep 17 00:00:00 2001 From: Khoa Le Date: Mon, 19 Jun 2023 23:32:35 -0400 Subject: [PATCH 52/55] Add eslint rule and fix as many issues as possible --- .vscode/settings.json | 3 + backend/.eslintrc | 13 +- backend/.prettierrc | 7 + backend/environment.d.ts | 2 +- backend/jest.config.ts | 14 +- backend/package-lock.json | 12521 +--------------- backend/package.json | 1 + backend/src/config/index.ts | 132 +- backend/src/config/request.ts | 28 +- backend/src/config/storage.ts | 4 +- backend/src/controllers/v1/authController.ts | 138 +- backend/src/controllers/v1/botController.ts | 38 +- backend/src/controllers/v1/index.ts | 34 +- .../v1/integrationAuthController.ts | 511 +- backend/src/controllers/v1/keyController.ts | 20 +- .../controllers/v1/membershipController.ts | 82 +- .../controllers/v1/membershipOrgController.ts | 136 +- .../controllers/v1/organizationController.ts | 99 +- .../src/controllers/v1/passwordController.ts | 210 +- .../src/controllers/v1/secretController.ts | 245 +- .../controllers/v1/secretsFolderController.ts | 10 +- .../controllers/v1/serviceTokenController.ts | 24 +- .../src/controllers/v1/signupController.ts | 59 +- .../src/controllers/v1/stripeController.ts | 12 +- .../controllers/v1/userActionController.ts | 16 +- backend/src/controllers/v1/userController.ts | 4 +- .../src/controllers/v1/workspaceController.ts | 13 +- .../controllers/v2/apiKeyDataController.ts | 114 +- backend/src/controllers/v2/authController.ts | 134 +- .../controllers/v2/environmentController.ts | 48 +- backend/src/controllers/v2/index.ts | 26 +- .../controllers/v2/organizationsController.ts | 46 +- .../src/controllers/v2/secretController.ts | 304 +- .../src/controllers/v2/secretsController.ts | 10 +- .../v2/serviceAccountsController.ts | 90 +- .../v2/serviceTokenDataController.ts | 5 +- .../src/controllers/v2/signupController.ts | 90 +- backend/src/controllers/v2/tagController.ts | 104 +- backend/src/controllers/v2/usersController.ts | 20 +- .../src/controllers/v2/workspaceController.ts | 112 +- backend/src/controllers/v3/authController.ts | 100 +- backend/src/controllers/v3/index.ts | 8 +- .../src/controllers/v3/secretsController.ts | 50 +- .../src/controllers/v3/signupController.ts | 72 +- .../controllers/v3/workspacesController.ts | 32 +- .../src/ee/controllers/v1/actionController.ts | 16 +- .../controllers/v1/cloudProductsController.ts | 14 +- backend/src/ee/controllers/v1/index.ts | 18 +- .../ee/controllers/v1/membershipController.ts | 6 +- .../controllers/v1/organizationsController.ts | 20 +- .../v1/secretSnapshotController.ts | 8 +- .../src/ee/controllers/v1/stripeController.ts | 12 +- .../ee/controllers/v1/workspaceController.ts | 8 +- backend/src/ee/helpers/action.ts | 50 +- .../ee/helpers/checkMembershipPermissions.ts | 4 +- backend/src/ee/helpers/log.ts | 12 +- backend/src/ee/helpers/secret.ts | 6 +- backend/src/ee/middleware/index.ts | 6 +- .../src/ee/middleware/requireLicenseAuth.ts | 4 +- .../middleware/requireSecretSnapshotAuth.ts | 16 +- backend/src/ee/models/action.ts | 36 +- backend/src/ee/models/folderVersion.ts | 2 +- backend/src/ee/models/log.ts | 38 +- backend/src/ee/models/secretSnapshot.ts | 2 +- backend/src/ee/models/secretVersion.ts | 12 +- backend/src/ee/routes/v1/action.ts | 14 +- backend/src/ee/routes/v1/cloudProducts.ts | 16 +- backend/src/ee/routes/v1/index.ts | 14 +- backend/src/ee/routes/v1/organizations.ts | 62 +- backend/src/ee/routes/v1/secret.ts | 36 +- backend/src/ee/routes/v1/secretSnapshot.ts | 24 +- backend/src/ee/routes/v1/stripe.ts | 6 +- backend/src/ee/routes/v1/workspace.ts | 2 +- backend/src/ee/services/EELicenseService.ts | 38 +- backend/src/ee/services/EELogService.ts | 24 +- backend/src/ee/services/EESecretService.ts | 10 +- backend/src/ee/services/index.ts | 2 +- backend/src/events/index.ts | 2 +- backend/src/events/secret.ts | 16 +- backend/src/helpers/auth.ts | 178 +- backend/src/helpers/bot.ts | 14 +- backend/src/helpers/database.ts | 14 +- backend/src/helpers/event.ts | 2 +- backend/src/helpers/index.ts | 34 +- backend/src/helpers/integration.ts | 4 +- backend/src/helpers/key.ts | 10 +- backend/src/helpers/membership.ts | 8 +- backend/src/helpers/membershipOrg.ts | 54 +- backend/src/helpers/nodemailer.ts | 20 +- backend/src/helpers/organization.ts | 30 +- backend/src/helpers/rateLimiter.ts | 12 +- backend/src/helpers/secret.ts | 10 +- backend/src/helpers/secrets.ts | 46 +- backend/src/helpers/signup.ts | 34 +- backend/src/helpers/user.ts | 24 +- backend/src/helpers/workspace.ts | 32 +- backend/src/index.ts | 36 +- backend/src/integrations/apps.ts | 38 +- backend/src/integrations/exchange.ts | 32 +- backend/src/integrations/index.ts | 14 +- backend/src/integrations/refresh.ts | 10 +- backend/src/integrations/revoke.ts | 22 +- backend/src/integrations/sync.ts | 286 +- backend/src/integrations/teams.ts | 24 +- backend/src/interfaces/middleware/index.ts | 8 +- .../interfaces/serviceAccounts/dto/index.ts | 6 +- backend/src/interfaces/utils/index.ts | 2 +- backend/src/middleware/index.ts | 36 +- backend/src/middleware/requestErrorHandler.ts | 14 +- backend/src/middleware/requireAuth.ts | 44 +- backend/src/middleware/requireBotAuth.ts | 14 +- .../src/middleware/requireIntegrationAuth.ts | 12 +- .../requireIntegrationAuthorizationAuth.ts | 14 +- .../src/middleware/requireMembershipAuth.ts | 14 +- .../middleware/requireMembershipOrgAuth.ts | 16 +- backend/src/middleware/requireMfaAuth.ts | 26 +- .../src/middleware/requireOrganizationAuth.ts | 16 +- backend/src/middleware/requireSecretAuth.ts | 12 +- backend/src/middleware/requireSecretsAuth.ts | 14 +- .../middleware/requireServiceAccountAuth.ts | 14 +- ...reServiceAccountWorkspacePermissionAuth.ts | 26 +- .../src/middleware/requireServiceTokenAuth.ts | 26 +- .../middleware/requireServiceTokenDataAuth.ts | 14 +- backend/src/middleware/requireSignupAuth.ts | 26 +- .../src/middleware/requireWorkspaceAuth.ts | 14 +- backend/src/middleware/validateRequest.ts | 8 +- backend/src/models/apiKeyData.ts | 20 +- backend/src/models/backupPrivateKey.ts | 34 +- backend/src/models/bot.ts | 39 +- backend/src/models/botKey.ts | 24 +- backend/src/models/folder.ts | 2 +- backend/src/models/incidentContactOrg.ts | 14 +- backend/src/models/index.ts | 52 +- backend/src/models/integration.ts | 24 +- backend/src/models/integrationAuth.ts | 54 +- backend/src/models/key.ts | 24 +- backend/src/models/loginSRPDetail.ts | 10 +- backend/src/models/membership.ts | 26 +- backend/src/models/membershipOrg.ts | 24 +- backend/src/models/organization.ts | 12 +- backend/src/models/secret.ts | 8 +- backend/src/models/secretApprovalRequest.ts | 42 +- backend/src/models/secretBlindIndexData.ts | 30 +- backend/src/models/serviceAccount.ts | 26 +- backend/src/models/serviceAccountKey.ts | 22 +- .../serviceAccountOrganizationPermission.ts | 12 +- .../serviceAccountWorkspacePermission.ts | 22 +- backend/src/models/serviceToken.ts | 28 +- backend/src/models/serviceTokenData.ts | 2 +- backend/src/models/tag.ts | 16 +- backend/src/models/token.ts | 12 +- backend/src/models/tokenData.ts | 30 +- backend/src/models/tokenVersion.ts | 22 +- backend/src/models/user.ts | 42 +- backend/src/models/userAction.ts | 14 +- backend/src/models/workspace.ts | 18 +- backend/src/routes/status/index.ts | 4 +- backend/src/routes/status/status.ts | 10 +- backend/src/routes/v1/auth.ts | 52 +- backend/src/routes/v1/bot.ts | 30 +- backend/src/routes/v1/index.ts | 38 +- backend/src/routes/v1/integration.ts | 4 +- backend/src/routes/v1/integrationAuth.ts | 118 +- backend/src/routes/v1/inviteOrg.ts | 26 +- backend/src/routes/v1/key.ts | 30 +- backend/src/routes/v1/membership.ts | 38 +- backend/src/routes/v1/membershipOrg.ts | 22 +- backend/src/routes/v1/organization.ts | 116 +- backend/src/routes/v1/password.ts | 88 +- backend/src/routes/v1/secret.ts | 52 +- backend/src/routes/v1/serviceToken.ts | 38 +- backend/src/routes/v1/signup.ts | 20 +- backend/src/routes/v1/stripe.ts | 6 +- backend/src/routes/v1/user.ts | 14 +- backend/src/routes/v1/userAction.ts | 22 +- backend/src/routes/v1/workspace.ts | 102 +- backend/src/routes/v2/apiKeyData.ts | 32 +- backend/src/routes/v2/auth.ts | 32 +- backend/src/routes/v2/environment.ts | 48 +- backend/src/routes/v2/index.ts | 22 +- backend/src/routes/v2/organizations.ts | 72 +- backend/src/routes/v2/secret.ts | 108 +- backend/src/routes/v2/secrets.ts | 16 +- backend/src/routes/v2/serviceAccounts.ts | 114 +- backend/src/routes/v2/serviceTokenData.ts | 8 +- backend/src/routes/v2/signup.ts | 64 +- backend/src/routes/v2/tags.ts | 34 +- backend/src/routes/v2/users.ts | 28 +- backend/src/routes/v2/workspace.ts | 104 +- backend/src/routes/v3/auth.ts | 26 +- backend/src/routes/v3/index.ts | 8 +- backend/src/routes/v3/secrets.ts | 32 +- backend/src/routes/v3/signup.ts | 40 +- backend/src/routes/v3/workspaces.ts | 52 +- backend/src/services/BotService.ts | 6 +- backend/src/services/DatabaseService.ts | 6 +- backend/src/services/EventService.ts | 6 +- backend/src/services/IntegrationService.ts | 32 +- backend/src/services/SecretService.ts | 18 +- backend/src/services/TelemetryService.ts | 41 +- backend/src/services/TokenService.ts | 16 +- backend/src/services/health.ts | 20 +- backend/src/services/index.ts | 16 +- backend/src/services/smtp.ts | 36 +- backend/src/types/express/index.d.ts | 19 +- backend/src/types/secret/index.d.ts | 2 - backend/src/utils/addDevelopmentUser.ts | 68 +- backend/src/utils/aes-gcm.ts | 20 +- backend/src/utils/auth.ts | 26 +- backend/src/utils/crypto/index.ts | 55 +- backend/src/utils/errors.ts | 144 +- backend/src/utils/logger.ts | 26 +- backend/src/utils/posthog.ts | 2 +- backend/src/utils/requestError.ts | 26 +- backend/src/utils/setup/backfillData.ts | 16 +- backend/src/utils/setup/index.ts | 16 +- backend/src/utils/setup/reencryptData.ts | 46 +- backend/src/utils/setup/validateConfig.ts | 20 +- backend/src/validation/bot.ts | 24 +- backend/src/validation/index.ts | 22 +- backend/src/validation/integration.ts | 44 +- backend/src/validation/integrationAuth.ts | 50 +- backend/src/validation/membership.ts | 40 +- backend/src/validation/membershipOrg.ts | 40 +- backend/src/validation/organization.ts | 22 +- backend/src/validation/secrets.ts | 58 +- backend/src/validation/serviceAccount.ts | 74 +- backend/src/validation/serviceTokenData.ts | 62 +- backend/src/validation/user.ts | 72 +- backend/src/validation/workspace.ts | 50 +- backend/src/variables/action.ts | 12 +- backend/src/variables/authentication.ts | 8 +- backend/src/variables/crypto.ts | 8 +- backend/src/variables/environment.ts | 8 +- backend/src/variables/event.ts | 4 +- backend/src/variables/index.ts | 26 +- backend/src/variables/integration.ts | 228 +- backend/src/variables/permission.ts | 4 +- backend/src/variables/secret.ts | 4 +- backend/src/variables/smtp.ts | 10 +- backend/src/variables/stripe.ts | 4 +- backend/src/variables/token.ts | 8 +- backend/src/variables/user.ts | 2 +- backend/swagger/index.ts | 300 +- backend/tests/helper/helper.ts | 42 +- .../routes/v2/service-tokens.ts | 24 +- backend/tests/setupTests.ts | 14 +- backend/tests/unit-tests/utils/crypto.test.ts | 110 +- .../tests/unit-tests/utils/posthog.test.ts | 22 +- frontend/.eslintrc.js | 88 +- frontend/.prettierrc | 2 +- frontend/package.json | 3 +- frontend/src/components/RouteGuard.tsx | 26 +- frontend/src/components/analytics/posthog.ts | 8 +- frontend/src/components/basic/Error.tsx | 4 +- frontend/src/components/basic/EventFilter.tsx | 32 +- frontend/src/components/basic/InputField.tsx | 24 +- frontend/src/components/basic/Layout.tsx | 150 +- frontend/src/components/basic/Listbox.tsx | 20 +- frontend/src/components/basic/Toggle.tsx | 8 +- .../src/components/basic/buttons/Button.tsx | 68 +- .../basic/dialog/ActivateBotDialog.tsx | 14 +- .../basic/dialog/AddApiKeyDialog.tsx | 64 +- .../basic/dialog/AddIncidentContactDialog.tsx | 24 +- .../basic/dialog/AddProjectMemberDialog.tsx | 24 +- .../basic/dialog/AddServiceTokenDialog.tsx | 80 +- .../dialog/AddUpdateEnvironmentDialog.tsx | 26 +- .../components/basic/dialog/AddUserDialog.tsx | 8 +- .../basic/dialog/DeleteActionModal.tsx | 6 +- .../components/basic/dialog/DeleteEnvVar.tsx | 4 +- .../basic/dialog/DeleteUserDialog.tsx | 4 +- .../components/basic/dialog/UpgradePlan.tsx | 6 +- .../basic/popups/BottomRightPopup.tsx | 4 +- .../components/basic/table/ApiKeyTable.tsx | 12 +- .../basic/table/EnvironmentsTable.tsx | 66 +- .../basic/table/ProjectUsersTable.tsx | 106 +- .../basic/table/ServiceTokenTable.tsx | 12 +- .../src/components/basic/table/UserTable.tsx | 48 +- frontend/src/components/billing/Plan.tsx | 20 +- .../context/Notifications/Notification.tsx | 14 +- .../Notifications/NotificationProvider.tsx | 10 +- .../context/Notifications/Notifications.tsx | 2 +- .../src/components/dashboard/AddTagsMenu.tsx | 12 +- .../src/components/dashboard/CommentField.tsx | 4 +- .../dashboard/CompareSecretsModal.tsx | 12 +- .../dashboard/ConfirmEnvOverwriteModal.tsx | 10 +- .../dashboard/DashboardInputField.tsx | 68 +- .../dashboard/DeleteActionButton.tsx | 14 +- .../dashboard/DownloadSecretsMenu.tsx | 14 +- .../src/components/dashboard/DropZone.tsx | 70 +- .../dashboard/GenerateSecretMenu.tsx | 16 +- frontend/src/components/dashboard/KeyPair.tsx | 60 +- frontend/src/components/dashboard/SideBar.tsx | 54 +- .../integrations/CloudIntegration.tsx | 18 +- .../integrations/CloudIntegrationSection.tsx | 8 +- .../integrations/FrameworkIntegration.tsx | 4 +- .../FrameworkIntegrationSection.tsx | 8 +- .../components/integrations/Integration.tsx | 66 +- .../integrations/IntegrationSection.tsx | 2 +- .../src/components/login/InitialLoginStep.tsx | 20 +- frontend/src/components/login/LoginStep.tsx | 30 +- frontend/src/components/login/MFAStep.tsx | 64 +- .../components/login/PasswordInputStep.tsx | 30 +- .../components/navigation/NavBarDashboard.tsx | 70 +- .../src/components/navigation/NavHeader.tsx | 24 +- .../navigation/NavHeaderSecrets.tsx | 12 +- .../src/components/signup/CodeInputStep.tsx | 82 +- .../signup/DonwloadBackupPDFStep.tsx | 14 +- .../src/components/signup/EnterEmailStep.tsx | 18 +- .../components/signup/InitialSignupStep.tsx | 14 +- .../src/components/signup/TeamInviteStep.tsx | 36 +- .../src/components/signup/UserInfoStep.tsx | 64 +- .../components/utilities/SecurityClient.ts | 8 +- .../src/components/utilities/attemptLogin.ts | 26 +- .../components/utilities/attemptLoginMfa.ts | 24 +- .../utilities/checks/OnboardingCheck.ts | 16 +- .../utilities/cryptography/aes-256-gcm.ts | 20 +- .../utilities/cryptography/changePassword.ts | 30 +- .../utilities/cryptography/crypto.ts | 16 +- .../utilities/cryptography/issueBackupKey.ts | 20 +- .../components/utilities/generateBackupPDF.ts | 66 +- .../components/utilities/intercom/intercom.ts | 20 +- .../src/components/utilities/parseDotEnv.ts | 16 +- .../utilities/secrets/checkOverrides.ts | 6 +- .../utilities/secrets/downloadDotEnv.ts | 18 +- .../utilities/secrets/downloadYaml.ts | 2 +- .../utilities/secrets/encryptSecrets.ts | 26 +- .../utilities/secrets/getSecretsForProject.ts | 36 +- .../components/v2/Button/Button.stories.tsx | 48 +- frontend/src/components/v2/Button/Button.tsx | 168 +- frontend/src/components/v2/Button/index.tsx | 4 +- .../src/components/v2/Card/Card.stories.tsx | 10 +- frontend/src/components/v2/Card/Card.tsx | 22 +- frontend/src/components/v2/Card/index.tsx | 4 +- .../v2/Checkbox/Checkbox.stories.tsx | 14 +- .../src/components/v2/Checkbox/Checkbox.tsx | 18 +- frontend/src/components/v2/Checkbox/index.tsx | 4 +- .../DeleteActionModal/DeleteActionModal.tsx | 20 +- .../components/v2/DeleteActionModal/index.tsx | 2 +- .../components/v2/Drawer/Drawer.stories.tsx | 16 +- frontend/src/components/v2/Drawer/Drawer.tsx | 34 +- frontend/src/components/v2/Drawer/index.tsx | 2 +- .../v2/Dropdown/Dropdown.stories.tsx | 14 +- .../src/components/v2/Dropdown/Dropdown.tsx | 24 +- frontend/src/components/v2/Dropdown/index.tsx | 4 +- .../EmailServiceSetupModal.tsx | 4 +- .../v2/EmailServiceSetupModal/index.tsx | 2 +- .../v2/EmptyState/EmptyState.stories.tsx | 10 +- .../components/v2/EmptyState/EmptyState.tsx | 14 +- .../src/components/v2/EmptyState/index.tsx | 2 +- .../v2/FormControl/FormControl.stories.tsx | 18 +- .../components/v2/FormControl/FormControl.tsx | 20 +- .../src/components/v2/FormControl/index.tsx | 4 +- .../src/components/v2/HoverCard/HoverCard.tsx | 10 +- .../src/components/v2/HoverCard/index.tsx | 4 +- .../v2/HoverCardv2/HoverCardv2.stories.tsx | 10 +- .../components/v2/HoverCardv2/HoverCardv2.tsx | 8 +- .../src/components/v2/HoverCardv2/index.tsx | 2 +- .../v2/IconButton/IconButton.stories.tsx | 26 +- .../components/v2/IconButton/IconButton.tsx | 120 +- .../src/components/v2/IconButton/index.tsx | 4 +- .../src/components/v2/Input/Input.stories.tsx | 24 +- frontend/src/components/v2/Input/Input.tsx | 62 +- frontend/src/components/v2/Input/index.tsx | 4 +- .../src/components/v2/Menu/Menu.stories.tsx | 8 +- frontend/src/components/v2/Menu/Menu.tsx | 22 +- frontend/src/components/v2/Menu/index.tsx | 4 +- .../src/components/v2/Modal/Modal.stories.tsx | 16 +- frontend/src/components/v2/Modal/Modal.tsx | 24 +- frontend/src/components/v2/Modal/index.tsx | 4 +- .../src/components/v2/Popover/Popover.tsx | 8 +- frontend/src/components/v2/Popover/index.tsx | 4 +- .../v2/Popoverv2/Popoverv2.stories.tsx | 10 +- .../src/components/v2/Popoverv2/Popoverv2.tsx | 22 +- .../src/components/v2/Popoverv2/index.tsx | 2 +- .../components/v2/Select/Select.stories.tsx | 16 +- frontend/src/components/v2/Select/Select.tsx | 32 +- frontend/src/components/v2/Select/index.tsx | 4 +- .../v2/Skeleton/Skeleton.stories.tsx | 8 +- .../src/components/v2/Skeleton/Skeleton.tsx | 4 +- frontend/src/components/v2/Skeleton/index.tsx | 2 +- .../src/components/v2/Spinner/Spinner.tsx | 16 +- frontend/src/components/v2/Spinner/index.tsx | 2 +- .../components/v2/Switch/Switch.stories.tsx | 14 +- frontend/src/components/v2/Switch/Switch.tsx | 12 +- frontend/src/components/v2/Switch/index.tsx | 4 +- .../src/components/v2/Table/Table.stories.tsx | 8 +- frontend/src/components/v2/Table/Table.tsx | 20 +- frontend/src/components/v2/Table/index.tsx | 4 +- frontend/src/components/v2/Tabs/Tabs.tsx | 8 +- frontend/src/components/v2/Tabs/index.tsx | 4 +- frontend/src/components/v2/Tag/Tag.tsx | 24 +- frontend/src/components/v2/Tag/index.tsx | 2 +- .../v2/TextArea/TextArea.stories.tsx | 18 +- .../src/components/v2/TextArea/TextArea.tsx | 46 +- frontend/src/components/v2/TextArea/index.tsx | 4 +- .../components/v2/Tooltip/Tooltip.stories.tsx | 10 +- .../src/components/v2/Tooltip/Tooltip.tsx | 8 +- frontend/src/components/v2/Tooltip/index.tsx | 2 +- .../v2/UpgradePlanModal/UpgradePlanModal.tsx | 8 +- .../components/v2/UpgradePlanModal/index.tsx | 2 +- frontend/src/components/v2/index.tsx | 48 +- frontend/src/config/request.ts | 10 +- frontend/src/const.ts | 64 +- .../src/context/AuthContext/AuthContext.tsx | 14 +- frontend/src/context/AuthContext/index.tsx | 2 +- .../OrganizationContext.tsx | 10 +- .../src/context/OrganizationContext/index.tsx | 2 +- .../SubscriptionContext.tsx | 12 +- .../src/context/SubscriptionContext/index.tsx | 2 +- .../src/context/UserContext/UserContext.tsx | 8 +- frontend/src/context/UserContext/index.tsx | 2 +- .../WorkspaceContext/WorkspaceContext.tsx | 12 +- .../src/context/WorkspaceContext/index.tsx | 2 +- frontend/src/context/index.tsx | 10 +- .../UpdateUserProjectPermission.ts | 8 +- frontend/src/ee/api/secrets/GetActionData.ts | 8 +- frontend/src/ee/api/secrets/GetProjectLogs.ts | 22 +- .../api/secrets/GetProjectSercetShanpshots.ts | 8 +- .../secrets/GetProjectSercetSnapshotsCount.ts | 8 +- .../ee/api/secrets/GetSecretSnapshotData.ts | 8 +- .../src/ee/api/secrets/GetSecretVersions.ts | 8 +- .../ee/api/secrets/PerformSecretRollback.ts | 8 +- .../src/ee/components/ActivitySideBar.tsx | 50 +- frontend/src/ee/components/ActivityTable.tsx | 32 +- .../src/ee/components/PITRecoverySidebar.tsx | 84 +- .../src/ee/components/SecretVersionList.tsx | 36 +- frontend/src/helpers/key.ts | 14 +- frontend/src/helpers/project.ts | 84 +- frontend/src/hooks/api/auth/index.tsx | 7 +- frontend/src/hooks/api/auth/queries.tsx | 22 +- .../src/hooks/api/incidentContacts/index.tsx | 2 +- .../hooks/api/incidentContacts/queries.tsx | 8 +- frontend/src/hooks/api/index.tsx | 26 +- .../src/hooks/api/integrationAuth/index.tsx | 2 +- .../src/hooks/api/integrationAuth/queries.tsx | 14 +- frontend/src/hooks/api/keys/index.tsx | 2 +- frontend/src/hooks/api/keys/queries.tsx | 8 +- frontend/src/hooks/api/organization/index.ts | 2 +- .../src/hooks/api/organization/queries.tsx | 10 +- .../src/hooks/api/secretFolders/index.tsx | 2 +- .../src/hooks/api/secretFolders/queries.tsx | 22 +- frontend/src/hooks/api/secretFolders/types.ts | 4 +- .../src/hooks/api/secretSnapshots/index.tsx | 2 +- .../src/hooks/api/secretSnapshots/queries.tsx | 30 +- .../src/hooks/api/secretSnapshots/types.ts | 6 +- frontend/src/hooks/api/secrets/index.ts | 2 +- frontend/src/hooks/api/secrets/queries.tsx | 40 +- frontend/src/hooks/api/secrets/types.ts | 16 +- frontend/src/hooks/api/serverDetails/index.ts | 2 +- .../src/hooks/api/serverDetails/queries.tsx | 10 +- .../src/hooks/api/serviceAccounts/index.tsx | 2 +- .../src/hooks/api/serviceAccounts/queries.tsx | 14 +- .../src/hooks/api/serviceAccounts/types.ts | 2 +- frontend/src/hooks/api/serviceTokens/index.ts | 2 +- .../src/hooks/api/serviceTokens/queries.tsx | 10 +- .../src/hooks/api/subscriptions/index.tsx | 2 +- .../src/hooks/api/subscriptions/queries.tsx | 8 +- frontend/src/hooks/api/tags/index.tsx | 6 +- frontend/src/hooks/api/tags/queries.tsx | 8 +- frontend/src/hooks/api/types.ts | 18 +- frontend/src/hooks/api/users/index.tsx | 2 +- frontend/src/hooks/api/users/queries.tsx | 42 +- frontend/src/hooks/api/users/types.ts | 8 +- frontend/src/hooks/api/workspace/index.tsx | 2 +- frontend/src/hooks/api/workspace/queries.tsx | 24 +- frontend/src/hooks/index.ts | 8 +- frontend/src/hooks/useLeaveConfirm.tsx | 14 +- frontend/src/hooks/usePersistentState.ts | 2 +- frontend/src/hooks/usePopUp.tsx | 8 +- frontend/src/hooks/useProviderAuth.ts | 36 +- frontend/src/hooks/useToggle.tsx | 4 +- frontend/src/i18n.ts | 18 +- frontend/src/layouts/AppLayout/AppLayout.tsx | 168 +- .../AppLayout/components/NavBar/NavBar.tsx | 84 +- .../AppLayout/components/NavBar/index.tsx | 2 +- frontend/src/layouts/AppLayout/index.tsx | 2 +- frontend/src/layouts/index.tsx | 2 +- frontend/src/pages/404.tsx | 12 +- frontend/src/pages/_app.tsx | 44 +- frontend/src/pages/activity/[id].tsx | 46 +- frontend/src/pages/api/apiKey/addAPIKey.ts | 10 +- frontend/src/pages/api/apiKey/deleteAPIKey.ts | 8 +- frontend/src/pages/api/apiKey/getAPIKeys.ts | 10 +- .../src/pages/api/auth/ChangePassword2.ts | 2 +- frontend/src/pages/api/auth/CheckAuth.ts | 8 +- .../api/auth/CheckEmailVerificationCode.ts | 6 +- .../auth/CompleteAccountInformationSignup.ts | 2 +- .../CompleteAccountInformationSignupInvite.ts | 2 +- .../api/auth/EmailVerifyOnPasswordReset.ts | 8 +- .../pages/api/auth/IssueBackupPrivateKey.ts | 10 +- frontend/src/pages/api/auth/Login2.ts | 10 +- frontend/src/pages/api/auth/Logout.ts | 34 +- frontend/src/pages/api/auth/SRP1.ts | 10 +- .../api/auth/SendEmailOnPasswordReset.ts | 8 +- .../pages/api/auth/SendVerificationEmail.ts | 6 +- frontend/src/pages/api/auth/Token.ts | 10 +- .../src/pages/api/auth/VerifySignupInvite.ts | 6 +- .../api/auth/getBackupEncryptedPrivateKey.ts | 8 +- .../src/pages/api/auth/publicKeyInfisical.ts | 6 +- .../auth/resetPasswordOnAccountRecovery.ts | 8 +- frontend/src/pages/api/auth/verifyMfaToken.ts | 2 +- frontend/src/pages/api/bot/getBot.ts | 8 +- .../src/pages/api/bot/setBotActiveStatus.ts | 8 +- .../api/environments/createEnvironment.ts | 8 +- .../api/environments/deleteEnvironment.ts | 8 +- .../api/environments/updateEnvironment.ts | 8 +- frontend/src/pages/api/files/AddSecrets.ts | 12 +- frontend/src/pages/api/files/DeleteSecrets.ts | 10 +- frontend/src/pages/api/files/GetSecrets.ts | 8 +- frontend/src/pages/api/files/UpdateSecrets.ts | 12 +- frontend/src/pages/api/files/UploadSecrets.ts | 10 +- frontend/src/pages/api/files/batchSecrets.ts | 2 +- .../integrations/ChangeHerokuConfigVars.ts | 8 +- .../api/integrations/DeleteIntegration.ts | 6 +- .../api/integrations/DeleteIntegrationAuth.ts | 8 +- .../api/integrations/GetIntegrationApps.ts | 8 +- .../api/integrations/GetIntegrationOptions.ts | 10 +- .../api/integrations/StartIntegration.ts | 8 +- .../api/integrations/authorizeIntegration.ts | 10 +- .../api/integrations/createIntegration.ts | 10 +- .../getWorkspaceAuthorizations.ts | 8 +- .../integrations/getWorkspaceIntegrations.ts | 8 +- .../saveIntegrationAccessToken.ts | 10 +- .../api/integrations/updateIntegration.ts | 8 +- frontend/src/pages/api/organization/GetOrg.ts | 8 +- .../organization/GetOrgProjectMemberships.ts | 8 +- .../pages/api/organization/GetOrgProjects.ts | 8 +- .../api/organization/GetOrgSubscription.ts | 8 +- .../api/organization/GetOrgUserProjects.ts | 8 +- .../src/pages/api/organization/GetOrgUsers.ts | 12 +- .../pages/api/organization/StripeRedirect.ts | 8 +- .../api/organization/addIncidentContact.ts | 8 +- .../pages/api/organization/addUserToOrg.ts | 10 +- .../changeUserRoleInOrganization.ts | 8 +- .../api/organization/deleteIncidentContact.ts | 8 +- .../deleteUserFromOrganization.ts | 8 +- .../api/organization/getIncidentContacts.ts | 8 +- .../src/pages/api/organization/getOrgs.ts | 10 +- .../src/pages/api/organization/renameOrg.ts | 8 +- .../pages/api/serviceToken/addServiceToken.ts | 10 +- .../api/serviceToken/deleteServiceToken.ts | 8 +- .../api/serviceToken/getServiceTokens.ts | 8 +- frontend/src/pages/api/user/getUser.ts | 10 +- .../src/pages/api/user/updateMyMfaEnabled.ts | 10 +- .../pages/api/userActions/checkUserAction.ts | 10 +- .../api/userActions/registerUserAction.ts | 10 +- .../pages/api/workspace/addUserToWorkspace.ts | 8 +- .../workspace/changeUserRoleInWorkspace.ts | 8 +- .../pages/api/workspace/createWorkspace.ts | 10 +- .../api/workspace/deleteUserFromWorkspace.ts | 8 +- .../pages/api/workspace/deleteWorkspace.ts | 8 +- .../src/pages/api/workspace/getAWorkspace.ts | 8 +- .../pages/api/workspace/getLatestFileKey.ts | 2 +- .../src/pages/api/workspace/getProjectInfo.ts | 8 +- .../api/workspace/getWorkspaceEnvironments.ts | 8 +- .../pages/api/workspace/getWorkspaceKeys.ts | 8 +- .../pages/api/workspace/getWorkspaceTags.ts | 8 +- .../pages/api/workspace/getWorkspaceUsers.ts | 8 +- .../src/pages/api/workspace/getWorkspaces.ts | 10 +- .../pages/api/workspace/renameWorkspace.ts | 8 +- .../src/pages/api/workspace/uploadKeys.ts | 8 +- frontend/src/pages/dashboard.tsx | 12 +- frontend/src/pages/dashboard/[id].tsx | 16 +- frontend/src/pages/email-not-verified.tsx | 4 +- frontend/src/pages/home/[id].tsx | 88 +- frontend/src/pages/integrations/[id].tsx | 130 +- .../aws-parameter-store/authorize.tsx | 36 +- .../aws-parameter-store/create.tsx | 100 +- .../aws-secret-manager/authorize.tsx | 36 +- .../aws-secret-manager/create.tsx | 100 +- .../integrations/azure-key-vault/create.tsx | 38 +- .../azure-key-vault/oauth2/callback.tsx | 18 +- .../pages/integrations/checkly/authorize.tsx | 22 +- .../src/pages/integrations/checkly/create.tsx | 34 +- .../pages/integrations/circleci/authorize.tsx | 22 +- .../pages/integrations/circleci/create.tsx | 32 +- .../pages/integrations/flyio/authorize.tsx | 22 +- .../src/pages/integrations/flyio/create.tsx | 32 +- .../src/pages/integrations/github/create.tsx | 32 +- .../integrations/github/oauth2/callback.tsx | 18 +- .../src/pages/integrations/gitlab/create.tsx | 50 +- .../integrations/gitlab/oauth2/callback.tsx | 18 +- .../hashicorp-vault/authorize.tsx | 53 +- .../integrations/hashicorp-vault/create.tsx | 48 +- .../src/pages/integrations/heroku/create.tsx | 32 +- .../integrations/heroku/oauth2/callback.tsx | 18 +- .../src/pages/integrations/netlify/create.tsx | 42 +- .../integrations/netlify/oauth2/callback.tsx | 18 +- .../pages/integrations/railway/authorize.tsx | 22 +- .../src/pages/integrations/railway/create.tsx | 46 +- .../pages/integrations/render/authorize.tsx | 22 +- .../src/pages/integrations/render/create.tsx | 32 +- .../pages/integrations/supabase/authorize.tsx | 22 +- .../pages/integrations/supabase/create.tsx | 32 +- .../pages/integrations/travisci/authorize.tsx | 22 +- .../pages/integrations/travisci/create.tsx | 32 +- .../src/pages/integrations/vercel/create.tsx | 48 +- .../integrations/vercel/oauth2/callback.tsx | 18 +- frontend/src/pages/login.tsx | 36 +- frontend/src/pages/login/provider/error.tsx | 2 +- frontend/src/pages/login/provider/success.tsx | 2 +- frontend/src/pages/noprojects.tsx | 14 +- frontend/src/pages/password-reset.tsx | 60 +- frontend/src/pages/requestnewinvite.tsx | 4 +- frontend/src/pages/saml-sso.tsx | 34 +- frontend/src/pages/settings/billing/[id].tsx | 84 +- .../src/pages/settings/org/[id]/index.tsx | 8 +- .../service-accounts/[serviceAccountId].tsx | 4 +- frontend/src/pages/settings/personal/[id].tsx | 110 +- frontend/src/pages/settings/project/[id].tsx | 8 +- frontend/src/pages/signup.tsx | 54 +- frontend/src/pages/signupinvite.tsx | 83 +- frontend/src/pages/users/[id].tsx | 62 +- frontend/src/pages/verify-email.tsx | 28 +- frontend/src/reactQuery.ts | 8 +- frontend/src/services/KeyService.ts | 6 +- frontend/src/services/ProjectService.ts | 2 +- frontend/src/services/index.ts | 4 +- .../DashboardPage/DashboardEnvOverview.tsx | 40 +- .../src/views/DashboardPage/DashboardPage.tsx | 256 +- .../DashboardPage/DashboardPage.utils.ts | 70 +- .../CompareSecret/CompareSecret.tsx | 8 +- .../components/CompareSecret/index.tsx | 2 +- .../CreateTagModal/CreateTagModal.tsx | 10 +- .../components/CreateTagModal/index.tsx | 2 +- .../EnvComparisonRow/EnvComparisonRow.tsx | 38 +- .../EnvComparisonRow/FolderComparisonRow.tsx | 8 +- .../components/EnvComparisonRow/index.tsx | 2 +- .../components/FolderSection/FolderForm.tsx | 14 +- .../FolderSection/FolderSection.tsx | 10 +- .../components/FolderSection/index.tsx | 6 +- .../components/PitDrawer/PitDrawer.tsx | 26 +- .../components/PitDrawer/index.tsx | 2 +- .../SecretDetailDrawer/GenRandomNumber.tsx | 16 +- .../SecretDetailDrawer/SecretDetailDrawer.tsx | 34 +- .../components/SecretDetailDrawer/index.tsx | 2 +- .../SecretDropzone/SecretDropzone.tsx | 42 +- .../components/SecretDropzone/index.tsx | 2 +- .../components/SecretInputRow/MaskedInput.tsx | 40 +- .../SecretInputRow/SecretInputRow.tsx | 64 +- .../components/SecretInputRow/index.tsx | 2 +- .../SecretTableHeader/SecretTableHeader.tsx | 10 +- .../components/SecretTableHeader/index.tsx | 2 +- frontend/src/views/DashboardPage/index.tsx | 2 +- .../CreateServiceAccountPage.tsx | 10 +- .../CopyServiceAccountIDSection.tsx | 10 +- .../CopyServiceAccountIDSection/index.tsx | 2 +- .../CopyServiceAccountPublicKeySection.tsx | 12 +- .../index.tsx | 2 +- .../SAProjectLevelPermissionsTable.tsx | 58 +- .../SAProjectLevelPermissionsTable/index.tsx | 2 +- .../ServiceAccountNameChangeSection.tsx | 18 +- .../ServiceAccountNameChangeSection/index.tsx | 2 +- .../components/index.tsx | 8 +- .../CreateServiceAccountPage/index.tsx | 2 +- .../OrgSettingsPage/OrgSettingsPage.tsx | 96 +- .../OrgIncidentContactsTable.tsx | 48 +- .../OrgIncidentContactsTable/index.tsx | 2 +- .../OrgMembersTable/OrgMembersTable.tsx | 70 +- .../components/OrgMembersTable/index.tsx | 2 +- .../OrgNameChangeSection.tsx | 22 +- .../components/OrgNameChangeSection/index.tsx | 2 +- .../OrgServiceAccountsTable.tsx | 66 +- .../OrgServiceAccountsTable/index.tsx | 2 +- .../OrgSettingsPage/components/index.tsx | 8 +- .../views/Settings/OrgSettingsPage/index.tsx | 2 +- .../SecuritySection/SecuritySection.tsx | 32 +- .../SecuritySection/index.tsx | 2 +- .../ProjectSettingsPage.tsx | 152 +- .../AutoCapitalizationSection.tsx | 8 +- .../AutoCapitalizationSection/index.tsx | 2 +- .../CopyProjectIDSection.tsx | 20 +- .../components/CopyProjectIDSection/index.tsx | 2 +- .../components/E2EESection/E2EESection.tsx | 10 +- .../components/E2EESection/index.tsx | 2 +- .../EnvironmentSection/EnvironmentSection.tsx | 50 +- .../components/EnvironmentSection/index.tsx | 2 +- .../ProjectIndexSecretsSection.tsx | 2 +- .../ProjectIndexSecretsSection/index.tsx | 2 +- .../ProjectNameChangeSection.tsx | 22 +- .../ProjectNameChangeSection/index.tsx | 2 +- .../SecretTagsSection/SecretTagsSection.tsx | 36 +- .../components/SecretTagsSection/index.tsx | 2 +- .../ServiceTokenSection.tsx | 86 +- .../components/ServiceTokenSection/index.tsx | 2 +- .../ProjectSettingsPage/components/index.tsx | 18 +- .../Settings/ProjectSettingsPage/index.tsx | 2 +- package.json | 46 +- 689 files changed, 9446 insertions(+), 21821 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 backend/.prettierrc diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..1ffdeb337 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "workbench.editor.wrapTabs": true +} diff --git a/backend/.eslintrc b/backend/.eslintrc index c1ca1a1eb..64b049ea7 100644 --- a/backend/.eslintrc +++ b/backend/.eslintrc @@ -1,12 +1,21 @@ { "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint"], + "plugins": ["@typescript-eslint", "unused-imports"], "extends": [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended" ], "rules": { - "no-console": 2 + "no-console": 2, + "quotes": ["error", "double", { "avoidEscape": true }], + "comma-dangle": ["error", "only-multiline"], + "@typescript-eslint/no-unused-vars": "off", + "unused-imports/no-unused-imports": "error", + "unused-imports/no-unused-vars": [ + "warn", + { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } + ], + "sort-imports": ["error", { "ignoreDeclarationSort": true }] } } diff --git a/backend/.prettierrc b/backend/.prettierrc new file mode 100644 index 000000000..0b8ef54d2 --- /dev/null +++ b/backend/.prettierrc @@ -0,0 +1,7 @@ +{ + "singleQuote": false, + "printWidth": 100, + "trailingComma": "none", + "tabWidth": 2, + "semi": true +} diff --git a/backend/environment.d.ts b/backend/environment.d.ts index 3793552b1..9bbff7a24 100644 --- a/backend/environment.d.ts +++ b/backend/environment.d.ts @@ -14,7 +14,7 @@ declare global { JWT_SIGNUP_LIFETIME: string; JWT_SIGNUP_SECRET: string; MONGO_URL: string; - NODE_ENV: 'development' | 'staging' | 'testing' | 'production'; + NODE_ENV: "development" | "staging" | "testing" | "production"; VERBOSE_ERROR_OUTPUT: string; LOKI_HOST: string; CLIENT_ID_HEROKU: string; diff --git a/backend/jest.config.ts b/backend/jest.config.ts index 8a72ad84c..7c657505b 100644 --- a/backend/jest.config.ts +++ b/backend/jest.config.ts @@ -1,9 +1,9 @@ export default { - preset: 'ts-jest', - testEnvironment: 'node', - collectCoverageFrom: ['src/*.{js,ts}', '!**/node_modules/**'], - modulePaths: ['/src'], - testMatch: ['/tests/**/*.test.ts'], - setupFiles: ['/test-resources/env-vars.js'], - setupFilesAfterEnv: ['/tests/setupTests.ts'] + preset: "ts-jest", + testEnvironment: "node", + collectCoverageFrom: ["src/*.{js,ts}", "!**/node_modules/**"], + modulePaths: ["/src"], + testMatch: ["/tests/**/*.test.ts"], + setupFiles: ["/test-resources/env-vars.js"], + setupFilesAfterEnv: ["/tests/setupTests.ts"], }; diff --git a/backend/package-lock.json b/backend/package-lock.json index 302ade10b..2405cd370 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12455 +1,8 @@ { "name": "infisical-api", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "infisical-api", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@aws-sdk/client-secrets-manager": "^3.319.0", - "@godaddy/terminus": "^4.12.0", - "@octokit/rest": "^19.0.5", - "@sentry/node": "^7.49.0", - "@sentry/tracing": "^7.48.0", - "@types/crypto-js": "^4.1.1", - "@types/libsodium-wrappers": "^0.7.10", - "argon2": "^0.30.3", - "await-to-js": "^3.0.0", - "aws-sdk": "^2.1364.0", - "axios": "^1.3.5", - "axios-retry": "^3.4.0", - "bcrypt": "^5.1.0", - "bigint-conversion": "^2.4.0", - "builder-pattern": "^2.2.0", - "cookie-parser": "^1.4.6", - "cors": "^2.8.5", - "crypto-js": "^4.1.1", - "dotenv": "^16.0.1", - "express": "^4.18.1", - "express-async-errors": "^3.1.1", - "express-rate-limit": "^6.7.0", - "express-validator": "^6.14.2", - "handlebars": "^4.7.7", - "helmet": "^5.1.1", - "infisical-node": "^1.2.1", - "js-yaml": "^4.1.0", - "jsonwebtoken": "^9.0.0", - "jsrp": "^0.2.4", - "libsodium-wrappers": "^0.7.10", - "lodash": "^4.17.21", - "mongoose": "^6.10.5", - "nanoid": "^3.3.6", - "node-cache": "^5.1.2", - "nodemailer": "^6.8.0", - "passport": "^0.6.0", - "passport-google-oauth20": "^2.0.0", - "posthog-node": "^2.6.0", - "query-string": "^7.1.3", - "rate-limit-mongo": "^2.3.2", - "rimraf": "^3.0.2", - "stripe": "^10.7.0", - "swagger-autogen": "^2.22.0", - "swagger-ui-express": "^4.6.2", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1", - "typescript": "^4.9.3", - "utility-types": "^3.10.0", - "winston": "^3.8.2", - "winston-loki": "^6.0.6" - }, - "devDependencies": { - "@jest/globals": "^29.3.1", - "@posthog/plugin-scaffold": "^1.3.4", - "@types/bcrypt": "^5.0.0", - "@types/bcryptjs": "^2.4.2", - "@types/cookie-parser": "^1.4.3", - "@types/cors": "^2.8.12", - "@types/express": "^4.17.14", - "@types/jest": "^29.5.0", - "@types/jsonwebtoken": "^8.5.9", - "@types/lodash": "^4.14.191", - "@types/node": "^18.11.3", - "@types/nodemailer": "^6.4.6", - "@types/passport": "^1.0.12", - "@types/supertest": "^2.0.12", - "@types/swagger-jsdoc": "^6.0.1", - "@types/swagger-ui-express": "^4.1.3", - "@typescript-eslint/eslint-plugin": "^5.54.0", - "@typescript-eslint/parser": "^5.40.1", - "cross-env": "^7.0.3", - "eslint": "^8.26.0", - "install": "^0.13.0", - "jest": "^29.3.1", - "jest-junit": "^15.0.0", - "nodemon": "^2.0.19", - "npm": "^8.19.3", - "supertest": "^6.3.3", - "ts-jest": "^29.0.3", - "ts-node": "^10.9.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/abort-controller": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.347.0.tgz", - "integrity": "sha512-P/2qE6ntYEmYG4Ez535nJWZbXqgbkJx8CMz7ChEuEg3Gp3dvVYEKg+iEUEvlqQ2U5dWP5J3ehw5po9t86IsVPQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.347.0.tgz", - "integrity": "sha512-Z92GT2SC1y1r0bl3XI6ZH6QMsL2AaG3IR6ORXeiA94OY9/eF/tQT0zDbwn/MZUwJuBnR0CfO8bq7IQgCAguQ4A==", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.347.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.347.0.tgz", - "integrity": "sha512-lqBBJobdpVGx5OJpI3P52SaOilPkVW9zKVwPndoou8hpPYMMUVbVZ/Q0rSmjXC7wi9VzMB4SlENDM519Hu/tdQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.347.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.347.0.tgz", - "integrity": "sha512-AZehWCNLUXTrDavsZYRi7d84Uef20ppYJ2FY0KxqrKB3lx89mO29SfSJSC4woeW5+6ooBokq8HtKxw5ImPfRhA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.347.0.tgz", - "integrity": "sha512-IBxRfPqb8f9FqpmDbzcRDfoiasj/Y47C4Gj+j3kA5T1XWyGwbDI9QnPW/rnkZTWxLUUG1LSbBNwbPD6TLoff8A==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.347.0.tgz", - "integrity": "sha512-QcJCUlzJZLAFTFSuELKd4BF5I5W38TR/m7NX2y1tn2la9JIrWSrz+tj598zfp2V4pJPzRJ1i8RglTZxSRIvsxQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-node": "3.347.0", - "@aws-sdk/fetch-http-handler": "3.347.0", - "@aws-sdk/hash-node": "3.347.0", - "@aws-sdk/invalid-dependency": "3.347.0", - "@aws-sdk/middleware-content-length": "3.347.0", - "@aws-sdk/middleware-endpoint": "3.347.0", - "@aws-sdk/middleware-host-header": "3.347.0", - "@aws-sdk/middleware-logger": "3.347.0", - "@aws-sdk/middleware-recursion-detection": "3.347.0", - "@aws-sdk/middleware-retry": "3.347.0", - "@aws-sdk/middleware-sdk-sts": "3.347.0", - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/middleware-user-agent": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/node-http-handler": "3.347.0", - "@aws-sdk/smithy-client": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "@aws-sdk/util-body-length-browser": "3.310.0", - "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.347.0", - "@aws-sdk/util-defaults-mode-node": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "@aws-sdk/util-user-agent-browser": "3.347.0", - "@aws-sdk/util-user-agent-node": "3.347.0", - "@aws-sdk/util-utf8": "3.310.0", - "@smithy/protocol-http": "^1.0.1", - "@smithy/types": "^1.0.0", - "fast-xml-parser": "4.1.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.347.0.tgz", - "integrity": "sha512-2ja+Sf/VnUO7IQ3nKbDQ5aumYKKJUaTm/BuVJ29wNho8wYHfuf7wHZV0pDTkB8RF5SH7IpHap7zpZAj39Iq+EA==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-config-provider": "3.310.0", - "@aws-sdk/util-middleware": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.347.0.tgz", - "integrity": "sha512-7NiVVQC51HvomI44OyD+UekZ7qxauJeFGwQILbQ0beAxNuPZL7Ect/jB6A5MeleyqP+sVn8cB7qBMZjFJRhoJA==", - "optional": true, - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.347.0.tgz", - "integrity": "sha512-UnEM+LKGpXKzw/1WvYEQsC6Wj9PupYZdQOE+e2Dgy2dqk/pVFy4WueRtFXYDT2B41ppv3drdXUuKZRIDVqIgNQ==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.347.0.tgz", - "integrity": "sha512-7scCy/DCDRLIhlqTxff97LQWDnRwRXji3bxxMg+xWOTTaJe7PWx+etGSbBWaL42vsBHFShQjSLvJryEgoBktpw==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.347.0.tgz", - "integrity": "sha512-84TNF34ryabmVbILOq7f+/Jy8tJaskvHdax3X90qxFtXRU11kX0bf5NYL616KT0epR0VGpy50ThfIqvBwxeJfQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.347.0", - "@aws-sdk/credential-provider-imds": "3.347.0", - "@aws-sdk/credential-provider-process": "3.347.0", - "@aws-sdk/credential-provider-sso": "3.347.0", - "@aws-sdk/credential-provider-web-identity": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.347.0.tgz", - "integrity": "sha512-ds2uxE0krl94RdQ7bstwafUXdlMeEOPgedhaheVVlj8kH+XqlZdwUUaUv1uoEI9iBzuSjKftUkIHo0xsTiwtaw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.347.0", - "@aws-sdk/credential-provider-imds": "3.347.0", - "@aws-sdk/credential-provider-ini": "3.347.0", - "@aws-sdk/credential-provider-process": "3.347.0", - "@aws-sdk/credential-provider-sso": "3.347.0", - "@aws-sdk/credential-provider-web-identity": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.347.0.tgz", - "integrity": "sha512-yl1z4MsaBdXd4GQ2halIvYds23S67kElyOwz7g8kaQ4kHj+UoYWxz3JVW/DGusM6XmQ9/F67utBrUVA0uhQYyw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.347.0.tgz", - "integrity": "sha512-M1d7EnUaJbSNCmNalEbINmtFkc9wJufx7UhKtEeFwSq9KEzOMroH1MEOeiqIw9f/zE8NI/iPkVeEhw123vmBrQ==", - "dependencies": { - "@aws-sdk/client-sso": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/token-providers": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.347.0.tgz", - "integrity": "sha512-DxoTlVK8lXjS1zVphtz/Ab+jkN/IZor9d6pP2GjJHNoAIIzXfRwwj5C8vr4eTayx/5VJ7GRP91J8GJ2cKly8Qw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.347.0.tgz", - "integrity": "sha512-ny8tnuLToQIYbS+ztRh4/fViDDV1xk+WuapSK2T1MAIuPvhyD1IDulTyqv6P9ROoNIqt1NAoLctkWxdkLvqyQA==", - "optional": true, - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.347.0", - "@aws-sdk/client-sso": "3.347.0", - "@aws-sdk/client-sts": "3.347.0", - "@aws-sdk/credential-provider-cognito-identity": "3.347.0", - "@aws-sdk/credential-provider-env": "3.347.0", - "@aws-sdk/credential-provider-imds": "3.347.0", - "@aws-sdk/credential-provider-ini": "3.347.0", - "@aws-sdk/credential-provider-node": "3.347.0", - "@aws-sdk/credential-provider-process": "3.347.0", - "@aws-sdk/credential-provider-sso": "3.347.0", - "@aws-sdk/credential-provider-web-identity": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/eventstream-codec": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.347.0.tgz", - "integrity": "sha512-61q+SyspjsaQ4sdgjizMyRgVph2CiW4aAtfpoH69EJFJfTxTR/OqnZ9Jx/3YiYi0ksrvDenJddYodfWWJqD8/w==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.347.0.tgz", - "integrity": "sha512-sQ5P7ivY8//7wdxfA76LT1sF6V2Tyyz1qF6xXf9sihPN5Q1Y65c+SKpMzXyFSPqWZ82+SQQuDliYZouVyS6kQQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/querystring-builder": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-base64": "3.310.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.347.0.tgz", - "integrity": "sha512-96+ml/4EaUaVpzBdOLGOxdoXOjkPgkoJp/0i1fxOJEvl8wdAQSwc3IugVK9wZkCxy2DlENtgOe6DfIOhfffm/g==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-buffer-from": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.347.0.tgz", - "integrity": "sha512-8imQcwLwqZ/wTJXZqzXT9pGLIksTRckhGLZaXT60tiBOPKuerTsus2L59UstLs5LP8TKaVZKFFSsjRIn9dQdmQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", - "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.347.0.tgz", - "integrity": "sha512-i4qtWTDImMaDUtwKQPbaZpXsReiwiBomM1cWymCU4bhz81HL01oIxOxOBuiM+3NlDoCSPr3KI6txZSz/8cqXCQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.347.0.tgz", - "integrity": "sha512-unF0c6dMaUL1ffU+37Ugty43DgMnzPWXr/Jup/8GbK5fzzWT5NQq6dj9KHPubMbWeEjQbmczvhv25JuJdK8gNQ==", - "dependencies": { - "@aws-sdk/middleware-serde": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/url-parser": "3.347.0", - "@aws-sdk/util-middleware": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.347.0.tgz", - "integrity": "sha512-kpKmR9OvMlnReqp5sKcJkozbj1wmlblbVSbnQAIkzeQj2xD5dnVR3Nn2ogQKxSmU1Fv7dEroBtrruJ1o3fY38A==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.347.0.tgz", - "integrity": "sha512-NYC+Id5UCkVn+3P1t/YtmHt75uED06vwaKyxDy0UmB2K66PZLVtwWbLpVWrhbroaw1bvUHYcRyQ9NIfnVcXQjA==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.347.0.tgz", - "integrity": "sha512-qfnSvkFKCAMjMHR31NdsT0gv5Sq/ZHTUD4yQsSLpbVQ6iYAS834lrzXt41iyEHt57Y514uG7F/Xfvude3u4icQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.347.0.tgz", - "integrity": "sha512-CpdM+8dCSbX96agy4FCzOfzDmhNnGBM/pxrgIVLm5nkYTLuXp/d7ubpFEUHULr+4hCd5wakHotMt7yO29NFaVw==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/service-error-classification": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-middleware": "3.347.0", - "@aws-sdk/util-retry": "3.347.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.347.0.tgz", - "integrity": "sha512-38LJ0bkIoVF3W97x6Jyyou72YV9Cfbml4OaDEdnrCOo0EssNZM5d7RhjMvQDwww7/3OBY/BzeOcZKfJlkYUXGw==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.347.0.tgz", - "integrity": "sha512-x5Foi7jRbVJXDu9bHfyCbhYDH5pKK+31MmsSJ3k8rY8keXLBxm2XEEg/AIoV9/TUF9EeVvZ7F1/RmMpJnWQsEg==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.347.0.tgz", - "integrity": "sha512-zVBF/4MGKnvhAE/J+oAL/VAehiyv+trs2dqSQXwHou9j8eA8Vm8HS2NdOwpkZQchIxTuwFlqSusDuPEdYFbvGw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/signature-v4": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-middleware": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.347.0.tgz", - "integrity": "sha512-Izidg4rqtYMcKuvn2UzgEpPLSmyd8ub9+LQ2oIzG3mpIzCBITq7wp40jN1iNkMg+X6KEnX9vdMJIYZsPYMCYuQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.347.0.tgz", - "integrity": "sha512-wJbGN3OE1/daVCrwk49whhIr9E0j1N4gWwN/wi4WuyYIA+5lMUfVp0aGIOvZR+878DxuFz2hQ4XcZVT4K2WvQw==", - "dependencies": { - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-endpoints": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.347.0.tgz", - "integrity": "sha512-faU93d3+5uTTUcotGgMXF+sJVFjrKh+ufW+CzYKT4yUHammyaIab/IbTPWy2hIolcEGtuPeVoxXw8TXbkh/tuw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.347.0.tgz", - "integrity": "sha512-eluPf3CeeEaPbETsPw7ee0Rb0FP79amu8vdLMrQmkrD+KP4owupUXOEI4drxWJgBSd+3PRowPWCDA8wUtraHKg==", - "dependencies": { - "@aws-sdk/abort-controller": "3.347.0", - "@aws-sdk/protocol-http": "3.347.0", - "@aws-sdk/querystring-builder": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.347.0.tgz", - "integrity": "sha512-t3nJ8CYPLKAF2v9nIHOHOlF0CviQbTvbFc2L4a+A+EVd/rM4PzL3+3n8ZJsr0h7f6uD04+b5YRFgKgnaqLXlEg==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.347.0.tgz", - "integrity": "sha512-2YdBhc02Wvy03YjhGwUxF0UQgrPWEy8Iq75pfS42N+/0B/+eWX1aQgfjFxIpLg7YSjT5eKtYOQGlYd4MFTgj9g==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.347.0.tgz", - "integrity": "sha512-phtKTe6FXoV02MoPkIVV6owXI8Mwr5IBN3bPoxhcPvJG2AjEmnetSIrhb8kwc4oNhlwfZwH6Jo5ARW/VEWbZtg==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.347.0.tgz", - "integrity": "sha512-5VXOhfZz78T2W7SuXf2avfjKglx1VZgZgp9Zfhrt/Rq+MTu2D+PZc5zmJHhYigD7x83jLSLogpuInQpFMA9LgA==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.347.0.tgz", - "integrity": "sha512-xZ3MqSY81Oy2gh5g0fCtooAbahqh9VhsF8vcKjVX8+XPbGC8y+kej82+MsMg4gYL8gRFB9u4hgYbNgIS6JTAvg==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.347.0.tgz", - "integrity": "sha512-Xw+zAZQVLb+xMNHChXQ29tzzLqm3AEHsD8JJnlkeFjeMnWQtXdUfOARl5s8NzAppcKQNlVe2gPzjaKjoy2jz1Q==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.347.0.tgz", - "integrity": "sha512-58Uq1do+VsTHYkP11dTK+DF53fguoNNJL9rHRWhzP+OcYv3/mBMLoS2WPz/x9FO5mBg4ESFsug0I6mXbd36tjw==", - "dependencies": { - "@aws-sdk/eventstream-codec": "3.347.0", - "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/types": "3.347.0", - "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.347.0", - "@aws-sdk/util-uri-escape": "3.310.0", - "@aws-sdk/util-utf8": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.347.0.tgz", - "integrity": "sha512-PaGTDsJLGK0sTjA6YdYQzILRlPRN3uVFyqeBUkfltXssvUzkm8z2t1lz2H4VyJLAhwnG5ZuZTNEV/2mcWrU7JQ==", - "dependencies": { - "@aws-sdk/middleware-stack": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.347.0.tgz", - "integrity": "sha512-DZS9UWEy105zsaBJTgcvv1U+0jl7j1OzfMpnLf/lEYjEvx/4FqY2Ue/OZUACJorZgm/dWNqrhY17tZXtS/S3ew==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/shared-ini-file-loader": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.347.0.tgz", - "integrity": "sha512-GkCMy79mdjU9OTIe5KT58fI/6uqdf8UmMdWqVHmFJ+UpEzOci7L/uw4sOXWo7xpPzLs6cJ7s5ouGZW4GRPmHFA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.347.0.tgz", - "integrity": "sha512-lhrnVjxdV7hl+yCnJfDZOaVLSqKjxN20MIOiijRiqaWGLGEAiSqBreMhL89X1WKCifxAs4zZf9YB9SbdziRpAA==", - "dependencies": { - "@aws-sdk/querystring-parser": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", - "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", - "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", - "dependencies": { - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", - "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", - "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", - "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.347.0.tgz", - "integrity": "sha512-+JHFA4reWnW/nMWwrLKqL2Lm/biw/Dzi/Ix54DAkRZ08C462jMKVnUlzAI+TfxQE3YLm99EIa0G7jiEA+p81Qw==", - "dependencies": { - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.347.0.tgz", - "integrity": "sha512-A8BzIVhAAZE5WEukoAN2kYebzTc99ZgncbwOmgCCbvdaYlk5tzguR/s+uoT4G0JgQGol/4hAMuJEl7elNgU6RQ==", - "dependencies": { - "@aws-sdk/config-resolver": "3.347.0", - "@aws-sdk/credential-provider-imds": "3.347.0", - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/property-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.347.0.tgz", - "integrity": "sha512-/WUkirizeNAqwVj0zkcrqdQ9pUm1HY5kU+qy7xTR0OebkuJauglkmSTMD+56L1JPunWqHhlwCMVRaz5eaJdSEQ==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", - "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.347.0.tgz", - "integrity": "sha512-8owqUA3ePufeYTUvlzdJ7Z0miLorTwx+rNol5lourGQZ9JXsVMo23+yGA7nOlFuXSGkoKpMOtn6S0BT2bcfeiw==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.347.0.tgz", - "integrity": "sha512-NxnQA0/FHFxriQAeEgBonA43Q9/VPFQa8cfJDuT2A1YZruMasgjcltoZszi1dvoIRWSZsFTW42eY2gdOd0nffQ==", - "dependencies": { - "@aws-sdk/service-error-classification": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", - "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.347.0.tgz", - "integrity": "sha512-ydxtsKVtQefgbk1Dku1q7pMkjDYThauG9/8mQkZUAVik55OUZw71Zzr3XO8J8RKvQG8lmhPXuAQ0FKAyycc0RA==", - "dependencies": { - "@aws-sdk/types": "3.347.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.347.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.347.0.tgz", - "integrity": "sha512-6X0b9qGsbD1s80PmbaB6v1/ZtLfSx6fjRX8caM7NN0y/ObuLoX8LhYnW6WlB2f1+xb4EjaCNgpP/zCf98MXosw==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.347.0", - "@aws-sdk/types": "3.347.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", - "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.310.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", - "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.0", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-module-transforms": "^7.22.1", - "@babel/helpers": "^7.22.0", - "@babel/parser": "^7.22.0", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", - "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.3.tgz", - "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", - "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.1.tgz", - "integrity": "sha512-lAWkdCoUFnmwLBhIRLciFntGYsIIoC6vIbN8zrLPqBnJmPu7Z6nzqnKd7FsxQUNAvZfVZ0x6KdNvNp8zWIOHSQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.0", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.0", - "@babel/types": "^7.22.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.3.tgz", - "integrity": "sha512-P3na3xIQHTKY4L0YOG7pM8M8uoUIB910WQaSiiMCZUC2Cy8XFEQONGABFnHWBa2gpGKODTAJcNhi5Zk0sLRrzg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@godaddy/terminus": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@godaddy/terminus/-/terminus-4.12.0.tgz", - "integrity": "sha512-zbl6gKxPAnAoAAGCyRN1kOMHTXgiW3C09w8McLKZWSSHQlsiRZlMZzBwSv1aK9PaRU25w80cnOlt3ow+uQwR1Q==", - "dependencies": { - "stoppable": "^1.1.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@juanelas/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@juanelas/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-mr2pfRQpWap0Uq4tlrCgp3W+Yjx1/Bpq4QJsYeAQUh1mExgyQvXz7xUhmYT2HcLLspuAL5dpnos8P2QhaCSXsQ==" - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@maxmind/geoip2-node": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@maxmind/geoip2-node/-/geoip2-node-3.5.0.tgz", - "integrity": "sha512-WG2TNxMwDWDOrljLwyZf5bwiEYubaHuICvQRlgz74lE9OZA/z4o+ZT6OisjDBAZh/yRJVNK6mfHqmP5lLlAwsA==", - "dev": true, - "dependencies": { - "camelcase-keys": "^7.0.0", - "ip6addr": "^0.2.5", - "maxmind": "^4.2.0" - } - }, - "node_modules/@napi-rs/snappy-android-arm-eabi": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm-eabi/-/snappy-android-arm-eabi-7.1.1.tgz", - "integrity": "sha512-NKd/ztuVEgQaAaNVQ5zZaCB9VV+7+uBXBHqhaE5iSapQhLc41szTlT0s68FCee75OoT3vhqdA6Jp5TrzZ2WOaw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-android-arm64": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm64/-/snappy-android-arm64-7.1.1.tgz", - "integrity": "sha512-DktruMAO0K0toTnxNHg2GWNIAPJqdvIchCsdsRaKyuEnG101qBg0mYiRCAhxHgbT6RJlOGbUPKkbA9KKRhEJUg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-darwin-arm64": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-arm64/-/snappy-darwin-arm64-7.1.1.tgz", - "integrity": "sha512-3LZyoAw3Qa5F7sCCTkSkhmGlydwUKU6L3Jl46eKHO2Ctm8Gcjxww6T7MfwlwGZ6JqAM6d1d++WLzUZPCGXVmag==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-darwin-x64": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-x64/-/snappy-darwin-x64-7.1.1.tgz", - "integrity": "sha512-X1D2F67bQkPwr5iSR29/RnOrLwAkB55YO6t41toABzla3mflLDpzZcakz6FokIukykf7ey31/t73v/4pbgaBkg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-freebsd-x64": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-freebsd-x64/-/snappy-freebsd-x64-7.1.1.tgz", - "integrity": "sha512-vSeuf+An8jFVHPAn5IbWE9hTGU9PFAaZLj/X7rKTQQtZstnDsHgWe6u4g7FHLuOdwQ8TvhcxAEpNlYIXIk4AJg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-linux-arm-gnueabihf": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm-gnueabihf/-/snappy-linux-arm-gnueabihf-7.1.1.tgz", - "integrity": "sha512-/yyN6QsnOs3D1+jI3SfRX+gtnD86rbixdfmgxv9g40+FrDaDTLAu/3VuZIqH02qqq/xiWbDnkO+42RGxXDzTCw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-linux-arm64-gnu": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-gnu/-/snappy-linux-arm64-gnu-7.1.1.tgz", - "integrity": "sha512-StEeUCSwUoajgrBtiCQPTkHu+0Q4QlYndghGZNdbN1zJ1ny70YzPpevaFBUyjI/eJ+FN9uICKtwTPtQNSILS5g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-linux-arm64-musl": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-musl/-/snappy-linux-arm64-musl-7.1.1.tgz", - "integrity": "sha512-jWEBRzj+lswZVYf0b5eY0fjMlBL9L9yqjmTuv2UIMjJNHPuR282LK/s3Fm9sYIXQtKkiCo5JyhmIcoghZ3v0Eg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-linux-x64-gnu": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-gnu/-/snappy-linux-x64-gnu-7.1.1.tgz", - "integrity": "sha512-41DPoAUFAU9VNrj/96qKfStH2Xq88ZYIsSz8BlITDm2ScoeDGOGbmaWguCXU7I+bC2uKWTmUVMXKqk6tVY6LEg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-linux-x64-musl": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-musl/-/snappy-linux-x64-musl-7.1.1.tgz", - "integrity": "sha512-xR4hzFQqVq6J8Zf6XyUVtFJBaRgDyAQYUoBsCr92tZ7gI/0RlWCV6Q6JMO/wP5CSsvyFJIAtSUXXqlzIpw0GPA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-win32-arm64-msvc": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-arm64-msvc/-/snappy-win32-arm64-msvc-7.1.1.tgz", - "integrity": "sha512-2mHPadctsaYtrfSV5Na8ooTdI5rflPxP1pceY4us6vbjeWrfgB+KQCuEFOHsGXqFNfsi6L9nWH8nB9swnxnSyw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-win32-ia32-msvc": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-ia32-msvc/-/snappy-win32-ia32-msvc-7.1.1.tgz", - "integrity": "sha512-FOMgs9W71hdgjyl3T9F7b/WEIuoryfgBqsyhtHjAaa/98R0BUHl0bOoHg8ka0b5GgnhLBHkX2Yd6VD+Si9Q2ww==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/snappy-win32-x64-msvc": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.1.1.tgz", - "integrity": "sha512-Mu3yELySvzhBcNTVCq+hYxVh+lH3/KjoQ5HIEb3DDPoX0AGRTm3XZa+usq8pFWjl91Cgp9nWK+9lVSkCCIRaKA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", - "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", - "dependencies": { - "@octokit/types": "^9.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/core": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz", - "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==", - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", - "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.2.0.tgz", - "integrity": "sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", - "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.2.tgz", - "integrity": "sha512-R0oJ7j6f/AdqPLtB9qRXLO+wjI9pctUn8Ka8UGfGaFCcCv3Otx14CshQ89K4E88pmyYZS8p0rNTiprML/81jig==", - "dependencies": { - "@octokit/types": "^9.2.3", - "deprecation": "^2.3.1" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/request": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz", - "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/rest": { - "version": "19.0.11", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", - "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", - "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.1.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==" - }, - "node_modules/@octokit/types": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.3.tgz", - "integrity": "sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==", - "dependencies": { - "@octokit/openapi-types": "^17.2.0" - } - }, - "node_modules/@phc/format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", - "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@posthog/plugin-scaffold": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@posthog/plugin-scaffold/-/plugin-scaffold-1.4.2.tgz", - "integrity": "sha512-/VsRg3CfhQvYhxM2O9+gBOzj4K1QJZClY+yple0npL1Jd2nRn2nT4z7dlPSidTPZvdpFs0+hrnF+m4Kxf1NFvQ==", - "dev": true, - "dependencies": { - "@maxmind/geoip2-node": "^3.4.0" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@sentry-internal/tracing": { - "version": "7.53.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.53.1.tgz", - "integrity": "sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ==", - "dependencies": { - "@sentry/core": "7.53.1", - "@sentry/types": "7.53.1", - "@sentry/utils": "7.53.1", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@sentry/core": { - "version": "7.53.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.53.1.tgz", - "integrity": "sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg==", - "dependencies": { - "@sentry/types": "7.53.1", - "@sentry/utils": "7.53.1", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@sentry/node": { - "version": "7.53.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.53.1.tgz", - "integrity": "sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA==", - "dependencies": { - "@sentry-internal/tracing": "7.53.1", - "@sentry/core": "7.53.1", - "@sentry/types": "7.53.1", - "@sentry/utils": "7.53.1", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@sentry/tracing": { - "version": "7.53.1", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.53.1.tgz", - "integrity": "sha512-1lpys/e19ee2gDTkcgIXyFNJySEqxdIxlu3Q1Oj+V0ORXVBfA9kFap2fHPWASaDJvmy1zpgGKlbzCpr+IEyfYQ==", - "dependencies": { - "@sentry-internal/tracing": "7.53.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/types": { - "version": "7.53.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.53.1.tgz", - "integrity": "sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/utils": { - "version": "7.53.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.53.1.tgz", - "integrity": "sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg==", - "dependencies": { - "@sentry/types": "7.53.1", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", - "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.0.1.tgz", - "integrity": "sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg==", - "dependencies": { - "@smithy/types": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.0.0.tgz", - "integrity": "sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.0.tgz", - "integrity": "sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/bcrypt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz", - "integrity": "sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/bcryptjs": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz", - "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==", - "dev": true - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz", - "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/libsodium-wrappers": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz", - "integrity": "sha512-BqI9B92u+cM3ccp8mpHf+HzJ8fBlRwdmyd6+fz3p99m3V6ifT5O3zmOMi612PGkpeFeG/G6loxUnzlDNhfjPSA==" - }, - "node_modules/@types/lodash": { - "version": "4.14.195", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", - "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", - "dev": true - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.16.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz", - "integrity": "sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==" - }, - "node_modules/@types/nodemailer": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.8.tgz", - "integrity": "sha512-oVsJSCkqViCn8/pEu2hfjwVO+Gb3e+eTWjg3PcjeFKRItfKpKwHphQqbYmPQrlMk+op7pNNWPbsJIEthpFN/OQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/passport": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.12.tgz", - "integrity": "sha512-QFdJ2TiAEoXfEQSNDISJR1Tm51I78CymqcBa8imbjo6dNNu+l2huDxxbDEIoFIwOSKMkOfHEikyDuZ38WwWsmw==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/superagent": { - "version": "4.1.18", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.18.tgz", - "integrity": "sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==", - "dev": true, - "dependencies": { - "@types/cookiejar": "*", - "@types/node": "*" - } - }, - "node_modules/@types/supertest": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", - "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", - "dev": true, - "dependencies": { - "@types/superagent": "*" - } - }, - "node_modules/@types/swagger-jsdoc": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/swagger-jsdoc/-/swagger-jsdoc-6.0.1.tgz", - "integrity": "sha512-+MUpcbyxD528dECUBCEVm6abNuORdbuGjbrUdHDeAQ+rkPuo2a+L4N02WJHF3bonSSE6SJ3dUJwF2V6+cHnf0w==", - "dev": true - }, - "node_modules/@types/swagger-ui-express": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz", - "integrity": "sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/triple-beam": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", - "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" - }, - "node_modules/@types/whatwg-url": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", - "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", - "dependencies": { - "@types/node": "*", - "@types/webidl-conversions": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", - "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argon2": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.30.3.tgz", - "integrity": "sha512-DoH/kv8c9127ueJSBxAVJXinW9+EuPA3EMUxoV2sAY1qDE5H9BjTyVF/aD2XyHqbqUWabgBkIfcP3ZZuGhbJdg==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.10", - "@phc/format": "^1.0.0", - "node-addon-api": "^5.0.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/await-to-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/await-to-js/-/await-to-js-3.0.0.tgz", - "integrity": "sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/aws-sdk": { - "version": "2.1386.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1386.0.tgz", - "integrity": "sha512-bmUvpNRR4x1YvTaAm7WK/2lSNVPrNuiYlleU47GA5Xskh8PKaWedGHvGinH2YwhC720hM0Qc4f4/snUPGJ0eYg==", - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios-retry": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.5.0.tgz", - "integrity": "sha512-g48qNrLX30VU6ECWltpFCPegKK6dWzMDYv2o83W2zUL/Zh/SLXbT6ksGoKqYZHtghzqeeXhZBcSXJkO1fPbCcw==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "is-retry-allowed": "^2.2.0" - } - }, - "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/bcrypt": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", - "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.10", - "node-addon-api": "^5.0.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "node_modules/bigint-conversion": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/bigint-conversion/-/bigint-conversion-2.4.1.tgz", - "integrity": "sha512-/DTRevseMZoqN4KLkN5BryOiom0KbwYajiXG5Vo+ZcEPAO0WBZyZoYyDZSgfeq/v/oegLo9bjdndDBlExvAhBQ==", - "dependencies": { - "@juanelas/base64": "^1.1.2" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/bl/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.6.tgz", - "integrity": "sha512-PF07dKGXKR+/bljJzCB6rAYtHEu21TthLxmJagtQizx+rwiqdRDBO5971Xu1N7MgcMLi4+mr4Cnl76x7O3DHtA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/bson": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", - "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/bson/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builder-pattern": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/builder-pattern/-/builder-pattern-2.2.0.tgz", - "integrity": "sha512-cES3qdeBzA4QyJi7rV/l/kAhIFX6AKo3vK66ZPXLNpjcQWCS8sjLKscly8imlfW2YPTo/hquMRMnaWpZ80Kj+g==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001489", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", - "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "dependencies": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/cookie-parser/node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.411", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.411.tgz", - "integrity": "sha512-5VXLW4Qw89vM2WTICHua/y8v7fKGDRVa2VPOtBB9IpLvW316B+xd8yD1wTmLPY2ot/00P/qt87xdolj4aG/Lzg==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express-async-errors": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz", - "integrity": "sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==", - "peerDependencies": { - "express": "^4.16.2" - } - }, - "node_modules/express-rate-limit": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", - "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", - "engines": { - "node": ">= 12.9.0" - }, - "peerDependencies": { - "express": "^4 || ^5" - } - }, - "node_modules/express-validator": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.15.0.tgz", - "integrity": "sha512-r05VYoBL3i2pswuehoFSy+uM8NBuVaY7avp5qrYjQBDzagx2Z5A77FZqPT8/gNLF3HopWkIzaTFaC4JysWXLqg==", - "dependencies": { - "lodash": "^4.17.21", - "validator": "^13.9.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/helmet": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.1.1.tgz", - "integrity": "sha512-/yX0oVZBggA9cLJh8aw3PPCfedBnbd7J2aowjzsaWwZh7/UFY0nccn/aHAggIgWUFfnykX8GKd3a1pSbrmlcVQ==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/infisical-node": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/infisical-node/-/infisical-node-1.2.1.tgz", - "integrity": "sha512-zEB0w5+1O0mv9qc68bq4f9jDjrtwdbqjJebnwodgy8U1XZElDXeMDQgSMCtgYan7JRmVlH6s/LM8X7kUF+67ZA==", - "dependencies": { - "axios": "^1.3.3", - "dotenv": "^16.0.3", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/install": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", - "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - }, - "node_modules/ip6addr": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/ip6addr/-/ip6addr-0.2.5.tgz", - "integrity": "sha512-9RGGSB6Zc9Ox5DpDGFnJdIeF0AsqXzdH+FspCfPPaU/L/4tI6P+5lIoFUFm9JXs9IrJv1boqAaNCQmoDADTSKQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-retry-allowed": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", - "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-junit": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-15.0.0.tgz", - "integrity": "sha512-Z5sVX0Ag3HZdMUnD5DFlG+1gciIFSy7yIVPhOdGUi8YJaI9iLvvBb530gtQL2CHmv0JJeiwRZenr0VrSR7frvg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/jsrp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsrp/-/jsrp-0.2.4.tgz", - "integrity": "sha512-+CjGAhZaj3k2MMXEy+xWYv7xJGnise/SlL1IIvnRuJ1ZiLtNPJJln/dMDCgORQCq1ouXDnW1FBxW5bkBFhK/8g==", - "dependencies": { - "create-hash": "^1.0.0", - "jsbn": "^1.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/kareem": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", - "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libsodium": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.11.tgz", - "integrity": "sha512-WPfJ7sS53I2s4iM58QxY3Inb83/6mjlYgcmZs7DJsvDlnmVUwNinBCi5vBT43P6bHRy01O4zsMU2CoVR6xJ40A==" - }, - "node_modules/libsodium-wrappers": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz", - "integrity": "sha512-SrcLtXj7BM19vUKtQuyQKiQCRJPgbpauzl3s0rSwD+60wtHqSUuqcoawlMDheCJga85nKOQwxNYQxf/CKAvs6Q==", - "dependencies": { - "libsodium": "^0.7.11" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/logform": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", - "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", - "dependencies": { - "@colors/colors": "1.5.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/maxmind": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/maxmind/-/maxmind-4.3.11.tgz", - "integrity": "sha512-tJDrKbUzN6PSA88tWgg0L2R4Ln00XwecYQJPFI+RvlF2k1sx6VQYtuQ1SVxm8+bw5tF7GWV4xyb+3/KyzEpPUw==", - "dev": true, - "dependencies": { - "mmdb-lib": "2.0.2", - "tiny-lru": "11.0.1" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mmdb-lib": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz", - "integrity": "sha512-shi1I+fCPQonhTi7qyb6hr7hi87R7YS69FlfJiMFuJ12+grx0JyL56gLNzGTYXPU7EhAPkMLliGeyHer0K+AVA==", - "dev": true, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/mongodb": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.16.0.tgz", - "integrity": "sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g==", - "dependencies": { - "bson": "^4.7.2", - "mongodb-connection-string-url": "^2.5.4", - "socks": "^2.7.1" - }, - "engines": { - "node": ">=12.9.0" - }, - "optionalDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", - "saslprep": "^1.0.3" - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", - "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", - "dependencies": { - "@types/whatwg-url": "^8.2.1", - "whatwg-url": "^11.0.0" - } - }, - "node_modules/mongoose": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.11.1.tgz", - "integrity": "sha512-AvQ8C5ZGF6GcsQhoRg/i7pbNZpb96qLGU5ICBllckp7qMOxcfUF1nA6JstZw841BqRcE6myZ/mx9CluEESaw5Q==", - "dependencies": { - "bson": "^4.7.2", - "kareem": "2.5.1", - "mongodb": "4.16.0", - "mpath": "0.9.0", - "mquery": "4.0.3", - "ms": "2.1.3", - "sift": "16.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", - "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, - "node_modules/node-cache": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", - "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", - "dependencies": { - "clone": "2.x" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nodemailer": { - "version": "6.9.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.2.tgz", - "integrity": "sha512-4+TYaa/e1nIxQfyw/WzNPYTEZ5OvHIDEnmjs4LPmIfccPQN+2CYKmGHjWixn/chzD3bmUTu5FMfpltizMxqzdg==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", - "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/ci-detect", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "chownr", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "mkdirp", - "mkdirp-infer-owner", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "npmlog", - "opener", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "read-package-json", - "read-package-json-fast", - "readdir-scoped-modules", - "rimraf", - "semver", - "ssri", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "dev": true, - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.2.1", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.2.1", - "abbrev": "~1.1.1", - "archy": "~1.0.0", - "cacache": "^16.1.3", - "chalk": "^4.1.2", - "chownr": "^2.0.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.2.1", - "ini": "^3.0.1", - "init-package-json": "^3.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.4", - "libnpmdiff": "^4.0.5", - "libnpmexec": "^4.0.14", - "libnpmfund": "^3.0.5", - "libnpmhook": "^8.0.4", - "libnpmorg": "^4.0.4", - "libnpmpack": "^4.1.3", - "libnpmpublish": "^6.0.5", - "libnpmsearch": "^5.0.4", - "libnpmteam": "^4.0.4", - "libnpmversion": "^3.0.7", - "make-fetch-happen": "^10.2.0", - "minimatch": "^5.1.0", - "minipass": "^3.1.6", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^9.1.0", - "nopt": "^6.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.1.0", - "npm-pick-manifest": "^7.0.2", - "npm-profile": "^6.2.0", - "npm-registry-fetch": "^13.3.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", - "p-map": "^4.0.0", - "pacote": "^13.6.2", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.2", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/npm/node_modules/@gar/promisify": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.6.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/query": "^1.2.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.3", - "cacache": "^16.1.3", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^5.2.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.2", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/ci-detect": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "4.2.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/move-file": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "1.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^9.1.0", - "postcss-selector-parser": "^6.0.10", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "4.2.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/asap": { - "version": "2.0.6", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/bin-links/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "16.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^4.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/debuglog": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/dezalgo": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.12", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "4.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "8.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "5.2.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^3.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.10.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "5.1.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.4.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "6.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "4.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1", - "tar": "^6.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "4.0.14", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^5.6.3", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/fs": "^2.1.1", - "@npmcli/run-script": "^4.2.0", - "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", - "semver": "^7.3.7", - "walk-up-path": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "3.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^5.6.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "8.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "4.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "4.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/run-script": "^4.1.3", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "6.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "5.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "4.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "3.0.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^4.1.3", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "7.13.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.2.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/minimatch": { - "version": "5.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/minipass": { - "version": "3.3.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "9.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "5.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-profile": { - "version": "6.2.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.3.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/npmlog": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/opener": { - "version": "1.5.2", - "dev": true, - "inBundle": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/pacote": { - "version": "13.6.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "0.3.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "1" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "1.0.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "5.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.7.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.11", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "9.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.1.11", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/unique-filename": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/npm/node_modules/which": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/wide-align": { - "version": "1.1.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optional-require": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", - "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", - "dependencies": { - "require-at": "^1.0.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/passport": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", - "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1", - "utils-merge": "^1.0.1" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-google-oauth20": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", - "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", - "dependencies": { - "passport-oauth2": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/passport-oauth2": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.7.0.tgz", - "integrity": "sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ==", - "dependencies": { - "base64url": "3.x.x", - "oauth": "0.9.x", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/posthog-node": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-2.6.0.tgz", - "integrity": "sha512-/BiFw/jwdP0uJSRAIoYqLoBTjZ612xv74b1L/a3T/p1nJVL8e0OrHuxbJW56c6WVW/IKm9gBF/zhbqfaz0XgJQ==", - "dependencies": { - "axios": "^0.27.0" - }, - "engines": { - "node": ">=15.0.0" - } - }, - "node_modules/posthog-node/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", - "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rate-limit-mongo": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/rate-limit-mongo/-/rate-limit-mongo-2.3.2.tgz", - "integrity": "sha512-dLck0j5N/AX9ycVHn5lX9Ti2Wrrwi1LfbXitu/mMBZOo2nC26RgYKJVbcb2mYgb9VMaPI2IwJVzIa2hAQrMaDA==", - "dependencies": { - "mongodb": "^3.6.7", - "twostep": "0.4.2", - "underscore": "1.12.1" - } - }, - "node_modules/rate-limit-mongo/node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/rate-limit-mongo/node_modules/mongodb": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", - "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.1.8", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - }, - "peerDependenciesMeta": { - "aws4": { - "optional": true - }, - "bson-ext": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "mongodb-extjson": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sift": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", - "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/snappy": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/snappy/-/snappy-7.1.1.tgz", - "integrity": "sha512-mL7GGPJ+WdsaFT5aR/uEqCq8cPg2VbhyifDEP7AeqIVDsAC8LBGYbZP1Qzoa2Ym84OW7JEQXqIpwqFp1EQw5BA==", - "optional": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/snappy-android-arm-eabi": "7.1.1", - "@napi-rs/snappy-android-arm64": "7.1.1", - "@napi-rs/snappy-darwin-arm64": "7.1.1", - "@napi-rs/snappy-darwin-x64": "7.1.1", - "@napi-rs/snappy-freebsd-x64": "7.1.1", - "@napi-rs/snappy-linux-arm-gnueabihf": "7.1.1", - "@napi-rs/snappy-linux-arm64-gnu": "7.1.1", - "@napi-rs/snappy-linux-arm64-musl": "7.1.1", - "@napi-rs/snappy-linux-x64-gnu": "7.1.1", - "@napi-rs/snappy-linux-x64-musl": "7.1.1", - "@napi-rs/snappy-win32-arm64-msvc": "7.1.1", - "@napi-rs/snappy-win32-ia32-msvc": "7.1.1", - "@napi-rs/snappy-win32-x64-msvc": "7.1.1" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "optional": true, - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stripe": { - "version": "10.17.0", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-10.17.0.tgz", - "integrity": "sha512-JHV2KoL+nMQRXu3m9ervCZZvi4DDCJfzHUE6CmtJxR9TmizyYfrVuhGvnsZLLnheby9Qrnf4Hq6iOEcejGwnGQ==", - "dependencies": { - "@types/node": ">=8.1.0", - "qs": "^6.11.0" - }, - "engines": { - "node": "^8.1 || >=10.*" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swagger-autogen": { - "version": "2.23.1", - "resolved": "https://registry.npmjs.org/swagger-autogen/-/swagger-autogen-2.23.1.tgz", - "integrity": "sha512-tOAb5cOGNPduIHKoOxndCRy2Mrg7xV3O1RerrWExrDxeSTjXhA350pyJd7VUDY6ZO9gbZ34Bjlc5CXkleUgvAQ==", - "dependencies": { - "acorn": "^7.4.1", - "deepmerge": "^4.2.2", - "glob": "^7.1.7", - "json5": "^2.2.3" - } - }, - "node_modules/swagger-autogen/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/swagger-ui-dist": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.19.0.tgz", - "integrity": "sha512-9C9fJGI18gK5AhaU5YRyPY1lXJH4lmWh8h9zFMrJBkYzdRjCbAzYl1ayWPYgwFvag/Luqi3Co599OK/39IS2QQ==" - }, - "node_modules/swagger-ui-express": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz", - "integrity": "sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==", - "dependencies": { - "swagger-ui-dist": ">=4.11.0" - }, - "engines": { - "node": ">= v0.10.32" - }, - "peerDependencies": { - "express": ">=4.0.0 || >=5.0.0-beta" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tiny-lru": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.0.1.tgz", - "integrity": "sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/touch/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "node_modules/ts-jest": { - "version": "29.1.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", - "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", - "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - }, - "node_modules/twostep": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/twostep/-/twostep-0.4.2.tgz", - "integrity": "sha512-O/wdPYk9ey04qcCiw8AQN74DbvLFZLAgnryrNTpV7T/sxB4lcGkCMHynx5xCcA6fCh739ZAqp3HcGhy770X1qA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uid2": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", - "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/winston": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.9.0.tgz", - "integrity": "sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==", - "dependencies": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-loki": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/winston-loki/-/winston-loki-6.0.6.tgz", - "integrity": "sha512-cll+nv5T/b9uJXqca0N2WKL1JJNuJND9E6WOOAuSGkZ44L9VQ/QK9F+/5VKbv6LIP9p0nvPSOYxtACCDb/9iWw==", - "dependencies": { - "async-exit-hook": "2.0.1", - "btoa": "^1.2.1", - "protobufjs": "^6.8.8", - "winston-transport": "^4.3.0" - }, - "optionalDependencies": { - "snappy": "7.1.1" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, "dependencies": { "@ampproject/remapping": { "version": "2.2.1", @@ -14475,8 +2028,7 @@ "@octokit/plugin-request-log": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "requires": {} + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" }, "@octokit/plugin-rest-endpoint-methods": { "version": "7.1.2", @@ -15226,8 +2778,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "8.2.0", @@ -16291,6 +3842,21 @@ } } }, + "eslint-plugin-unused-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz", + "integrity": "sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -16477,14 +4043,12 @@ "express-async-errors": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz", - "integrity": "sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==", - "requires": {} + "integrity": "sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==" }, "express-rate-limit": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", - "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", - "requires": {} + "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==" }, "express-validator": { "version": "6.15.0", @@ -17504,8 +5068,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "29.4.3", @@ -17903,11 +5466,6 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -17917,6 +5475,11 @@ "yallist": "^3.0.2" } }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -19942,14 +7505,6 @@ "minipass": "^3.1.1" } }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "string-width": { "version": "4.2.3", "bundled": true, @@ -19960,6 +7515,14 @@ "strip-ansi": "^6.0.1" } }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "strip-ansi": { "version": "6.0.1", "bundled": true, @@ -20995,14 +8558,6 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -21023,6 +8578,14 @@ "strip-ansi": "^6.0.1" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", diff --git a/backend/package.json b/backend/package.json index 6d855001e..b65fe13aa 100644 --- a/backend/package.json +++ b/backend/package.json @@ -99,6 +99,7 @@ "@typescript-eslint/parser": "^5.40.1", "cross-env": "^7.0.3", "eslint": "^8.26.0", + "eslint-plugin-unused-imports": "^2.0.0", "install": "^0.13.0", "jest": "^29.3.1", "jest-junit": "^15.0.0", diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 4613a05c9..62638859a 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -1,93 +1,93 @@ -import InfisicalClient from 'infisical-node'; +import InfisicalClient from "infisical-node"; export const client = new InfisicalClient({ - token: process.env.INFISICAL_TOKEN! + token: process.env.INFISICAL_TOKEN!, }); -export const getPort = async () => (await client.getSecret('PORT')).secretValue || 4000; +export const getPort = async () => (await client.getSecret("PORT")).secretValue || 4000; export const getEncryptionKey = async () => { - const secretValue = (await client.getSecret('ENCRYPTION_KEY')).secretValue; - return secretValue === '' ? undefined : secretValue; + const secretValue = (await client.getSecret("ENCRYPTION_KEY")).secretValue; + return secretValue === "" ? undefined : secretValue; } export const getRootEncryptionKey = async () => { - const secretValue = (await client.getSecret('ROOT_ENCRYPTION_KEY')).secretValue; - return secretValue === '' ? undefined : secretValue; + const secretValue = (await client.getSecret("ROOT_ENCRYPTION_KEY")).secretValue; + return secretValue === "" ? undefined : secretValue; } -export const getInviteOnlySignup = async () => (await client.getSecret('INVITE_ONLY_SIGNUP')).secretValue === 'true' -export const getSaltRounds = async () => parseInt((await client.getSecret('SALT_ROUNDS')).secretValue) || 10; -export const getJwtAuthLifetime = async () => (await client.getSecret('JWT_AUTH_LIFETIME')).secretValue || '10d'; -export const getJwtAuthSecret = async () => (await client.getSecret('JWT_AUTH_SECRET')).secretValue; -export const getJwtMfaLifetime = async () => (await client.getSecret('JWT_MFA_LIFETIME')).secretValue || '5m'; -export const getJwtMfaSecret = async () => (await client.getSecret('JWT_MFA_LIFETIME')).secretValue || '5m'; -export const getJwtRefreshLifetime = async () => (await client.getSecret('JWT_REFRESH_LIFETIME')).secretValue || '90d'; -export const getJwtRefreshSecret = async () => (await client.getSecret('JWT_REFRESH_SECRET')).secretValue; -export const getJwtServiceSecret = async () => (await client.getSecret('JWT_SERVICE_SECRET')).secretValue; -export const getJwtSignupLifetime = async () => (await client.getSecret('JWT_SIGNUP_LIFETIME')).secretValue || '15m'; -export const getJwtProviderAuthSecret = async () => (await client.getSecret('JWT_PROVIDER_AUTH_SECRET')).secretValue; -export const getJwtProviderAuthLifetime = async () => (await client.getSecret('JWT_PROVIDER_AUTH_LIFETIME')).secretValue || '15m'; -export const getJwtSignupSecret = async () => (await client.getSecret('JWT_SIGNUP_SECRET')).secretValue; -export const getMongoURL = async () => (await client.getSecret('MONGO_URL')).secretValue; -export const getNodeEnv = async () => (await client.getSecret('NODE_ENV')).secretValue || 'production'; -export const getVerboseErrorOutput = async () => (await client.getSecret('VERBOSE_ERROR_OUTPUT')).secretValue === 'true' && true; -export const getLokiHost = async () => (await client.getSecret('LOKI_HOST')).secretValue; -export const getClientIdAzure = async () => (await client.getSecret('CLIENT_ID_AZURE')).secretValue; -export const getClientIdHeroku = async () => (await client.getSecret('CLIENT_ID_HEROKU')).secretValue; -export const getClientIdVercel = async () => (await client.getSecret('CLIENT_ID_VERCEL')).secretValue; -export const getClientIdNetlify = async () => (await client.getSecret('CLIENT_ID_NETLIFY')).secretValue; -export const getClientIdGitHub = async () => (await client.getSecret('CLIENT_ID_GITHUB')).secretValue; -export const getClientIdGitLab = async () => (await client.getSecret('CLIENT_ID_GITLAB')).secretValue; -export const getClientIdGoogle = async () => (await client.getSecret('CLIENT_ID_GOOGLE')).secretValue; -export const getClientSecretAzure = async () => (await client.getSecret('CLIENT_SECRET_AZURE')).secretValue; -export const getClientSecretHeroku = async () => (await client.getSecret('CLIENT_SECRET_HEROKU')).secretValue; -export const getClientSecretVercel = async () => (await client.getSecret('CLIENT_SECRET_VERCEL')).secretValue; -export const getClientSecretNetlify = async () => (await client.getSecret('CLIENT_SECRET_NETLIFY')).secretValue; -export const getClientSecretGitHub = async () => (await client.getSecret('CLIENT_SECRET_GITHUB')).secretValue; -export const getClientSecretGitLab = async () => (await client.getSecret('CLIENT_SECRET_GITLAB')).secretValue; -export const getClientSecretGoogle = async () => (await client.getSecret('CLIENT_SECRET_GOOGLE')).secretValue; -export const getClientSlugVercel = async () => (await client.getSecret('CLIENT_SLUG_VERCEL')).secretValue; -export const getPostHogHost = async () => (await client.getSecret('POSTHOG_HOST')).secretValue || 'https://app.posthog.com'; -export const getPostHogProjectApiKey = async () => (await client.getSecret('POSTHOG_PROJECT_API_KEY')).secretValue || 'phc_nSin8j5q2zdhpFDI1ETmFNUIuTG4DwKVyIigrY10XiE'; -export const getSentryDSN = async () => (await client.getSecret('SENTRY_DSN')).secretValue; -export const getSiteURL = async () => (await client.getSecret('SITE_URL')).secretValue; -export const getSmtpHost = async () => (await client.getSecret('SMTP_HOST')).secretValue; -export const getSmtpSecure = async () => (await client.getSecret('SMTP_SECURE')).secretValue === 'true' || false; -export const getSmtpPort = async () => parseInt((await client.getSecret('SMTP_PORT')).secretValue) || 587; -export const getSmtpUsername = async () => (await client.getSecret('SMTP_USERNAME')).secretValue; -export const getSmtpPassword = async () => (await client.getSecret('SMTP_PASSWORD')).secretValue; -export const getSmtpFromAddress = async () => (await client.getSecret('SMTP_FROM_ADDRESS')).secretValue; -export const getSmtpFromName = async () => (await client.getSecret('SMTP_FROM_NAME')).secretValue || 'Infisical'; +export const getInviteOnlySignup = async () => (await client.getSecret("INVITE_ONLY_SIGNUP")).secretValue === "true" +export const getSaltRounds = async () => parseInt((await client.getSecret("SALT_ROUNDS")).secretValue) || 10; +export const getJwtAuthLifetime = async () => (await client.getSecret("JWT_AUTH_LIFETIME")).secretValue || "10d"; +export const getJwtAuthSecret = async () => (await client.getSecret("JWT_AUTH_SECRET")).secretValue; +export const getJwtMfaLifetime = async () => (await client.getSecret("JWT_MFA_LIFETIME")).secretValue || "5m"; +export const getJwtMfaSecret = async () => (await client.getSecret("JWT_MFA_LIFETIME")).secretValue || "5m"; +export const getJwtRefreshLifetime = async () => (await client.getSecret("JWT_REFRESH_LIFETIME")).secretValue || "90d"; +export const getJwtRefreshSecret = async () => (await client.getSecret("JWT_REFRESH_SECRET")).secretValue; +export const getJwtServiceSecret = async () => (await client.getSecret("JWT_SERVICE_SECRET")).secretValue; +export const getJwtSignupLifetime = async () => (await client.getSecret("JWT_SIGNUP_LIFETIME")).secretValue || "15m"; +export const getJwtProviderAuthSecret = async () => (await client.getSecret("JWT_PROVIDER_AUTH_SECRET")).secretValue; +export const getJwtProviderAuthLifetime = async () => (await client.getSecret("JWT_PROVIDER_AUTH_LIFETIME")).secretValue || "15m"; +export const getJwtSignupSecret = async () => (await client.getSecret("JWT_SIGNUP_SECRET")).secretValue; +export const getMongoURL = async () => (await client.getSecret("MONGO_URL")).secretValue; +export const getNodeEnv = async () => (await client.getSecret("NODE_ENV")).secretValue || "production"; +export const getVerboseErrorOutput = async () => (await client.getSecret("VERBOSE_ERROR_OUTPUT")).secretValue === "true" && true; +export const getLokiHost = async () => (await client.getSecret("LOKI_HOST")).secretValue; +export const getClientIdAzure = async () => (await client.getSecret("CLIENT_ID_AZURE")).secretValue; +export const getClientIdHeroku = async () => (await client.getSecret("CLIENT_ID_HEROKU")).secretValue; +export const getClientIdVercel = async () => (await client.getSecret("CLIENT_ID_VERCEL")).secretValue; +export const getClientIdNetlify = async () => (await client.getSecret("CLIENT_ID_NETLIFY")).secretValue; +export const getClientIdGitHub = async () => (await client.getSecret("CLIENT_ID_GITHUB")).secretValue; +export const getClientIdGitLab = async () => (await client.getSecret("CLIENT_ID_GITLAB")).secretValue; +export const getClientIdGoogle = async () => (await client.getSecret("CLIENT_ID_GOOGLE")).secretValue; +export const getClientSecretAzure = async () => (await client.getSecret("CLIENT_SECRET_AZURE")).secretValue; +export const getClientSecretHeroku = async () => (await client.getSecret("CLIENT_SECRET_HEROKU")).secretValue; +export const getClientSecretVercel = async () => (await client.getSecret("CLIENT_SECRET_VERCEL")).secretValue; +export const getClientSecretNetlify = async () => (await client.getSecret("CLIENT_SECRET_NETLIFY")).secretValue; +export const getClientSecretGitHub = async () => (await client.getSecret("CLIENT_SECRET_GITHUB")).secretValue; +export const getClientSecretGitLab = async () => (await client.getSecret("CLIENT_SECRET_GITLAB")).secretValue; +export const getClientSecretGoogle = async () => (await client.getSecret("CLIENT_SECRET_GOOGLE")).secretValue; +export const getClientSlugVercel = async () => (await client.getSecret("CLIENT_SLUG_VERCEL")).secretValue; +export const getPostHogHost = async () => (await client.getSecret("POSTHOG_HOST")).secretValue || "https://app.posthog.com"; +export const getPostHogProjectApiKey = async () => (await client.getSecret("POSTHOG_PROJECT_API_KEY")).secretValue || "phc_nSin8j5q2zdhpFDI1ETmFNUIuTG4DwKVyIigrY10XiE"; +export const getSentryDSN = async () => (await client.getSecret("SENTRY_DSN")).secretValue; +export const getSiteURL = async () => (await client.getSecret("SITE_URL")).secretValue; +export const getSmtpHost = async () => (await client.getSecret("SMTP_HOST")).secretValue; +export const getSmtpSecure = async () => (await client.getSecret("SMTP_SECURE")).secretValue === "true" || false; +export const getSmtpPort = async () => parseInt((await client.getSecret("SMTP_PORT")).secretValue) || 587; +export const getSmtpUsername = async () => (await client.getSecret("SMTP_USERNAME")).secretValue; +export const getSmtpPassword = async () => (await client.getSecret("SMTP_PASSWORD")).secretValue; +export const getSmtpFromAddress = async () => (await client.getSecret("SMTP_FROM_ADDRESS")).secretValue; +export const getSmtpFromName = async () => (await client.getSecret("SMTP_FROM_NAME")).secretValue || "Infisical"; export const getLicenseKey = async () => { - const secretValue = (await client.getSecret('LICENSE_KEY')).secretValue; - return secretValue === '' ? undefined : secretValue; + const secretValue = (await client.getSecret("LICENSE_KEY")).secretValue; + return secretValue === "" ? undefined : secretValue; } export const getLicenseServerKey = async () => { - const secretValue = (await client.getSecret('LICENSE_SERVER_KEY')).secretValue; - return secretValue === '' ? undefined : secretValue; + const secretValue = (await client.getSecret("LICENSE_SERVER_KEY")).secretValue; + return secretValue === "" ? undefined : secretValue; } -export const getLicenseServerUrl = async () => (await client.getSecret('LICENSE_SERVER_URL')).secretValue || 'https://portal.infisical.com'; +export const getLicenseServerUrl = async () => (await client.getSecret("LICENSE_SERVER_URL")).secretValue || "https://portal.infisical.com"; // TODO: deprecate from here -export const getStripeProductStarter = async () => (await client.getSecret('STRIPE_PRODUCT_STARTER')).secretValue; -export const getStripeProductPro = async () => (await client.getSecret('STRIPE_PRODUCT_PRO')).secretValue; -export const getStripeProductTeam = async () => (await client.getSecret('STRIPE_PRODUCT_TEAM')).secretValue; -export const getStripePublishableKey = async () => (await client.getSecret('STRIPE_PUBLISHABLE_KEY')).secretValue; -export const getStripeSecretKey = async () => (await client.getSecret('STRIPE_SECRET_KEY')).secretValue; -export const getStripeWebhookSecret = async () => (await client.getSecret('STRIPE_WEBHOOK_SECRET')).secretValue; +export const getStripeProductStarter = async () => (await client.getSecret("STRIPE_PRODUCT_STARTER")).secretValue; +export const getStripeProductPro = async () => (await client.getSecret("STRIPE_PRODUCT_PRO")).secretValue; +export const getStripeProductTeam = async () => (await client.getSecret("STRIPE_PRODUCT_TEAM")).secretValue; +export const getStripePublishableKey = async () => (await client.getSecret("STRIPE_PUBLISHABLE_KEY")).secretValue; +export const getStripeSecretKey = async () => (await client.getSecret("STRIPE_SECRET_KEY")).secretValue; +export const getStripeWebhookSecret = async () => (await client.getSecret("STRIPE_WEBHOOK_SECRET")).secretValue; -export const getTelemetryEnabled = async () => (await client.getSecret('TELEMETRY_ENABLED')).secretValue !== 'false' && true; -export const getLoopsApiKey = async () => (await client.getSecret('LOOPS_API_KEY')).secretValue; -export const getSmtpConfigured = async () => (await client.getSecret('SMTP_HOST')).secretValue == '' || (await client.getSecret('SMTP_HOST')).secretValue == undefined ? false : true +export const getTelemetryEnabled = async () => (await client.getSecret("TELEMETRY_ENABLED")).secretValue !== "false" && true; +export const getLoopsApiKey = async () => (await client.getSecret("LOOPS_API_KEY")).secretValue; +export const getSmtpConfigured = async () => (await client.getSecret("SMTP_HOST")).secretValue == "" || (await client.getSecret("SMTP_HOST")).secretValue == undefined ? false : true export const getHttpsEnabled = async () => { if ((await getNodeEnv()) != "production") { // no https for anything other than prod return false } - if ((await client.getSecret('HTTPS_ENABLED')).secretValue == undefined || (await client.getSecret('HTTPS_ENABLED')).secretValue == "") { + if ((await client.getSecret("HTTPS_ENABLED")).secretValue == undefined || (await client.getSecret("HTTPS_ENABLED")).secretValue == "") { // default when no value present return true } - return (await client.getSecret('HTTPS_ENABLED')).secretValue === 'true' && true + return (await client.getSecret("HTTPS_ENABLED")).secretValue === "true" && true } \ No newline at end of file diff --git a/backend/src/config/request.ts b/backend/src/config/request.ts index e13469657..e69b1baff 100644 --- a/backend/src/config/request.ts +++ b/backend/src/config/request.ts @@ -1,16 +1,16 @@ -import axios from 'axios'; -import axiosRetry from 'axios-retry'; +import axios from "axios"; +import axiosRetry from "axios-retry"; import { - getLicenseServerKeyAuthToken, - setLicenseServerKeyAuthToken, getLicenseKeyAuthToken, - setLicenseKeyAuthToken -} from './storage'; + getLicenseServerKeyAuthToken, + setLicenseKeyAuthToken, + setLicenseServerKeyAuthToken, +} from "./storage"; import { getLicenseKey, getLicenseServerKey, - getLicenseServerUrl -} from './index'; + getLicenseServerUrl, +} from "./index"; // should have JWT to interact with the license server export const licenseServerKeyRequest = axios.create(); @@ -35,8 +35,8 @@ export const refreshLicenseServerKeyToken = async () => { `${licenseServerUrl}/api/auth/v1/license-server-login`, {}, { headers: { - 'X-API-KEY': licenseServerKey - } + "X-API-KEY": licenseServerKey, + }, } ); @@ -53,8 +53,8 @@ export const refreshLicenseKeyToken = async () => { `${licenseServerUrl}/api/auth/v1/license-login`, {}, { headers: { - 'X-API-KEY': licenseKey - } + "X-API-KEY": licenseKey, + }, } ); @@ -86,7 +86,7 @@ licenseServerKeyRequest.interceptors.response.use((response) => { // refresh const token = await refreshLicenseServerKeyToken(); - axios.defaults.headers.common['Authorization'] = 'Bearer ' + token; + axios.defaults.headers.common["Authorization"] = "Bearer " + token; return licenseServerKeyRequest(originalRequest); } @@ -116,7 +116,7 @@ licenseKeyRequest.interceptors.response.use((response) => { // refresh const token = await refreshLicenseKeyToken(); - axios.defaults.headers.common['Authorization'] = 'Bearer ' + token; + axios.defaults.headers.common["Authorization"] = "Bearer " + token; return licenseKeyRequest(originalRequest); } diff --git a/backend/src/config/storage.ts b/backend/src/config/storage.ts index 5638561ac..f3cf27196 100644 --- a/backend/src/config/storage.ts +++ b/backend/src/config/storage.ts @@ -5,7 +5,7 @@ const MemoryLicenseServerKeyTokenStorage = () => { setToken: (token: string) => { authToken = token; }, - getToken: () => authToken + getToken: () => authToken, }; }; @@ -16,7 +16,7 @@ const MemoryLicenseKeyTokenStorage = () => { setToken: (token: string) => { authToken = token; }, - getToken: () => authToken + getToken: () => authToken, }; }; diff --git a/backend/src/controllers/v1/authController.ts b/backend/src/controllers/v1/authController.ts index 8a70e016e..311d9602d 100644 --- a/backend/src/controllers/v1/authController.ts +++ b/backend/src/controllers/v1/authController.ts @@ -1,36 +1,36 @@ -import { Request, Response } from 'express'; -import fs from 'fs'; -import path from 'path'; -import jwt from 'jsonwebtoken'; -import * as bigintConversion from 'bigint-conversion'; +import { Request, Response } from "express"; +import fs from "fs"; +import path from "path"; +import jwt from "jsonwebtoken"; +import * as bigintConversion from "bigint-conversion"; // eslint-disable-next-line @typescript-eslint/no-var-requires -const jsrp = require('jsrp'); +const jsrp = require("jsrp"); import { - User, - LoginSRPDetail, - TokenVersion -} from '../../models'; -import { createToken, issueAuthTokens, clearTokens } from '../../helpers/auth'; -import { checkUserDevice } from '../../helpers/user'; + LoginSRPDetail, + TokenVersion, + User, +} from "../../models"; +import { clearTokens, createToken, issueAuthTokens } from "../../helpers/auth"; +import { checkUserDevice } from "../../helpers/user"; import { ACTION_LOGIN, ACTION_LOGOUT, - AUTH_MODE_JWT -} from '../../variables'; + AUTH_MODE_JWT, +} from "../../variables"; import { BadRequestError, - UnauthorizedRequestError -} from '../../utils/errors'; -import { EELogService } from '../../ee/services'; -import { getChannelFromUserAgent } from '../../utils/posthog'; + UnauthorizedRequestError, +} from "../../utils/errors"; +import { EELogService } from "../../ee/services"; +import { getChannelFromUserAgent } from "../../utils/posthog"; import { - getJwtRefreshSecret, + getHttpsEnabled, getJwtAuthLifetime, getJwtAuthSecret, - getHttpsEnabled -} from '../../config'; + getJwtRefreshSecret, +} from "../../config"; -declare module 'jsonwebtoken' { +declare module "jsonwebtoken" { export interface UserIDJwtPayload extends jwt.JwtPayload { userId: string; refreshVersion?: number; @@ -46,20 +46,20 @@ declare module 'jsonwebtoken' { export const login1 = async (req: Request, res: Response) => { const { email, - clientPublicKey + clientPublicKey, }: { email: string; clientPublicKey: string } = req.body; const user = await User.findOne({ - email - }).select('+salt +verifier'); + email, + }).select("+salt +verifier"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); const server = new jsrp.server(); server.init( { salt: user.salt, - verifier: user.verifier + verifier: user.verifier, }, async () => { // generate server-side public key @@ -73,7 +73,7 @@ export const login1 = async (req: Request, res: Response) => { return res.status(200).send({ serverPublicKey, - salt: user.salt + salt: user.salt, }); } ); @@ -89,10 +89,10 @@ export const login1 = async (req: Request, res: Response) => { export const login2 = async (req: Request, res: Response) => { const { email, clientProof } = req.body; const user = await User.findOne({ - email - }).select('+salt +verifier +publicKey +encryptedPrivateKey +iv +tag'); + email, + }).select("+salt +verifier +publicKey +encryptedPrivateKey +iv +tag"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); const loginSRPDetailFromDB = await LoginSRPDetail.findOneAndDelete({ email: email }) @@ -105,7 +105,7 @@ export const login2 = async (req: Request, res: Response) => { { salt: user.salt, verifier: user.verifier, - b: loginSRPDetailFromDB.serverBInt + b: loginSRPDetailFromDB.serverBInt, }, async () => { server.setClientPublicKey(loginSRPDetailFromDB.clientPublicKey); @@ -117,33 +117,33 @@ export const login2 = async (req: Request, res: Response) => { await checkUserDevice({ user, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); const tokens = await issueAuthTokens({ userId: user._id, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); // store (refresh) token in httpOnly cookie - res.cookie('jid', tokens.refreshToken, { + res.cookie("jid", tokens.refreshToken, { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: await getHttpsEnabled() + path: "/", + sameSite: "strict", + secure: await getHttpsEnabled(), }); const loginAction = await EELogService.createAction({ name: ACTION_LOGIN, - userId: user._id + userId: user._id, }); loginAction && await EELogService.createLog({ userId: user._id, actions: [loginAction], - channel: getChannelFromUserAgent(req.headers['user-agent']), - ipAddress: req.realIP + channel: getChannelFromUserAgent(req.headers["user-agent"]), + ipAddress: req.realIP, }); // return (access) token in response @@ -152,12 +152,12 @@ export const login2 = async (req: Request, res: Response) => { publicKey: user.publicKey, encryptedPrivateKey: user.encryptedPrivateKey, iv: user.iv, - tag: user.tag + tag: user.tag, }); } return res.status(400).send({ - message: 'Failed to authenticate. Try again?' + message: "Failed to authenticate. Try again?", }); } ); @@ -175,51 +175,51 @@ export const logout = async (req: Request, res: Response) => { } // clear httpOnly cookie - res.cookie('jid', '', { + res.cookie("jid", "", { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: (await getHttpsEnabled()) as boolean + path: "/", + sameSite: "strict", + secure: (await getHttpsEnabled()) as boolean, }); const logoutAction = await EELogService.createAction({ name: ACTION_LOGOUT, - userId: req.user._id + userId: req.user._id, }); logoutAction && await EELogService.createLog({ userId: req.user._id, actions: [logoutAction], - channel: getChannelFromUserAgent(req.headers['user-agent']), - ipAddress: req.realIP + channel: getChannelFromUserAgent(req.headers["user-agent"]), + ipAddress: req.realIP, }); return res.status(200).send({ - message: 'Successfully logged out.' + message: "Successfully logged out.", }); }; export const getCommonPasswords = async (req: Request, res: Response) => { const commonPasswords = fs.readFileSync( - path.resolve(__dirname, '../../data/' + 'common_passwords.txt'), - 'utf8' - ).split('\n'); + path.resolve(__dirname, "../../data/" + "common_passwords.txt"), + "utf8" + ).split("\n"); return res.status(200).send(commonPasswords); } export const revokeAllSessions = async (req: Request, res: Response) => { await TokenVersion.updateMany({ - user: req.user._id + user: req.user._id, }, { $inc: { refreshVersion: 1, - accessVersion: 1 - } + accessVersion: 1, + }, }); return res.status(200).send({ - message: 'Successfully revoked all sessions.' + message: "Successfully revoked all sessions.", }); } @@ -231,7 +231,7 @@ export const revokeAllSessions = async (req: Request, res: Response) => { */ export const checkAuth = async (req: Request, res: Response) => { return res.status(200).send({ - message: 'Authenticated' + message: "Authenticated", }); } @@ -245,7 +245,7 @@ export const getNewToken = async (req: Request, res: Response) => { const refreshToken = req.cookies.jid; if (!refreshToken) { - throw new Error('Failed to find refresh token in request cookies'); + throw new Error("Failed to find refresh token in request cookies"); } const decodedToken = ( @@ -253,35 +253,35 @@ export const getNewToken = async (req: Request, res: Response) => { ); const user = await User.findOne({ - _id: decodedToken.userId - }).select('+publicKey +refreshVersion +accessVersion'); + _id: decodedToken.userId, + }).select("+publicKey +refreshVersion +accessVersion"); - if (!user) throw new Error('Failed to authenticate unfound user'); + if (!user) throw new Error("Failed to authenticate unfound user"); if (!user?.publicKey) - throw new Error('Failed to authenticate not fully set up account'); + throw new Error("Failed to authenticate not fully set up account"); const tokenVersion = await TokenVersion.findById(decodedToken.tokenVersionId); if (!tokenVersion) throw UnauthorizedRequestError({ - message: 'Failed to validate refresh token' + message: "Failed to validate refresh token", }); if (decodedToken.refreshVersion !== tokenVersion.refreshVersion) throw BadRequestError({ - message: 'Failed to validate refresh token' + message: "Failed to validate refresh token", }); const token = createToken({ payload: { userId: decodedToken.userId, tokenVersionId: tokenVersion._id.toString(), - accessVersion: tokenVersion.refreshVersion + accessVersion: tokenVersion.refreshVersion, }, expiresIn: await getJwtAuthLifetime(), - secret: await getJwtAuthSecret() + secret: await getJwtAuthSecret(), }); return res.status(200).send({ - token + token, }); }; diff --git a/backend/src/controllers/v1/botController.ts b/backend/src/controllers/v1/botController.ts index f155f58a5..b2e757541 100644 --- a/backend/src/controllers/v1/botController.ts +++ b/backend/src/controllers/v1/botController.ts @@ -1,7 +1,7 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; -import { Bot, BotKey } from '../../models'; -import { createBot } from '../../helpers/bot'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; +import { Bot, BotKey } from "../../models"; +import { createBot } from "../../helpers/bot"; interface BotKey { encryptedKey: string; @@ -19,20 +19,20 @@ export const getBotByWorkspaceId = async (req: Request, res: Response) => { const { workspaceId } = req.params; let bot = await Bot.findOne({ - workspace: workspaceId + workspace: workspaceId, }); if (!bot) { // case: bot doesn't exist for workspace with id [workspaceId] // -> create a new bot and return it bot = await createBot({ - name: 'Infisical Bot', - workspaceId: new Types.ObjectId(workspaceId) + name: "Infisical Bot", + workspaceId: new Types.ObjectId(workspaceId), }); } return res.status(200).send({ - bot + bot, }); }; @@ -49,40 +49,40 @@ export const setBotActiveState = async (req: Request, res: Response) => { // bot state set to active -> share workspace key with bot if (!botKey?.encryptedKey || !botKey?.nonce) { return res.status(400).send({ - message: 'Failed to set bot state to active - missing bot key' + message: "Failed to set bot state to active - missing bot key", }); } await BotKey.findOneAndUpdate({ - workspace: req.bot.workspace + workspace: req.bot.workspace, }, { encryptedKey: botKey.encryptedKey, nonce: botKey.nonce, sender: req.user._id, bot: req.bot._id, - workspace: req.bot.workspace + workspace: req.bot.workspace, }, { upsert: true, - new: true + new: true, }); } else { // case: bot state set to inactive -> delete bot's workspace key await BotKey.deleteOne({ - bot: req.bot._id + bot: req.bot._id, }); } - let bot = await Bot.findOneAndUpdate({ - _id: req.bot._id + const bot = await Bot.findOneAndUpdate({ + _id: req.bot._id, }, { - isActive + isActive, }, { - new: true + new: true, }); - if (!bot) throw new Error('Failed to update bot active state'); + if (!bot) throw new Error("Failed to update bot active state"); return res.status(200).send({ - bot + bot, }); }; diff --git a/backend/src/controllers/v1/index.ts b/backend/src/controllers/v1/index.ts index 1da61835f..5f2523895 100644 --- a/backend/src/controllers/v1/index.ts +++ b/backend/src/controllers/v1/index.ts @@ -1,19 +1,19 @@ -import * as authController from './authController'; -import * as botController from './botController'; -import * as integrationAuthController from './integrationAuthController'; -import * as integrationController from './integrationController'; -import * as keyController from './keyController'; -import * as membershipController from './membershipController'; -import * as membershipOrgController from './membershipOrgController'; -import * as organizationController from './organizationController'; -import * as passwordController from './passwordController'; -import * as secretController from './secretController'; -import * as serviceTokenController from './serviceTokenController'; -import * as signupController from './signupController'; -import * as stripeController from './stripeController'; -import * as userActionController from './userActionController'; -import * as userController from './userController'; -import * as workspaceController from './workspaceController'; +import * as authController from "./authController"; +import * as botController from "./botController"; +import * as integrationAuthController from "./integrationAuthController"; +import * as integrationController from "./integrationController"; +import * as keyController from "./keyController"; +import * as membershipController from "./membershipController"; +import * as membershipOrgController from "./membershipOrgController"; +import * as organizationController from "./organizationController"; +import * as passwordController from "./passwordController"; +import * as secretController from "./secretController"; +import * as serviceTokenController from "./serviceTokenController"; +import * as signupController from "./signupController"; +import * as stripeController from "./stripeController"; +import * as userActionController from "./userActionController"; +import * as userController from "./userController"; +import * as workspaceController from "./workspaceController"; export { authController, @@ -31,5 +31,5 @@ export { stripeController, userActionController, userController, - workspaceController + workspaceController, }; diff --git a/backend/src/controllers/v1/integrationAuthController.ts b/backend/src/controllers/v1/integrationAuthController.ts index 394c67446..f625f10a2 100644 --- a/backend/src/controllers/v1/integrationAuthController.ts +++ b/backend/src/controllers/v1/integrationAuthController.ts @@ -1,21 +1,17 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; +import { standardRequest } from "../../config/request"; +import { getApps, getTeams, revokeAccess } from "../../integrations"; +import { Bot, IntegrationAuth } from "../../models"; +import { IntegrationService } from "../../services"; import { - IntegrationAuth, - Bot -} from '../../models'; -import { ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, INTEGRATION_SET, getIntegrationOptions as getIntegrationOptionsFunc } from '../../variables'; -import { IntegrationService } from '../../services'; -import { - getApps, - getTeams, - revokeAccess -} from '../../integrations'; -import { - INTEGRATION_VERCEL_API_URL, - INTEGRATION_RAILWAY_API_URL -} from '../../variables'; -import { standardRequest } from '../../config/request'; + ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_UTF8, + INTEGRATION_RAILWAY_API_URL, + INTEGRATION_SET, + INTEGRATION_VERCEL_API_URL, + getIntegrationOptions as getIntegrationOptionsFunc +} from "../../variables"; /*** * Return integration authorization with id [integrationAuthId] @@ -23,22 +19,23 @@ import { standardRequest } from '../../config/request'; export const getIntegrationAuth = async (req: Request, res: Response) => { const { integrationAuthId } = req.params; const integrationAuth = await IntegrationAuth.findById(integrationAuthId); - - if (!integrationAuth) return res.status(400).send({ - message: 'Failed to find integration authorization' - }); - return res.status(200).send({ - integrationAuth - }); -} + if (!integrationAuth) + return res.status(400).send({ + message: "Failed to find integration authorization" + }); + + return res.status(200).send({ + integrationAuth + }); +}; export const getIntegrationOptions = async (req: Request, res: Response) => { - const INTEGRATION_OPTIONS = await getIntegrationOptionsFunc(); + const INTEGRATION_OPTIONS = await getIntegrationOptionsFunc(); - return res.status(200).send({ - integrationOptions: INTEGRATION_OPTIONS, - }); + return res.status(200).send({ + integrationOptions: INTEGRATION_OPTIONS + }); }; /** @@ -47,26 +44,22 @@ export const getIntegrationOptions = async (req: Request, res: Response) => { * @param res * @returns */ -export const oAuthExchange = async ( - req: Request, - res: Response -) => { +export const oAuthExchange = async (req: Request, res: Response) => { const { workspaceId, code, integration } = req.body; - if (!INTEGRATION_SET.has(integration)) - throw new Error('Failed to validate integration'); - + if (!INTEGRATION_SET.has(integration)) throw new Error("Failed to validate integration"); + const environments = req.membership.workspace?.environments || []; - if(environments.length === 0){ - throw new Error("Failed to get environments") + if (environments.length === 0) { + throw new Error("Failed to get environments"); } const integrationAuth = await IntegrationService.handleOAuthExchange({ workspaceId, integration, code, - environment: environments[0].slug, + environment: environments[0].slug }); - + return res.status(200).send({ integrationAuth }); @@ -75,69 +68,70 @@ export const oAuthExchange = async ( /** * Save integration access token and (optionally) access id as part of integration * [integration] for workspace with id [workspaceId] - * @param req - * @param res + * @param req + * @param res */ -export const saveIntegrationAccessToken = async ( - req: Request, - res: Response -) => { - // TODO: refactor - // TODO: check if access token is valid for each integration +export const saveIntegrationAccessToken = async (req: Request, res: Response) => { + // TODO: refactor + // TODO: check if access token is valid for each integration - let integrationAuth; - const { - workspaceId, - accessId, - accessToken, - url, - namespace, - integration - }: { - workspaceId: string; - accessId: string | null; - accessToken: string; - url: string; - namespace: string; - integration: string; - } = req.body; + let integrationAuth; + const { + workspaceId, + accessId, + accessToken, + url, + namespace, + integration + }: { + workspaceId: string; + accessId: string | null; + accessToken: string; + url: string; + namespace: string; + integration: string; + } = req.body; - const bot = await Bot.findOne({ - workspace: new Types.ObjectId(workspaceId), - isActive: true - }); - - if (!bot) throw new Error('Bot must be enabled to save integration access token'); + const bot = await Bot.findOne({ + workspace: new Types.ObjectId(workspaceId), + isActive: true + }); - integrationAuth = await IntegrationAuth.findOneAndUpdate({ - workspace: new Types.ObjectId(workspaceId), - integration - }, { - workspace: new Types.ObjectId(workspaceId), - integration, - url, - namespace, - algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 - }, { - new: true, - upsert: true - }); - - // encrypt and save integration access details - integrationAuth = await IntegrationService.setIntegrationAuthAccess({ - integrationAuthId: integrationAuth._id.toString(), - accessId, - accessToken, - accessExpiresAt: undefined - }); - - if (!integrationAuth) throw new Error('Failed to save integration access token'); - - return res.status(200).send({ - integrationAuth - }); -} + if (!bot) throw new Error("Bot must be enabled to save integration access token"); + + integrationAuth = await IntegrationAuth.findOneAndUpdate( + { + workspace: new Types.ObjectId(workspaceId), + integration + }, + { + workspace: new Types.ObjectId(workspaceId), + integration, + url, + namespace, + algorithm: ALGORITHM_AES_256_GCM, + keyEncoding: ENCODING_SCHEME_UTF8 + }, + { + new: true, + upsert: true + } + ); + + // encrypt and save integration access details + integrationAuth = await IntegrationService.setIntegrationAuthAccess({ + integrationAuthId: integrationAuth._id.toString(), + accessId, + accessToken, + accessExpiresAt: undefined + }); + + if (!integrationAuth) throw new Error("Failed to save integration access token"); + + return res.status(200).send({ + integrationAuth + }); +}; /** * Return list of applications allowed for integration with integration authorization id [integrationAuthId] @@ -147,108 +141,108 @@ export const saveIntegrationAccessToken = async ( */ export const getIntegrationAuthApps = async (req: Request, res: Response) => { const teamId = req.query.teamId as string; - + const apps = await getApps({ integrationAuth: req.integrationAuth, accessToken: req.accessToken, - accessId: req.accessId, - ...teamId && { teamId } + accessId: req.accessId, + ...(teamId && { teamId }) }); - return res.status(200).send({ - apps - }); + return res.status(200).send({ + apps + }); }; /** * Return list of teams allowed for integration with integration authorization id [integrationAuthId] - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const getIntegrationAuthTeams = async (req: Request, res: Response) => { - const teams = await getTeams({ - integrationAuth: req.integrationAuth, - accessToken: req.accessToken - }); - - return res.status(200).send({ - teams - }); -} + const teams = await getTeams({ + integrationAuth: req.integrationAuth, + accessToken: req.accessToken + }); + + return res.status(200).send({ + teams + }); +}; /** * Return list of available Vercel (preview) branches for Vercel project with * id [appId] - * @param req - * @param res + * @param req + * @param res */ export const getIntegrationAuthVercelBranches = async (req: Request, res: Response) => { - const { integrationAuthId } = req.params; - const appId = req.query.appId as string; - - interface VercelBranch { - ref: string; - lastCommit: string; - isProtected: boolean; - } + const appId = req.query.appId as string; - const params = new URLSearchParams({ - projectId: appId, - ...(req.integrationAuth.teamId ? { - teamId: req.integrationAuth.teamId - } : {}) - }); + interface VercelBranch { + ref: string; + lastCommit: string; + isProtected: boolean; + } - let branches: string[] = []; - - if (appId && appId !== '') { - const { data }: { data: VercelBranch[] } = await standardRequest.get( - `${INTEGRATION_VERCEL_API_URL}/v1/integrations/git-branches`, - { - params, - headers: { - Authorization: `Bearer ${req.accessToken}`, - 'Accept-Encoding': 'application/json' - } - } - ); - - branches = data.map((b) => b.ref); - } + const params = new URLSearchParams({ + projectId: appId, + ...(req.integrationAuth.teamId + ? { + teamId: req.integrationAuth.teamId + } + : {}) + }); - return res.status(200).send({ - branches - }); -} + let branches: string[] = []; + + if (appId && appId !== "") { + const { data }: { data: VercelBranch[] } = await standardRequest.get( + `${INTEGRATION_VERCEL_API_URL}/v1/integrations/git-branches`, + { + params, + headers: { + Authorization: `Bearer ${req.accessToken}`, + "Accept-Encoding": "application/json" + } + } + ); + + branches = data.map((b) => b.ref); + } + + return res.status(200).send({ + branches + }); +}; /** * Return list of Railway environments for Railway project with * id [appId] - * @param req - * @param res + * @param req + * @param res */ export const getIntegrationAuthRailwayEnvironments = async (req: Request, res: Response) => { - const { integrationAuthId } = req.params; - const appId = req.query.appId as string; - - interface RailwayEnvironment { - node: { - id: string; - name: string; - isEphemeral: boolean; - } - } - - interface Environment { - environmentId: string; - name: string; - } - - let environments: Environment[] = []; + const appId = req.query.appId as string; - if (appId && appId !== '') { - const query = ` + interface RailwayEnvironment { + node: { + id: string; + name: string; + isEphemeral: boolean; + }; + } + + interface Environment { + environmentId: string; + name: string; + } + + let environments: Environment[] = []; + + if (appId && appId !== "") { + const query = ` query GetEnvironments($projectId: String!, $after: String, $before: String, $first: Int, $isEphemeral: Boolean, $last: Int) { environments(projectId: $projectId, after: $after, before: $before, first: $first, isEphemeral: $isEphemeral, last: $last) { edges { @@ -261,59 +255,68 @@ export const getIntegrationAuthRailwayEnvironments = async (req: Request, res: R } } `; - - const variables = { - projectId: appId - } - - const { data: { data: { environments: { edges } } } } = await standardRequest.post(INTEGRATION_RAILWAY_API_URL, { - query, - variables, - }, { - headers: { - 'Authorization': `Bearer ${req.accessToken}`, - 'Content-Type': 'application/json', - }, - }); - - environments = edges.map((e: RailwayEnvironment) => { - return ({ - name: e.node.name, - environmentId: e.node.id - }); - }); - } - - return res.status(200).send({ - environments - }); -} + + const variables = { + projectId: appId + }; + + const { + data: { + data: { + environments: { edges } + } + } + } = await standardRequest.post( + INTEGRATION_RAILWAY_API_URL, + { + query, + variables + }, + { + headers: { + Authorization: `Bearer ${req.accessToken}`, + "Content-Type": "application/json" + } + } + ); + + environments = edges.map((e: RailwayEnvironment) => { + return { + name: e.node.name, + environmentId: e.node.id + }; + }); + } + + return res.status(200).send({ + environments + }); +}; /** * Return list of Railway services for Railway project with id * [appId] - * @param req - * @param res + * @param req + * @param res */ export const getIntegrationAuthRailwayServices = async (req: Request, res: Response) => { - const { integrationAuthId } = req.params; - const appId = req.query.appId as string; - - interface RailwayService { - node: { - id: string; - name: string; - } - } - - interface Service { - name: string; - serviceId: string; - } - - let services: Service[] = []; - - const query = ` + const appId = req.query.appId as string; + + interface RailwayService { + node: { + id: string; + name: string; + }; + } + + interface Service { + name: string; + serviceId: string; + } + + let services: Service[] = []; + + const query = ` query project($id: String!) { project(id: $id) { createdAt @@ -341,31 +344,43 @@ export const getIntegrationAuthRailwayServices = async (req: Request, res: Respo } `; - if (appId && appId !== '') { - const variables = { - id: appId - } - - const { data: { data: { project: { services: { edges } } } } } = await standardRequest.post(INTEGRATION_RAILWAY_API_URL, { - query, - variables - }, { - headers: { - 'Authorization': `Bearer ${req.accessToken}`, - 'Content-Type': 'application/json', - }, - }); - - services = edges.map((e: RailwayService) => ({ - name: e.node.name, - serviceId: e.node.id - })); - } - - return res.status(200).send({ - services - }); -} + if (appId && appId !== "") { + const variables = { + id: appId + }; + + const { + data: { + data: { + project: { + services: { edges } + } + } + } + } = await standardRequest.post( + INTEGRATION_RAILWAY_API_URL, + { + query, + variables + }, + { + headers: { + Authorization: `Bearer ${req.accessToken}`, + "Content-Type": "application/json" + } + } + ); + + services = edges.map((e: RailwayService) => ({ + name: e.node.name, + serviceId: e.node.id + })); + } + + return res.status(200).send({ + services + }); +}; /** * Delete integration authorization with id [integrationAuthId] @@ -376,10 +391,10 @@ export const getIntegrationAuthRailwayServices = async (req: Request, res: Respo export const deleteIntegrationAuth = async (req: Request, res: Response) => { const integrationAuth = await revokeAccess({ integrationAuth: req.integrationAuth, - accessToken: req.accessToken, + accessToken: req.accessToken }); return res.status(200).send({ - integrationAuth, + integrationAuth }); }; diff --git a/backend/src/controllers/v1/keyController.ts b/backend/src/controllers/v1/keyController.ts index beb4d0d07..ed82dfdcc 100644 --- a/backend/src/controllers/v1/keyController.ts +++ b/backend/src/controllers/v1/keyController.ts @@ -1,6 +1,6 @@ -import { Request, Response } from 'express'; -import { Key } from '../../models'; -import { findMembership } from '../../helpers/membership'; +import { Request, Response } from "express"; +import { Key } from "../../models"; +import { findMembership } from "../../helpers/membership"; /** * Add (encrypted) copy of workspace key for workspace with id [workspaceId] for user with @@ -16,11 +16,11 @@ export const uploadKey = async (req: Request, res: Response) => { // validate membership of receiver const receiverMembership = await findMembership({ user: key.userId, - workspace: workspaceId + workspace: workspaceId, }); if (!receiverMembership) { - throw new Error('Failed receiver membership validation for workspace'); + throw new Error("Failed receiver membership validation for workspace"); } await new Key({ @@ -28,11 +28,11 @@ export const uploadKey = async (req: Request, res: Response) => { nonce: key.nonce, sender: req.user._id, receiver: key.userId, - workspace: workspaceId + workspace: workspaceId, }).save(); return res.status(200).send({ - message: 'Successfully uploaded key to workspace' + message: "Successfully uploaded key to workspace", }); }; @@ -48,16 +48,16 @@ export const getLatestKey = async (req: Request, res: Response) => { // get latest key const latestKey = await Key.find({ workspace: workspaceId, - receiver: req.user._id + receiver: req.user._id, }) .sort({ createdAt: -1 }) .limit(1) - .populate('sender', '+publicKey'); + .populate("sender", "+publicKey"); const resObj: any = {}; if (latestKey.length > 0) { - resObj['latestKey'] = latestKey[0]; + resObj["latestKey"] = latestKey[0]; } return res.status(200).send(resObj); diff --git a/backend/src/controllers/v1/membershipController.ts b/backend/src/controllers/v1/membershipController.ts index d7e512adb..d795bcb60 100644 --- a/backend/src/controllers/v1/membershipController.ts +++ b/backend/src/controllers/v1/membershipController.ts @@ -1,12 +1,9 @@ -import { Request, Response } from 'express'; -import { Membership, MembershipOrg, User, Key } from '../../models'; -import { - findMembership, - deleteMembership as deleteMember -} from '../../helpers/membership'; -import { sendMail } from '../../helpers/nodemailer'; -import { ADMIN, MEMBER, ACCEPTED } from '../../variables'; -import { getSiteURL } from '../../config'; +import { Request, Response } from "express"; +import { Key, Membership, MembershipOrg, User } from "../../models"; +import { deleteMembership as deleteMember, findMembership } from "../../helpers/membership"; +import { sendMail } from "../../helpers/nodemailer"; +import { ACCEPTED, ADMIN, MEMBER } from "../../variables"; +import { getSiteURL } from "../../config"; /** * Check that user is a member of workspace with id [workspaceId] @@ -23,12 +20,12 @@ export const validateMembership = async (req: Request, res: Response) => { }); if (!membership) { - throw new Error('Failed to validate membership'); + throw new Error("Failed to validate membership"); } - return res.status(200).send({ - message: 'Workspace membership confirmed' - }); + return res.status(200).send({ + message: "Workspace membership confirmed" + }); }; /** @@ -43,12 +40,10 @@ export const deleteMembership = async (req: Request, res: Response) => { // check if membership to delete exists const membershipToDelete = await Membership.findOne({ _id: membershipId - }).populate('user'); + }).populate("user"); if (!membershipToDelete) { - throw new Error( - "Failed to delete workspace membership that doesn't exist" - ); + throw new Error("Failed to delete workspace membership that doesn't exist"); } // check if user is a member and admin of the workspace @@ -59,12 +54,12 @@ export const deleteMembership = async (req: Request, res: Response) => { }); if (!membership) { - throw new Error('Failed to validate workspace membership'); + throw new Error("Failed to validate workspace membership"); } if (membership.role !== ADMIN) { // user is not an admin member of the workspace - throw new Error('Insufficient role for deleting workspace membership'); + throw new Error("Insufficient role for deleting workspace membership"); } // delete workspace membership @@ -72,9 +67,9 @@ export const deleteMembership = async (req: Request, res: Response) => { membershipId: membershipToDelete._id.toString() }); - return res.status(200).send({ - deletedMembership - }); + return res.status(200).send({ + deletedMembership + }); }; /** @@ -88,7 +83,7 @@ export const changeMembershipRole = async (req: Request, res: Response) => { const { role } = req.body; if (![ADMIN, MEMBER].includes(role)) { - throw new Error('Failed to validate role'); + throw new Error("Failed to validate role"); } // validate target membership @@ -97,7 +92,7 @@ export const changeMembershipRole = async (req: Request, res: Response) => { }); if (!membershipToChangeRole) { - throw new Error('Failed to find membership to change role'); + throw new Error("Failed to find membership to change role"); } // check if user is a member and admin of target membership's @@ -108,20 +103,20 @@ export const changeMembershipRole = async (req: Request, res: Response) => { }); if (!membership) { - throw new Error('Failed to validate membership'); + throw new Error("Failed to validate membership"); } if (membership.role !== ADMIN) { // user is not an admin member of the workspace - throw new Error('Insufficient role for changing member roles'); + throw new Error("Insufficient role for changing member roles"); } membershipToChangeRole.role = role; await membershipToChangeRole.save(); - return res.status(200).send({ - membership: membershipToChangeRole - }); + return res.status(200).send({ + membership: membershipToChangeRole + }); }; /** @@ -136,10 +131,9 @@ export const inviteUserToWorkspace = async (req: Request, res: Response) => { const invitee = await User.findOne({ email - }).select('+publicKey'); + }).select("+publicKey"); - if (!invitee || !invitee?.publicKey) - throw new Error('Failed to validate invitee'); + if (!invitee || !invitee?.publicKey) throw new Error("Failed to validate invitee"); // validate invitee's workspace membership - ensure member isn't // already a member of the workspace @@ -148,8 +142,7 @@ export const inviteUserToWorkspace = async (req: Request, res: Response) => { workspace: workspaceId }); - if (inviteeMembership) - throw new Error('Failed to add existing member of workspace'); + if (inviteeMembership) throw new Error("Failed to add existing member of workspace"); // validate invitee's organization membership - ensure that only // (accepted) organization members can be added to the workspace @@ -159,8 +152,7 @@ export const inviteUserToWorkspace = async (req: Request, res: Response) => { status: ACCEPTED }); - if (!membershipOrg) - throw new Error("Failed to validate invitee's organization membership"); + if (!membershipOrg) throw new Error("Failed to validate invitee's organization membership"); // get latest key const latestKey = await Key.findOne({ @@ -168,29 +160,29 @@ export const inviteUserToWorkspace = async (req: Request, res: Response) => { receiver: req.user._id }) .sort({ createdAt: -1 }) - .populate('sender', '+publicKey'); + .populate("sender", "+publicKey"); // create new workspace membership - const m = await new Membership({ + await new Membership({ user: invitee._id, workspace: workspaceId, role: MEMBER }).save(); await sendMail({ - template: 'workspaceInvitation.handlebars', - subjectLine: 'Infisical workspace invitation', + template: "workspaceInvitation.handlebars", + subjectLine: "Infisical workspace invitation", recipients: [invitee.email], substitutions: { inviterFirstName: req.user.firstName, inviterEmail: req.user.email, workspaceName: req.membership.workspace.name, - callback_url: (await getSiteURL()) + '/login' + callback_url: (await getSiteURL()) + "/login" } }); - return res.status(200).send({ - invitee, - latestKey - }); + return res.status(200).send({ + invitee, + latestKey + }); }; diff --git a/backend/src/controllers/v1/membershipOrgController.ts b/backend/src/controllers/v1/membershipOrgController.ts index 0d4c1436d..b5669a671 100644 --- a/backend/src/controllers/v1/membershipOrgController.ts +++ b/backend/src/controllers/v1/membershipOrgController.ts @@ -1,15 +1,27 @@ -import { Types } from 'mongoose'; -import { Request, Response } from 'express'; -import { MembershipOrg, Organization, User } from '../../models'; -import { deleteMembershipOrg as deleteMemberFromOrg } from '../../helpers/membershipOrg'; -import { createToken } from '../../helpers/auth'; -import { updateSubscriptionOrgQuantity } from '../../helpers/organization'; -import { sendMail } from '../../helpers/nodemailer'; -import { TokenService } from '../../services'; -import { EELicenseService } from '../../ee/services'; -import { OWNER, ADMIN, MEMBER, ACCEPTED, INVITED, TOKEN_EMAIL_ORG_INVITATION } from '../../variables'; -import { getSiteURL, getJwtSignupLifetime, getJwtSignupSecret, getSmtpConfigured } from '../../config'; -import { validateUserEmail } from '../../validation'; +import { Types } from "mongoose"; +import { Request, Response } from "express"; +import { MembershipOrg, Organization, User } from "../../models"; +import { deleteMembershipOrg as deleteMemberFromOrg } from "../../helpers/membershipOrg"; +import { createToken } from "../../helpers/auth"; +import { updateSubscriptionOrgQuantity } from "../../helpers/organization"; +import { sendMail } from "../../helpers/nodemailer"; +import { TokenService } from "../../services"; +import { EELicenseService } from "../../ee/services"; +import { + ACCEPTED, + ADMIN, + INVITED, + MEMBER, + OWNER, + TOKEN_EMAIL_ORG_INVITATION +} from "../../variables"; +import { + getJwtSignupLifetime, + getJwtSignupSecret, + getSiteURL, + getSmtpConfigured +} from "../../config"; +import { validateUserEmail } from "../../validation"; /** * Delete organization membership with id [membershipOrgId] from organization @@ -17,18 +29,16 @@ import { validateUserEmail } from '../../validation'; * @param res * @returns */ -export const deleteMembershipOrg = async (req: Request, res: Response) => { +export const deleteMembershipOrg = async (req: Request, _res: Response) => { const { membershipOrgId } = req.params; // check if organization membership to delete exists const membershipOrgToDelete = await MembershipOrg.findOne({ _id: membershipOrgId - }).populate('user'); + }).populate("user"); if (!membershipOrgToDelete) { - throw new Error( - "Failed to delete organization membership that doesn't exist" - ); + throw new Error("Failed to delete organization membership that doesn't exist"); } // check if user is a member and admin of the organization @@ -39,16 +49,16 @@ export const deleteMembershipOrg = async (req: Request, res: Response) => { }); if (!membershipOrg) { - throw new Error('Failed to validate organization membership'); + throw new Error("Failed to validate organization membership"); } if (membershipOrg.role !== OWNER && membershipOrg.role !== ADMIN) { // user is not an admin member of the organization - throw new Error('Insufficient role for deleting organization membership'); + throw new Error("Insufficient role for deleting organization membership"); } // delete organization membership - const deletedMembershipOrg = await deleteMemberFromOrg({ + await deleteMemberFromOrg({ membershipOrgId: membershipOrgToDelete._id.toString() }); @@ -56,7 +66,7 @@ export const deleteMembershipOrg = async (req: Request, res: Response) => { organizationId: membershipOrg.organization.toString() }); - return membershipOrgToDelete; + return membershipOrgToDelete; }; /** @@ -66,14 +76,14 @@ export const deleteMembershipOrg = async (req: Request, res: Response) => { * @returns */ export const changeMembershipOrgRole = async (req: Request, res: Response) => { - // change role for (target) organization membership with id - // [membershipOrgId] + // change role for (target) organization membership with id + // [membershipOrgId] - let membershipToChangeRole; + let membershipToChangeRole; - return res.status(200).send({ - membershipOrg: membershipToChangeRole - }); + return res.status(200).send({ + membershipOrg: membershipToChangeRole + }); }; /** @@ -84,7 +94,7 @@ export const changeMembershipOrgRole = async (req: Request, res: Response) => { * @returns */ export const inviteUserToOrganization = async (req: Request, res: Response) => { - let invitee, inviteeMembershipOrg, completeInviteLink; + let inviteeMembershipOrg, completeInviteLink; const { organizationId, inviteeEmail } = req.body; const host = req.headers.host; const siteUrl = `${req.protocol}://${host}`; @@ -96,25 +106,26 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { }); if (!membershipOrg) { - throw new Error('Failed to validate organization membership'); + throw new Error("Failed to validate organization membership"); } - + const plan = await EELicenseService.getPlan(organizationId); - + if (plan.memberLimit !== null) { // case: limit imposed on number of members allowed - + if (plan.membersUsed >= plan.memberLimit) { // case: number of members used exceeds the number of members allowed return res.status(400).send({ - message: 'Failed to invite member due to member limit reached. Upgrade plan to invite more members.' + message: + "Failed to invite member due to member limit reached. Upgrade plan to invite more members." }); } } - invitee = await User.findOne({ + const invitee = await User.findOne({ email: inviteeEmail - }).select('+publicKey'); + }).select("+publicKey"); if (invitee) { // case: invitee is an existing user @@ -125,13 +136,10 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { }); if (inviteeMembershipOrg && inviteeMembershipOrg.status === ACCEPTED) { - throw new Error( - 'Failed to invite an existing member of the organization' - ); + throw new Error("Failed to invite an existing member of the organization"); } if (!inviteeMembershipOrg) { - await new MembershipOrg({ user: invitee, inviteEmail: inviteeEmail, @@ -149,7 +157,7 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { if (!inviteeMembershipOrg) { // case: invitee has never been invited before - + // validate that email is not disposable validateUserEmail(inviteeEmail); @@ -165,7 +173,6 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { const organization = await Organization.findOne({ _id: organizationId }); if (organization) { - const token = await TokenService.createToken({ type: TOKEN_EMAIL_ORG_INVITATION, email: inviteeEmail, @@ -173,8 +180,8 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { }); await sendMail({ - template: 'organizationInvitation.handlebars', - subjectLine: 'Infisical organization invitation', + template: "organizationInvitation.handlebars", + subjectLine: "Infisical organization invitation", recipients: [inviteeEmail], substitutions: { inviterFirstName: req.user.firstName, @@ -183,21 +190,23 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { email: inviteeEmail, organizationId: organization._id.toString(), token, - callback_url: (await getSiteURL()) + '/signupinvite' + callback_url: (await getSiteURL()) + "/signupinvite" } }); if (!(await getSmtpConfigured())) { - completeInviteLink = `${siteUrl + '/signupinvite'}?token=${token}&to=${inviteeEmail}&organization_id=${organization._id}` + completeInviteLink = `${ + siteUrl + "/signupinvite" + }?token=${token}&to=${inviteeEmail}&organization_id=${organization._id}`; } } await updateSubscriptionOrgQuantity({ organizationId }); - return res.status(200).send({ - message: `Sent an invite link to ${req.body.inviteeEmail}`, - completeInviteLink - }); + return res.status(200).send({ + message: `Sent an invite link to ${req.body.inviteeEmail}`, + completeInviteLink + }); }; /** @@ -208,14 +217,10 @@ export const inviteUserToOrganization = async (req: Request, res: Response) => { * @returns */ export const verifyUserToOrganization = async (req: Request, res: Response) => { - let user; - const { - email, - organizationId, - code - } = req.body; + let user; + const { email, organizationId, code } = req.body; - user = await User.findOne({ email }).select('+publicKey'); + user = await User.findOne({ email }).select("+publicKey"); const membershipOrg = await MembershipOrg.findOne({ inviteEmail: email, @@ -223,8 +228,7 @@ export const verifyUserToOrganization = async (req: Request, res: Response) => { organization: new Types.ObjectId(organizationId) }); - if (!membershipOrg) - throw new Error('Failed to find any invitations for email'); + if (!membershipOrg) throw new Error("Failed to find any invitations for email"); await TokenService.validateToken({ type: TOKEN_EMAIL_ORG_INVITATION, @@ -238,14 +242,14 @@ export const verifyUserToOrganization = async (req: Request, res: Response) => { // membership can be approved and redirected to login/dashboard membershipOrg.status = ACCEPTED; await membershipOrg.save(); - + await updateSubscriptionOrgQuantity({ organizationId }); return res.status(200).send({ - message: 'Successfully verified email', - user, + message: "Successfully verified email", + user }); } @@ -265,9 +269,9 @@ export const verifyUserToOrganization = async (req: Request, res: Response) => { secret: await getJwtSignupSecret() }); - return res.status(200).send({ - message: 'Successfully verified email', - user, - token - }); + return res.status(200).send({ + message: "Successfully verified email", + user, + token + }); }; diff --git a/backend/src/controllers/v1/organizationController.ts b/backend/src/controllers/v1/organizationController.ts index f0c73d75c..304df8b43 100644 --- a/backend/src/controllers/v1/organizationController.ts +++ b/backend/src/controllers/v1/organizationController.ts @@ -1,28 +1,27 @@ -import { Request, Response } from 'express'; -import Stripe from 'stripe'; +import { Request, Response } from "express"; +import Stripe from "stripe"; import { + IncidentContactOrg, Membership, MembershipOrg, Organization, Workspace, - IncidentContactOrg -} from '../../models'; -import { createOrganization as create } from '../../helpers/organization'; -import { addMembershipsOrg } from '../../helpers/membershipOrg'; -import { OWNER, ACCEPTED } from '../../variables'; -import _ from 'lodash'; -import { getStripeSecretKey, getSiteURL } from '../../config'; +} from "../../models"; +import { createOrganization as create } from "../../helpers/organization"; +import { addMembershipsOrg } from "../../helpers/membershipOrg"; +import { ACCEPTED, OWNER } from "../../variables"; +import { getSiteURL, getStripeSecretKey } from "../../config"; export const getOrganizations = async (req: Request, res: Response) => { const organizations = ( await MembershipOrg.find({ user: req.user._id, - status: ACCEPTED - }).populate('organization') + status: ACCEPTED, + }).populate("organization") ).map((m) => m.organization); return res.status(200).send({ - organizations + organizations, }); }; @@ -37,24 +36,24 @@ export const createOrganization = async (req: Request, res: Response) => { const { organizationName } = req.body; if (organizationName.length < 1) { - throw new Error('Organization names must be at least 1-character long'); + throw new Error("Organization names must be at least 1-character long"); } // create organization and add user as member const organization = await create({ email: req.user.email, - name: organizationName + name: organizationName, }); await addMembershipsOrg({ userIds: [req.user._id.toString()], organizationId: organization._id.toString(), roles: [OWNER], - statuses: [ACCEPTED] + statuses: [ACCEPTED], }); return res.status(200).send({ - organization + organization, }); }; @@ -67,7 +66,7 @@ export const createOrganization = async (req: Request, res: Response) => { export const getOrganization = async (req: Request, res: Response) => { const organization = req.organization return res.status(200).send({ - organization + organization, }); }; @@ -81,11 +80,11 @@ export const getOrganizationMembers = async (req: Request, res: Response) => { const { organizationId } = req.params; const users = await MembershipOrg.find({ - organization: organizationId - }).populate('user', '+publicKey'); + organization: organizationId, + }).populate("user", "+publicKey"); return res.status(200).send({ - users + users, }); }; @@ -105,23 +104,23 @@ export const getOrganizationWorkspaces = async ( ( await Workspace.find( { - organization: organizationId + organization: organizationId, }, - '_id' + "_id" ) ).map((w) => w._id.toString()) ); const workspaces = ( await Membership.find({ - user: req.user._id - }).populate('workspace') + user: req.user._id, + }).populate("workspace") ) .filter((m) => workspacesSet.has(m.workspace._id.toString())) .map((m) => m.workspace); return res.status(200).send({ - workspaces + workspaces, }); }; @@ -137,19 +136,19 @@ export const changeOrganizationName = async (req: Request, res: Response) => { const organization = await Organization.findOneAndUpdate( { - _id: organizationId + _id: organizationId, }, { - name + name, }, { - new: true + new: true, } ); return res.status(200).send({ - message: 'Successfully changed organization name', - organization + message: "Successfully changed organization name", + organization, }); }; @@ -166,11 +165,11 @@ export const getOrganizationIncidentContacts = async ( const { organizationId } = req.params; const incidentContactsOrg = await IncidentContactOrg.find({ - organization: organizationId + organization: organizationId, }); return res.status(200).send({ - incidentContactsOrg + incidentContactsOrg, }); }; @@ -194,7 +193,7 @@ export const addOrganizationIncidentContact = async ( ); return res.status(200).send({ - incidentContactOrg + incidentContactOrg, }); }; @@ -213,12 +212,12 @@ export const deleteOrganizationIncidentContact = async ( const incidentContactOrg = await IncidentContactOrg.findOneAndDelete({ email, - organization: organizationId + organization: organizationId, }); return res.status(200).send({ - message: 'Successfully deleted organization incident contact', - incidentContactOrg + message: "Successfully deleted organization incident contact", + incidentContactOrg, }); }; @@ -235,28 +234,28 @@ export const createOrganizationPortalSession = async ( ) => { let session; const stripe = new Stripe(await getStripeSecretKey(), { - apiVersion: '2022-08-01' + apiVersion: "2022-08-01", }); // check if there is a payment method on file const paymentMethods = await stripe.paymentMethods.list({ customer: req.organization.customerId, - type: 'card' + type: "card", }); if (paymentMethods.data.length < 1) { // case: no payment method on file session = await stripe.checkout.sessions.create({ customer: req.organization.customerId, - mode: 'setup', - payment_method_types: ['card'], - success_url: (await getSiteURL()) + '/dashboard', - cancel_url: (await getSiteURL()) + '/dashboard' + mode: "setup", + payment_method_types: ["card"], + success_url: (await getSiteURL()) + "/dashboard", + cancel_url: (await getSiteURL()) + "/dashboard", }); } else { session = await stripe.billingPortal.sessions.create({ customer: req.organization.customerId, - return_url: (await getSiteURL()) + '/dashboard' + return_url: (await getSiteURL()) + "/dashboard", }); } @@ -274,15 +273,15 @@ export const getOrganizationSubscriptions = async ( res: Response ) => { const stripe = new Stripe(await getStripeSecretKey(), { - apiVersion: '2022-08-01' + apiVersion: "2022-08-01", }); const subscriptions = await stripe.subscriptions.list({ - customer: req.organization.customerId + customer: req.organization.customerId, }); return res.status(200).send({ - subscriptions + subscriptions, }); }; @@ -302,16 +301,16 @@ export const getOrganizationMembersAndTheirWorkspaces = async ( const workspacesSet = ( await Workspace.find( { - organization: organizationId + organization: organizationId, }, - '_id' + "_id" ) ).map((w) => w._id.toString()); const memberships = ( await Membership.find({ - workspace: { $in: workspacesSet } - }).populate('workspace') + workspace: { $in: workspacesSet }, + }).populate("workspace") ); const userToWorkspaceIds: any = {}; diff --git a/backend/src/controllers/v1/passwordController.ts b/backend/src/controllers/v1/passwordController.ts index da1903eba..5a2699225 100644 --- a/backend/src/controllers/v1/passwordController.ts +++ b/backend/src/controllers/v1/passwordController.ts @@ -1,85 +1,77 @@ -import { Request, Response } from 'express'; +import { Request, Response } from "express"; // eslint-disable-next-line @typescript-eslint/no-var-requires -const jsrp = require('jsrp'); -import * as bigintConversion from 'bigint-conversion'; -import { User, BackupPrivateKey, LoginSRPDetail } from '../../models'; +const jsrp = require("jsrp"); +import * as bigintConversion from "bigint-conversion"; +import { BackupPrivateKey, LoginSRPDetail, User } from "../../models"; +import { clearTokens, createToken, sendMail } from "../../helpers"; +import { TokenService } from "../../services"; +import { AUTH_MODE_JWT, TOKEN_EMAIL_PASSWORD_RESET } from "../../variables"; +import { BadRequestError } from "../../utils/errors"; import { - createToken, - sendMail, - clearTokens -} from '../../helpers'; -import { TokenService } from '../../services'; -import { - TOKEN_EMAIL_PASSWORD_RESET, - AUTH_MODE_JWT -} from '../../variables'; -import { BadRequestError } from '../../utils/errors'; -import { - getSiteURL, - getJwtSignupLifetime, - getJwtSignupSecret, - getHttpsEnabled -} from '../../config'; + getHttpsEnabled, + getJwtSignupLifetime, + getJwtSignupSecret, + getSiteURL +} from "../../config"; /** - * Password reset step 1: Send email verification link to email [email] + * Password reset step 1: Send email verification link to email [email] * for account recovery. * @param req * @param res * @returns */ export const emailPasswordReset = async (req: Request, res: Response) => { - let email: string; - email = req.body.email; + const email: string = req.body.email; - const user = await User.findOne({ email }).select('+publicKey'); + const user = await User.findOne({ email }).select("+publicKey"); if (!user || !user?.publicKey) { // case: user has already completed account return res.status(200).send({ - message:"If an account exists with this email, a password reset link has been sent" + message: "If an account exists with this email, a password reset link has been sent" }); } - + const token = await TokenService.createToken({ type: TOKEN_EMAIL_PASSWORD_RESET, email }); - + await sendMail({ - template: 'passwordReset.handlebars', - subjectLine: 'Infisical password reset', + template: "passwordReset.handlebars", + subjectLine: "Infisical password reset", recipients: [email], substitutions: { email, token, - callback_url: (await getSiteURL()) + '/password-reset' + callback_url: (await getSiteURL()) + "/password-reset" } }); - return res.status(200).send({ - message:"If an account exists with this email, a password reset link has been sent" - }); -} + return res.status(200).send({ + message: "If an account exists with this email, a password reset link has been sent" + }); +}; /** * Password reset step 2: Verify email verification link sent to email [email] - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const emailPasswordResetVerify = async (req: Request, res: Response) => { const { email, code } = req.body; - const user = await User.findOne({ email }).select('+publicKey'); + const user = await User.findOne({ email }).select("+publicKey"); if (!user || !user?.publicKey) { - // case: user doesn't exist with email [email] or + // case: user doesn't exist with email [email] or // hasn't even completed their account return res.status(403).send({ - error: 'Failed email verification for password reset' + error: "Failed email verification for password reset" }); } - + await TokenService.validateToken({ type: TOKEN_EMAIL_PASSWORD_RESET, email, @@ -95,12 +87,12 @@ export const emailPasswordResetVerify = async (req: Request, res: Response) => { secret: await getJwtSignupSecret() }); - return res.status(200).send({ - message: 'Successfully verified email', - user, - token - }); -} + return res.status(200).send({ + message: "Successfully verified email", + user, + token + }); +}; /** * Return [salt] and [serverPublicKey] as part of step 1 of SRP protocol @@ -109,14 +101,14 @@ export const emailPasswordResetVerify = async (req: Request, res: Response) => { * @returns */ export const srp1 = async (req: Request, res: Response) => { - // return salt, serverPublicKey as part of first step of SRP protocol - + // return salt, serverPublicKey as part of first step of SRP protocol + const { clientPublicKey } = req.body; const user = await User.findOne({ email: req.user.email - }).select('+salt +verifier'); + }).select("+salt +verifier"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); const server = new jsrp.server(); server.init( @@ -128,11 +120,15 @@ export const srp1 = async (req: Request, res: Response) => { // generate server-side public key const serverPublicKey = server.getPublicKey(); - await LoginSRPDetail.findOneAndReplace({ email: req.user.email }, { - email: req.user.email, - clientPublicKey: clientPublicKey, - serverBInt: bigintConversion.bigintToBuf(server.bInt), - }, { upsert: true, returnNewDocument: false }) + await LoginSRPDetail.findOneAndReplace( + { email: req.user.email }, + { + email: req.user.email, + clientPublicKey: clientPublicKey, + serverBInt: bigintConversion.bigintToBuf(server.bInt) + }, + { upsert: true, returnNewDocument: false } + ); return res.status(200).send({ serverPublicKey, @@ -140,8 +136,7 @@ export const srp1 = async (req: Request, res: Response) => { }); } ); -} - +}; /** * Change account SRP authentication information for user @@ -152,8 +147,8 @@ export const srp1 = async (req: Request, res: Response) => { * @returns */ export const changePassword = async (req: Request, res: Response) => { - const { - clientProof, + const { + clientProof, protectedKey, protectedKeyIV, protectedKeyTag, @@ -166,14 +161,18 @@ export const changePassword = async (req: Request, res: Response) => { const user = await User.findOne({ email: req.user.email - }).select('+salt +verifier'); + }).select("+salt +verifier"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); - const loginSRPDetailFromDB = await LoginSRPDetail.findOneAndDelete({ email: req.user.email }) + const loginSRPDetailFromDB = await LoginSRPDetail.findOneAndDelete({ email: req.user.email }); if (!loginSRPDetailFromDB) { - return BadRequestError(Error("It looks like some details from the first login are not found. Please try login one again")) + return BadRequestError( + Error( + "It looks like some details from the first login are not found. Please try login one again" + ) + ); } const server = new jsrp.server(); @@ -207,27 +206,31 @@ export const changePassword = async (req: Request, res: Response) => { new: true } ); - - if (req.authData.authMode === AUTH_MODE_JWT && req.authData.authPayload instanceof User && req.authData.tokenVersionId) { - await clearTokens(req.authData.tokenVersionId) + + if ( + req.authData.authMode === AUTH_MODE_JWT && + req.authData.authPayload instanceof User && + req.authData.tokenVersionId + ) { + await clearTokens(req.authData.tokenVersionId); } // clear httpOnly cookie - - res.cookie('jid', '', { + + res.cookie("jid", "", { httpOnly: true, - path: '/', - sameSite: 'strict', + path: "/", + sameSite: "strict", secure: (await getHttpsEnabled()) as boolean }); return res.status(200).send({ - message: 'Successfully changed password' + message: "Successfully changed password" }); } return res.status(400).send({ - error: 'Failed to change password. Try again?' + error: "Failed to change password. Try again?" }); } ); @@ -240,22 +243,25 @@ export const changePassword = async (req: Request, res: Response) => { * @returns */ export const createBackupPrivateKey = async (req: Request, res: Response) => { - // create/change backup private key - // requires verifying [clientProof] as part of second step of SRP protocol - // as initiated in /srp1 + // create/change backup private key + // requires verifying [clientProof] as part of second step of SRP protocol + // as initiated in /srp1 - const { clientProof, encryptedPrivateKey, iv, tag, salt, verifier } = - req.body; + const { clientProof, encryptedPrivateKey, iv, tag, salt, verifier } = req.body; const user = await User.findOne({ email: req.user.email - }).select('+salt +verifier'); + }).select("+salt +verifier"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); - const loginSRPDetailFromDB = await LoginSRPDetail.findOneAndDelete({ email: req.user.email }) + const loginSRPDetailFromDB = await LoginSRPDetail.findOneAndDelete({ email: req.user.email }); if (!loginSRPDetailFromDB) { - return BadRequestError(Error("It looks like some details from the first login are not found. Please try login one again")) + return BadRequestError( + Error( + "It looks like some details from the first login are not found. Please try login one again" + ) + ); } const server = new jsrp.server(); @@ -266,9 +272,7 @@ export const createBackupPrivateKey = async (req: Request, res: Response) => { b: loginSRPDetailFromDB.serverBInt }, async () => { - server.setClientPublicKey( - loginSRPDetailFromDB.clientPublicKey - ); + server.setClientPublicKey(loginSRPDetailFromDB.clientPublicKey); // compare server and client shared keys if (server.checkClientProof(clientProof)) { @@ -285,17 +289,17 @@ export const createBackupPrivateKey = async (req: Request, res: Response) => { verifier }, { upsert: true, new: true } - ).select('+user, encryptedPrivateKey'); + ).select("+user, encryptedPrivateKey"); // issue tokens return res.status(200).send({ - message: 'Successfully updated backup private key', + message: "Successfully updated backup private key", backupPrivateKey }); } return res.status(400).send({ - message: 'Failed to update backup private key' + message: "Failed to update backup private key" }); } ); @@ -303,21 +307,21 @@ export const createBackupPrivateKey = async (req: Request, res: Response) => { /** * Return backup private key for user - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const getBackupPrivateKey = async (req: Request, res: Response) => { const backupPrivateKey = await BackupPrivateKey.findOne({ user: req.user._id - }).select('+encryptedPrivateKey +iv +tag'); + }).select("+encryptedPrivateKey +iv +tag"); - if (!backupPrivateKey) throw new Error('Failed to find backup private key'); + if (!backupPrivateKey) throw new Error("Failed to find backup private key"); - return res.status(200).send({ - backupPrivateKey - }); -} + return res.status(200).send({ + backupPrivateKey + }); +}; export const resetPassword = async (req: Request, res: Response) => { const { @@ -328,7 +332,7 @@ export const resetPassword = async (req: Request, res: Response) => { encryptedPrivateKeyIV, encryptedPrivateKeyTag, salt, - verifier, + verifier } = req.body; await User.findByIdAndUpdate( @@ -337,7 +341,7 @@ export const resetPassword = async (req: Request, res: Response) => { encryptionVersion: 2, protectedKey, protectedKeyIV, - protectedKeyTag, + protectedKeyTag, encryptedPrivateKey, iv: encryptedPrivateKeyIV, tag: encryptedPrivateKeyTag, @@ -349,7 +353,7 @@ export const resetPassword = async (req: Request, res: Response) => { } ); - return res.status(200).send({ - message: 'Successfully reset password' - }); -} + return res.status(200).send({ + message: "Successfully reset password" + }); +}; diff --git a/backend/src/controllers/v1/secretController.ts b/backend/src/controllers/v1/secretController.ts index 074e29454..bcb00d209 100644 --- a/backend/src/controllers/v1/secretController.ts +++ b/backend/src/controllers/v1/secretController.ts @@ -1,30 +1,30 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; -import { Key, Secret } from '../../models'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; +import { Key } from "../../models"; import { - v1PushSecrets as push, - pullSecrets as pull, - reformatPullSecrets -} from '../../helpers/secret'; -import { pushKeys } from '../../helpers/key'; -import { eventPushSecrets } from '../../events'; -import { EventService } from '../../services'; -import { TelemetryService } from '../../services'; + pullSecrets as pull, + v1PushSecrets as push, + reformatPullSecrets +} from "../../helpers/secret"; +import { pushKeys } from "../../helpers/key"; +import { eventPushSecrets } from "../../events"; +import { EventService } from "../../services"; +import { TelemetryService } from "../../services"; interface PushSecret { - ciphertextKey: string; - ivKey: string; - tagKey: string; - hashKey: string; - ciphertextValue: string; - ivValue: string; - tagValue: string; - hashValue: string; - ciphertextComment: string; - ivComment: string; - tagComment: string; - hashComment: string; - type: 'shared' | 'personal'; + ciphertextKey: string; + ivKey: string; + tagKey: string; + hashKey: string; + ciphertextValue: string; + ivValue: string; + tagValue: string; + hashValue: string; + ciphertextComment: string; + ivComment: string; + tagComment: string; + hashComment: string; + type: "shared" | "personal"; } /** @@ -35,7 +35,7 @@ interface PushSecret { * @returns */ export const pushSecrets = async (req: Request, res: Response) => { - // upload (encrypted) secrets to workspace with id [workspaceId] + // upload (encrypted) secrets to workspace with id [workspaceId] const postHogClient = await TelemetryService.getPostHogClient(); let { secrets }: { secrets: PushSecret[] } = req.body; const { keys, environment, channel } = req.body; @@ -44,13 +44,11 @@ export const pushSecrets = async (req: Request, res: Response) => { // validate environment const workspaceEnvs = req.membership.workspace.environments; if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { - throw new Error('Failed to validate environment'); + throw new Error("Failed to validate environment"); } // sanitize secrets - secrets = secrets.filter( - (s: PushSecret) => s.ciphertextKey !== '' && s.ciphertextValue !== '' - ); + secrets = secrets.filter((s: PushSecret) => s.ciphertextKey !== "" && s.ciphertextValue !== ""); await push({ userId: req.user._id, @@ -64,17 +62,16 @@ export const pushSecrets = async (req: Request, res: Response) => { workspaceId, keys }); - - + if (postHogClient) { postHogClient.capture({ - event: 'secrets pushed', + event: "secrets pushed", distinctId: req.user.email, properties: { numberOfSecrets: secrets.length, environment, workspaceId, - channel: channel ? channel : 'cli' + channel: channel ? channel : "cli" } }); } @@ -87,9 +84,9 @@ export const pushSecrets = async (req: Request, res: Response) => { }) }); - return res.status(200).send({ - message: 'Successfully uploaded workspace secrets' - }); + return res.status(200).send({ + message: "Successfully uploaded workspace secrets" + }); }; /** @@ -100,57 +97,56 @@ export const pushSecrets = async (req: Request, res: Response) => { * @returns */ export const pullSecrets = async (req: Request, res: Response) => { - let secrets; - let key; + let secrets; - const postHogClient = await TelemetryService.getPostHogClient(); - const environment: string = req.query.environment as string; - const channel: string = req.query.channel as string; - const { workspaceId } = req.params; + const postHogClient = await TelemetryService.getPostHogClient(); + const environment: string = req.query.environment as string; + const channel: string = req.query.channel as string; + const { workspaceId } = req.params; - // validate environment - const workspaceEnvs = req.membership.workspace.environments; - if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { - throw new Error('Failed to validate environment'); - } + // validate environment + const workspaceEnvs = req.membership.workspace.environments; + if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { + throw new Error("Failed to validate environment"); + } - secrets = await pull({ - userId: req.user._id.toString(), - workspaceId, - environment, - channel: channel ? channel : 'cli', - ipAddress: req.realIP - }); + secrets = await pull({ + userId: req.user._id.toString(), + workspaceId, + environment, + channel: channel ? channel : "cli", + ipAddress: req.realIP + }); - key = await Key.findOne({ - workspace: workspaceId, - receiver: req.user._id - }) - .sort({ createdAt: -1 }) - .populate('sender', '+publicKey'); - - if (channel !== 'cli') { - secrets = reformatPullSecrets({ secrets }); - } + const key = await Key.findOne({ + workspace: workspaceId, + receiver: req.user._id + }) + .sort({ createdAt: -1 }) + .populate("sender", "+publicKey"); - if (postHogClient) { - // capture secrets pushed event in production - postHogClient.capture({ - distinctId: req.user.email, - event: 'secrets pulled', - properties: { - numberOfSecrets: secrets.length, - environment, - workspaceId, - channel: channel ? channel : 'cli' - } - }); - } + if (channel !== "cli") { + secrets = reformatPullSecrets({ secrets }); + } - return res.status(200).send({ - secrets, - key - }); + if (postHogClient) { + // capture secrets pushed event in production + postHogClient.capture({ + distinctId: req.user.email, + event: "secrets pulled", + properties: { + numberOfSecrets: secrets.length, + environment, + workspaceId, + channel: channel ? channel : "cli" + } + }); + } + + return res.status(200).send({ + secrets, + key + }); }; /** @@ -162,54 +158,51 @@ export const pullSecrets = async (req: Request, res: Response) => { * @returns */ export const pullSecretsServiceToken = async (req: Request, res: Response) => { - let secrets; - let key; + const postHogClient = await TelemetryService.getPostHogClient(); + const environment: string = req.query.environment as string; + const channel: string = req.query.channel as string; + const { workspaceId } = req.params; - const postHogClient = await TelemetryService.getPostHogClient(); - const environment: string = req.query.environment as string; - const channel: string = req.query.channel as string; - const { workspaceId } = req.params; + // validate environment + const workspaceEnvs = req.membership.workspace.environments; + if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { + throw new Error("Failed to validate environment"); + } - // validate environment - const workspaceEnvs = req.membership.workspace.environments; - if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { - throw new Error('Failed to validate environment'); - } + const secrets = await pull({ + userId: req.serviceToken.user._id.toString(), + workspaceId, + environment, + channel: "cli", + ipAddress: req.realIP + }); - secrets = await pull({ - userId: req.serviceToken.user._id.toString(), - workspaceId, - environment, - channel: 'cli', - ipAddress: req.realIP - }); + const key = { + encryptedKey: req.serviceToken.encryptedKey, + nonce: req.serviceToken.nonce, + sender: { + publicKey: req.serviceToken.publicKey + }, + receiver: req.serviceToken.user, + workspace: req.serviceToken.workspace + }; - key = { - encryptedKey: req.serviceToken.encryptedKey, - nonce: req.serviceToken.nonce, - sender: { - publicKey: req.serviceToken.publicKey - }, - receiver: req.serviceToken.user, - workspace: req.serviceToken.workspace - }; + if (postHogClient) { + // capture secrets pulled event in production + postHogClient.capture({ + distinctId: req.serviceToken.user.email, + event: "secrets pulled", + properties: { + numberOfSecrets: secrets.length, + environment, + workspaceId, + channel: channel ? channel : "cli" + } + }); + } - if (postHogClient) { - // capture secrets pulled event in production - postHogClient.capture({ - distinctId: req.serviceToken.user.email, - event: 'secrets pulled', - properties: { - numberOfSecrets: secrets.length, - environment, - workspaceId, - channel: channel ? channel : 'cli' - } - }); - } - - return res.status(200).send({ - secrets: reformatPullSecrets({ secrets }), - key - }); + return res.status(200).send({ + secrets: reformatPullSecrets({ secrets }), + key + }); }; diff --git a/backend/src/controllers/v1/secretsFolderController.ts b/backend/src/controllers/v1/secretsFolderController.ts index c1ce7ffc4..6b31fd111 100644 --- a/backend/src/controllers/v1/secretsFolderController.ts +++ b/backend/src/controllers/v1/secretsFolderController.ts @@ -5,13 +5,13 @@ import { BadRequestError } from "../../utils/errors"; import { appendFolder, deleteFolderById, - getAllFolderIds, - searchByFolderIdWithDir, - searchByFolderId, - validateFolderName, generateFolderId, - getParentFromFolderId, + getAllFolderIds, getFolderByPath, + getParentFromFolderId, + searchByFolderId, + searchByFolderIdWithDir, + validateFolderName, } from "../../services/FolderService"; import { ADMIN, MEMBER } from "../../variables"; import { validateMembership } from "../../helpers/membership"; diff --git a/backend/src/controllers/v1/serviceTokenController.ts b/backend/src/controllers/v1/serviceTokenController.ts index 86a87f372..c1b753a90 100644 --- a/backend/src/controllers/v1/serviceTokenController.ts +++ b/backend/src/controllers/v1/serviceTokenController.ts @@ -1,7 +1,7 @@ -import { Request, Response } from 'express'; -import { ServiceToken } from '../../models'; -import { createToken } from '../../helpers/auth'; -import { getJwtServiceSecret } from '../../config'; +import { Request, Response } from "express"; +import { ServiceToken } from "../../models"; +import { createToken } from "../../helpers/auth"; +import { getJwtServiceSecret } from "../../config"; /** * Return service token on request @@ -11,7 +11,7 @@ import { getJwtServiceSecret } from '../../config'; */ export const getServiceToken = async (req: Request, res: Response) => { return res.status(200).send({ - serviceToken: req.serviceToken + serviceToken: req.serviceToken, }); }; @@ -31,13 +31,13 @@ export const createServiceToken = async (req: Request, res: Response) => { expiresIn, publicKey, encryptedKey, - nonce + nonce, } = req.body; // validate environment const workspaceEnvs = req.membership.workspace.environments; if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { - throw new Error('Failed to validate environment'); + throw new Error("Failed to validate environment"); } // compute access token expiration date @@ -52,24 +52,24 @@ export const createServiceToken = async (req: Request, res: Response) => { expiresAt, publicKey, encryptedKey, - nonce + nonce, }).save(); token = createToken({ payload: { serviceTokenId: serviceToken._id.toString(), - workspaceId + workspaceId, }, expiresIn: expiresIn, - secret: await getJwtServiceSecret() + secret: await getJwtServiceSecret(), }); } catch (err) { return res.status(400).send({ - message: 'Failed to create service token' + message: "Failed to create service token", }); } return res.status(200).send({ - token + token, }); }; \ No newline at end of file diff --git a/backend/src/controllers/v1/signupController.ts b/backend/src/controllers/v1/signupController.ts index 19bf94e61..b545320a6 100644 --- a/backend/src/controllers/v1/signupController.ts +++ b/backend/src/controllers/v1/signupController.ts @@ -1,13 +1,15 @@ -import { Request, Response } from 'express'; -import { User } from '../../models'; +import { Request, Response } from "express"; +import { User } from "../../models"; +import { checkEmailVerification, sendEmailVerification } from "../../helpers/signup"; +import { createToken } from "../../helpers/auth"; +import { BadRequestError } from "../../utils/errors"; import { - sendEmailVerification, - checkEmailVerification, -} from '../../helpers/signup'; -import { createToken } from '../../helpers/auth'; -import { BadRequestError } from '../../utils/errors'; -import { getInviteOnlySignup, getJwtSignupLifetime, getJwtSignupSecret, getSmtpConfigured } from '../../config'; -import { validateUserEmail } from '../../validation'; + getInviteOnlySignup, + getJwtSignupLifetime, + getJwtSignupSecret, + getSmtpConfigured +} from "../../config"; +import { validateUserEmail } from "../../validation"; /** * Signup step 1: Initialize account for user under email [email] and send a verification code @@ -17,27 +19,26 @@ import { validateUserEmail } from '../../validation'; * @returns */ export const beginEmailSignup = async (req: Request, res: Response) => { - let email: string; - email = req.body.email; - + const email: string = req.body.email; + // validate that email is not disposable validateUserEmail(email); - const user = await User.findOne({ email }).select('+publicKey'); + const user = await User.findOne({ email }).select("+publicKey"); if (user && user?.publicKey) { // case: user has already completed account return res.status(403).send({ - error: 'Failed to send email verification code for complete account' + error: "Failed to send email verification code for complete account" }); } // send send verification email await sendEmailVerification({ email }); - return res.status(200).send({ - message: `Sent an email verification code to ${email}` - }); + return res.status(200).send({ + message: `Sent an email verification code to ${email}` + }); }; /** @@ -48,23 +49,25 @@ export const beginEmailSignup = async (req: Request, res: Response) => { * @returns */ export const verifyEmailSignup = async (req: Request, res: Response) => { - let user, token; + let user; const { email, code } = req.body; // initialize user account - user = await User.findOne({ email }).select('+publicKey'); + user = await User.findOne({ email }).select("+publicKey"); if (user && user?.publicKey) { // case: user has already completed account return res.status(403).send({ - error: 'Failed email verification for complete user' + error: "Failed email verification for complete user" }); } if (await getInviteOnlySignup()) { // Only one user can create an account without being invited. The rest need to be invited in order to make an account - const userCount = await User.countDocuments({}) + const userCount = await User.countDocuments({}); if (userCount != 0) { - throw BadRequestError({ message: "New user sign ups are not allowed at this time. You must be invited to sign up." }) + throw BadRequestError({ + message: "New user sign ups are not allowed at this time. You must be invited to sign up." + }); } } @@ -83,7 +86,7 @@ export const verifyEmailSignup = async (req: Request, res: Response) => { } // generate temporary signup token - token = createToken({ + const token = createToken({ payload: { userId: user._id.toString() }, @@ -91,9 +94,9 @@ export const verifyEmailSignup = async (req: Request, res: Response) => { secret: await getJwtSignupSecret() }); - return res.status(200).send({ - message: 'Successfuly verified email', - user, - token - }); + return res.status(200).send({ + message: "Successfuly verified email", + user, + token + }); }; diff --git a/backend/src/controllers/v1/stripeController.ts b/backend/src/controllers/v1/stripeController.ts index 4aa7adce9..2acb52abd 100644 --- a/backend/src/controllers/v1/stripeController.ts +++ b/backend/src/controllers/v1/stripeController.ts @@ -1,6 +1,6 @@ -import { Request, Response } from 'express'; -import Stripe from 'stripe'; -import { getStripeSecretKey, getStripeWebhookSecret } from '../../config'; +import { Request, Response } from "express"; +import Stripe from "stripe"; +import { getStripeSecretKey, getStripeWebhookSecret } from "../../config"; /** * Handle service provisioning/un-provisioning via Stripe @@ -11,10 +11,10 @@ import { getStripeSecretKey, getStripeWebhookSecret } from '../../config'; export const handleWebhook = async (req: Request, res: Response) => { // check request for valid stripe signature const stripe = new Stripe(await getStripeSecretKey(), { - apiVersion: '2022-08-01' + apiVersion: "2022-08-01", }); - const sig = req.headers['stripe-signature'] as string; + const sig = req.headers["stripe-signature"] as string; const event = stripe.webhooks.constructEvent( req.body, sig, @@ -22,7 +22,7 @@ export const handleWebhook = async (req: Request, res: Response) => { ); switch (event.type) { - case '': + case "": break; default: } diff --git a/backend/src/controllers/v1/userActionController.ts b/backend/src/controllers/v1/userActionController.ts index cba78c7b8..9e7354ce1 100644 --- a/backend/src/controllers/v1/userActionController.ts +++ b/backend/src/controllers/v1/userActionController.ts @@ -1,5 +1,5 @@ -import { Request, Response } from 'express'; -import { UserAction } from '../../models'; +import { Request, Response } from "express"; +import { UserAction } from "../../models"; /** * Add user action [action] @@ -15,18 +15,18 @@ export const addUserAction = async (req: Request, res: Response) => { const userAction = await UserAction.findOneAndUpdate( { user: req.user._id, - action + action, }, { user: req.user._id, action }, { new: true, - upsert: true + upsert: true, } ); return res.status(200).send({ - message: 'Successfully recorded user action', - userAction + message: "Successfully recorded user action", + userAction, }); }; @@ -42,10 +42,10 @@ export const getUserAction = async (req: Request, res: Response) => { const userAction = await UserAction.findOne({ user: req.user._id, - action + action, }); return res.status(200).send({ - userAction + userAction, }); }; diff --git a/backend/src/controllers/v1/userController.ts b/backend/src/controllers/v1/userController.ts index d194c6217..398b24f08 100644 --- a/backend/src/controllers/v1/userController.ts +++ b/backend/src/controllers/v1/userController.ts @@ -1,4 +1,4 @@ -import { Request, Response } from 'express'; +import { Request, Response } from "express"; /** * Return user on request @@ -8,6 +8,6 @@ import { Request, Response } from 'express'; */ export const getUser = async (req: Request, res: Response) => { return res.status(200).send({ - user: req.user + user: req.user, }); }; diff --git a/backend/src/controllers/v1/workspaceController.ts b/backend/src/controllers/v1/workspaceController.ts index 2faac0d68..f26078ace 100644 --- a/backend/src/controllers/v1/workspaceController.ts +++ b/backend/src/controllers/v1/workspaceController.ts @@ -1,19 +1,18 @@ import { Request, Response } from "express"; import { - Workspace, - Membership, - MembershipOrg, + IUser, Integration, IntegrationAuth, - IUser, + Membership, + MembershipOrg, ServiceToken, - ServiceTokenData, + Workspace, } from "../../models"; import { createWorkspace as create, deleteWorkspace as deleteWork, } from "../../helpers/workspace"; -import { EELicenseService } from '../../ee/services'; +import { EELicenseService } from "../../ee/services"; import { addMemberships } from "../../helpers/membership"; import { ADMIN } from "../../variables"; @@ -123,7 +122,7 @@ export const createWorkspace = async (req: Request, res: Response) => { if (plan.workspacesUsed >= plan.workspaceLimit) { // case: number of workspaces used exceeds the number of workspaces allowed return res.status(400).send({ - message: 'Failed to create workspace due to plan limit reached. Upgrade plan to add more workspaces.' + message: "Failed to create workspace due to plan limit reached. Upgrade plan to add more workspaces.", }); } } diff --git a/backend/src/controllers/v2/apiKeyDataController.ts b/backend/src/controllers/v2/apiKeyDataController.ts index 73fd1afbf..ee19b0e4c 100644 --- a/backend/src/controllers/v2/apiKeyDataController.ts +++ b/backend/src/controllers/v2/apiKeyDataController.ts @@ -1,74 +1,72 @@ -import { Request, Response } from 'express'; -import crypto from 'crypto'; -import bcrypt from 'bcrypt'; -import { - APIKeyData -} from '../../models'; -import { getSaltRounds } from '../../config'; +import { Request, Response } from "express"; +import crypto from "crypto"; +import bcrypt from "bcrypt"; +import { APIKeyData } from "../../models"; +import { getSaltRounds } from "../../config"; /** * Return API key data for user with id [req.user_id] * @param req - * @param res - * @returns + * @param res + * @returns */ export const getAPIKeyData = async (req: Request, res: Response) => { - const apiKeyData = await APIKeyData.find({ - user: req.user._id - }); - - return res.status(200).send({ - apiKeyData - }); -} + const apiKeyData = await APIKeyData.find({ + user: req.user._id, + }); + + return res.status(200).send({ + apiKeyData, + }); +}; /** * Create new API key data for user with id [req.user._id] - * @param req - * @param res + * @param req + * @param res */ export const createAPIKeyData = async (req: Request, res: Response) => { - const { name, expiresIn } = req.body; - - const secret = crypto.randomBytes(16).toString('hex'); - const secretHash = await bcrypt.hash(secret, await getSaltRounds()); - - const expiresAt = new Date(); - expiresAt.setSeconds(expiresAt.getSeconds() + expiresIn); - - let apiKeyData = await new APIKeyData({ - name, - lastUsed: new Date(), - expiresAt, - user: req.user._id, - secretHash - }).save(); - - // return api key data without sensitive data - // FIX: fix this any - apiKeyData = await APIKeyData.findById(apiKeyData._id) as any - - if (!apiKeyData) throw new Error('Failed to find API key data'); - - const apiKey = `ak.${apiKeyData._id.toString()}.${secret}`; - - return res.status(200).send({ - apiKey, - apiKeyData - }); -} + const { name, expiresIn } = req.body; + + const secret = crypto.randomBytes(16).toString("hex"); + const secretHash = await bcrypt.hash(secret, await getSaltRounds()); + + const expiresAt = new Date(); + expiresAt.setSeconds(expiresAt.getSeconds() + expiresIn); + + let apiKeyData = await new APIKeyData({ + name, + lastUsed: new Date(), + expiresAt, + user: req.user._id, + secretHash, + }).save(); + + // return api key data without sensitive data + // FIX: fix this any + apiKeyData = (await APIKeyData.findById(apiKeyData._id)) as any; + + if (!apiKeyData) throw new Error("Failed to find API key data"); + + const apiKey = `ak.${apiKeyData._id.toString()}.${secret}`; + + return res.status(200).send({ + apiKey, + apiKeyData, + }); +}; /** * Delete API key data with id [apiKeyDataId]. - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const deleteAPIKeyData = async (req: Request, res: Response) => { - const { apiKeyDataId } = req.params; - const apiKeyData = await APIKeyData.findByIdAndDelete(apiKeyDataId); - - return res.status(200).send({ - apiKeyData - }); -} + const { apiKeyDataId } = req.params; + const apiKeyData = await APIKeyData.findByIdAndDelete(apiKeyDataId); + + return res.status(200).send({ + apiKeyData, + }); +}; diff --git a/backend/src/controllers/v2/authController.ts b/backend/src/controllers/v2/authController.ts index 0718ec8dc..282c15288 100644 --- a/backend/src/controllers/v2/authController.ts +++ b/backend/src/controllers/v2/authController.ts @@ -1,27 +1,27 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -import { Request, Response } from 'express'; -import jwt from 'jsonwebtoken'; -import * as bigintConversion from 'bigint-conversion'; -const jsrp = require('jsrp'); -import { User, LoginSRPDetail } from '../../models'; -import { issueAuthTokens, createToken } from '../../helpers/auth'; -import { checkUserDevice } from '../../helpers/user'; -import { sendMail } from '../../helpers/nodemailer'; -import { TokenService } from '../../services'; -import { EELogService } from '../../ee/services'; -import { BadRequestError, InternalServerError } from '../../utils/errors'; +import { Request, Response } from "express"; +import jwt from "jsonwebtoken"; +import * as bigintConversion from "bigint-conversion"; +const jsrp = require("jsrp"); +import { LoginSRPDetail, User } from "../../models"; +import { createToken, issueAuthTokens } from "../../helpers/auth"; +import { checkUserDevice } from "../../helpers/user"; +import { sendMail } from "../../helpers/nodemailer"; +import { TokenService } from "../../services"; +import { EELogService } from "../../ee/services"; +import { BadRequestError, InternalServerError } from "../../utils/errors"; import { + ACTION_LOGIN, TOKEN_EMAIL_MFA, - ACTION_LOGIN -} from '../../variables'; -import { getChannelFromUserAgent } from '../../utils/posthog'; // TODO: move this +} from "../../variables"; +import { getChannelFromUserAgent } from "../../utils/posthog"; // TODO: move this import { + getHttpsEnabled, getJwtMfaLifetime, getJwtMfaSecret, - getHttpsEnabled -} from '../../config'; +} from "../../config"; -declare module 'jsonwebtoken' { +declare module "jsonwebtoken" { export interface UserIDJwtPayload extends jwt.JwtPayload { userId: string; } @@ -36,20 +36,20 @@ declare module 'jsonwebtoken' { export const login1 = async (req: Request, res: Response) => { const { email, - clientPublicKey + clientPublicKey, }: { email: string; clientPublicKey: string } = req.body; const user = await User.findOne({ - email - }).select('+salt +verifier'); + email, + }).select("+salt +verifier"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); const server = new jsrp.server(); server.init( { salt: user.salt, - verifier: user.verifier + verifier: user.verifier, }, async () => { // generate server-side public key @@ -63,7 +63,7 @@ export const login1 = async (req: Request, res: Response) => { return res.status(200).send({ serverPublicKey, - salt: user.salt + salt: user.salt, }); } ); @@ -78,14 +78,14 @@ export const login1 = async (req: Request, res: Response) => { * @returns */ export const login2 = async (req: Request, res: Response) => { - if (!req.headers['user-agent']) throw InternalServerError({ message: 'User-Agent header is required' }); + if (!req.headers["user-agent"]) throw InternalServerError({ message: "User-Agent header is required" }); const { email, clientProof } = req.body; const user = await User.findOne({ - email - }).select('+salt +verifier +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag +publicKey +encryptedPrivateKey +iv +tag +devices'); + email, + }).select("+salt +verifier +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag +publicKey +encryptedPrivateKey +iv +tag +devices"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); const loginSRPDetail = await LoginSRPDetail.findOneAndDelete({ email: email }) @@ -98,7 +98,7 @@ export const login2 = async (req: Request, res: Response) => { { salt: user.salt, verifier: user.verifier, - b: loginSRPDetail.serverBInt + b: loginSRPDetail.serverBInt, }, async () => { server.setClientPublicKey(loginSRPDetail.clientPublicKey); @@ -111,52 +111,52 @@ export const login2 = async (req: Request, res: Response) => { // generate temporary MFA token const token = createToken({ payload: { - userId: user._id.toString() + userId: user._id.toString(), }, expiresIn: await getJwtMfaLifetime(), - secret: await getJwtMfaSecret() + secret: await getJwtMfaSecret(), }); const code = await TokenService.createToken({ type: TOKEN_EMAIL_MFA, - email + email, }); // send MFA code [code] to [email] await sendMail({ - template: 'emailMfa.handlebars', - subjectLine: 'Infisical MFA code', + template: "emailMfa.handlebars", + subjectLine: "Infisical MFA code", recipients: [email], substitutions: { - code - } + code, + }, }); return res.status(200).send({ mfaEnabled: true, - token + token, }); } await checkUserDevice({ user, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); // issue tokens const tokens = await issueAuthTokens({ userId: user._id, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); // store (refresh) token in httpOnly cookie - res.cookie('jid', tokens.refreshToken, { + res.cookie("jid", tokens.refreshToken, { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: await getHttpsEnabled() + path: "/", + sameSite: "strict", + secure: await getHttpsEnabled(), }); // case: user does not have MFA enabled @@ -182,7 +182,7 @@ export const login2 = async (req: Request, res: Response) => { publicKey: user.publicKey, encryptedPrivateKey: user.encryptedPrivateKey, iv: user.iv, - tag: user.tag + tag: user.tag, } if ( @@ -197,21 +197,21 @@ export const login2 = async (req: Request, res: Response) => { const loginAction = await EELogService.createAction({ name: ACTION_LOGIN, - userId: user._id + userId: user._id, }); loginAction && await EELogService.createLog({ userId: user._id, actions: [loginAction], - channel: getChannelFromUserAgent(req.headers['user-agent']), - ipAddress: req.ip + channel: getChannelFromUserAgent(req.headers["user-agent"]), + ipAddress: req.ip, }); return res.status(200).send(response); } return res.status(400).send({ - message: 'Failed to authenticate. Try again?' + message: "Failed to authenticate. Try again?", }); } ); @@ -227,21 +227,21 @@ export const sendMfaToken = async (req: Request, res: Response) => { const code = await TokenService.createToken({ type: TOKEN_EMAIL_MFA, - email + email, }); // send MFA code [code] to [email] await sendMail({ - template: 'emailMfa.handlebars', - subjectLine: 'Infisical MFA code', + template: "emailMfa.handlebars", + subjectLine: "Infisical MFA code", recipients: [email], substitutions: { - code - } + code, + }, }); return res.status(200).send({ - message: 'Successfully sent new MFA code' + message: "Successfully sent new MFA code", }); } @@ -257,36 +257,36 @@ export const verifyMfaToken = async (req: Request, res: Response) => { await TokenService.validateToken({ type: TOKEN_EMAIL_MFA, email, - token: mfaToken + token: mfaToken, }); const user = await User.findOne({ - email - }).select('+salt +verifier +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag +publicKey +encryptedPrivateKey +iv +tag +devices'); + email, + }).select("+salt +verifier +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag +publicKey +encryptedPrivateKey +iv +tag +devices"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); await LoginSRPDetail.deleteOne({ userId: user.id }) await checkUserDevice({ user, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); // issue tokens const tokens = await issueAuthTokens({ userId: user._id, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); // store (refresh) token in httpOnly cookie - res.cookie('jid', tokens.refreshToken, { + res.cookie("jid", tokens.refreshToken, { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: await getHttpsEnabled() + path: "/", + sameSite: "strict", + secure: await getHttpsEnabled(), }); interface VerifyMfaTokenRes { @@ -319,7 +319,7 @@ export const verifyMfaToken = async (req: Request, res: Response) => { publicKey: user.publicKey as string, encryptedPrivateKey: user.encryptedPrivateKey as string, iv: user.iv as string, - tag: user.tag as string + tag: user.tag as string, } if (user?.protectedKey && user?.protectedKeyIV && user?.protectedKeyTag) { @@ -330,14 +330,14 @@ export const verifyMfaToken = async (req: Request, res: Response) => { const loginAction = await EELogService.createAction({ name: ACTION_LOGIN, - userId: user._id + userId: user._id, }); loginAction && await EELogService.createLog({ userId: user._id, actions: [loginAction], - channel: getChannelFromUserAgent(req.headers['user-agent']), - ipAddress: req.realIP + channel: getChannelFromUserAgent(req.headers["user-agent"]), + ipAddress: req.realIP, }); return res.status(200).send(resObj); diff --git a/backend/src/controllers/v2/environmentController.ts b/backend/src/controllers/v2/environmentController.ts index bf6d7d3c5..e1381db54 100644 --- a/backend/src/controllers/v2/environmentController.ts +++ b/backend/src/controllers/v2/environmentController.ts @@ -1,17 +1,17 @@ -import { Request, Response } from 'express'; +import { Request, Response } from "express"; import { + Integration, + Membership, Secret, ServiceToken, - Workspace, - Integration, ServiceTokenData, - Membership, -} from '../../models'; -import { SecretVersion } from '../../ee/models'; -import { EELicenseService } from '../../ee/services'; -import { BadRequestError, WorkspaceNotFoundError } from '../../utils/errors'; -import _ from 'lodash'; -import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from '../../variables'; + Workspace, +} from "../../models"; +import { SecretVersion } from "../../ee/models"; +import { EELicenseService } from "../../ee/services"; +import { BadRequestError, WorkspaceNotFoundError } from "../../utils/errors"; +import _ from "lodash"; +import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from "../../variables"; /** * Create new workspace environment named [environmentName] under workspace with id @@ -38,7 +38,7 @@ export const createWorkspaceEnvironment = async ( // case: number of environments used exceeds the number of environments allowed return res.status(400).send({ - message: 'Failed to create environment due to environment limit reached. Upgrade plan to create more environments.' + message: "Failed to create environment due to environment limit reached. Upgrade plan to create more environments.", }); } } @@ -49,7 +49,7 @@ export const createWorkspaceEnvironment = async ( ({ name, slug }) => slug === environmentSlug || environmentName === name ) ) { - throw new Error('Failed to create workspace environment'); + throw new Error("Failed to create workspace environment"); } workspace?.environments.push({ @@ -61,7 +61,7 @@ export const createWorkspaceEnvironment = async ( await EELicenseService.refreshPlan(workspace.organization.toString(), workspaceId); return res.status(200).send({ - message: 'Successfully created new environment', + message: "Successfully created new environment", workspace: workspaceId, environment: { name: environmentName, @@ -85,13 +85,13 @@ export const renameWorkspaceEnvironment = async ( const { environmentName, environmentSlug, oldEnvironmentSlug } = req.body; // user should pass both new slug and env name if (!environmentSlug || !environmentName) { - throw new Error('Invalid environment given.'); + throw new Error("Invalid environment given."); } // atomic update the env to avoid conflict const workspace = await Workspace.findById(workspaceId).exec(); if (!workspace) { - throw new Error('Failed to create workspace environment'); + throw new Error("Failed to create workspace environment"); } const isEnvExist = workspace.environments.some( @@ -100,14 +100,14 @@ export const renameWorkspaceEnvironment = async ( (name === environmentName || slug === environmentSlug) ); if (isEnvExist) { - throw new Error('Invalid environment given'); + throw new Error("Invalid environment given"); } const envIndex = workspace?.environments.findIndex( ({ slug }) => slug === oldEnvironmentSlug ); if (envIndex === -1) { - throw new Error('Invalid environment given'); + throw new Error("Invalid environment given"); } workspace.environments[envIndex].name = environmentName; @@ -137,7 +137,7 @@ export const renameWorkspaceEnvironment = async ( await Membership.updateMany( { workspace: workspaceId, - "deniedPermissions.environmentSlug": oldEnvironmentSlug + "deniedPermissions.environmentSlug": oldEnvironmentSlug, }, { $set: { "deniedPermissions.$[element].environmentSlug": environmentSlug } }, { arrayFilters: [{ "element.environmentSlug": oldEnvironmentSlug }] } @@ -145,7 +145,7 @@ export const renameWorkspaceEnvironment = async ( return res.status(200).send({ - message: 'Successfully update environment', + message: "Successfully update environment", workspace: workspaceId, environment: { name: environmentName, @@ -169,14 +169,14 @@ export const deleteWorkspaceEnvironment = async ( // atomic update the env to avoid conflict const workspace = await Workspace.findById(workspaceId).exec(); if (!workspace) { - throw new Error('Failed to create workspace environment'); + throw new Error("Failed to create workspace environment"); } const envIndex = workspace?.environments.findIndex( ({ slug }) => slug === environmentSlug ); if (envIndex === -1) { - throw new Error('Invalid environment given'); + throw new Error("Invalid environment given"); } workspace.environments.splice(envIndex, 1); @@ -211,7 +211,7 @@ export const deleteWorkspaceEnvironment = async ( await EELicenseService.refreshPlan(workspace.organization.toString(), workspaceId); return res.status(200).send({ - message: 'Successfully deleted environment', + message: "Successfully deleted environment", workspace: workspaceId, environment: environmentSlug, }); @@ -225,7 +225,7 @@ export const getAllAccessibleEnvironmentsOfWorkspace = async ( const { workspaceId } = req.params; const workspacesUserIsMemberOf = await Membership.findOne({ workspace: workspaceId, - user: req.user + user: req.user, }) if (!workspacesUserIsMemberOf) { @@ -249,7 +249,7 @@ export const getAllAccessibleEnvironmentsOfWorkspace = async ( name: environment.name, slug: environment.slug, isWriteDenied: isWriteBlocked, - isReadDenied: isReadBlocked + isReadDenied: isReadBlocked, }) } }) diff --git a/backend/src/controllers/v2/index.ts b/backend/src/controllers/v2/index.ts index db78fa503..5496097db 100644 --- a/backend/src/controllers/v2/index.ts +++ b/backend/src/controllers/v2/index.ts @@ -1,15 +1,15 @@ -import * as authController from './authController'; -import * as signupController from './signupController'; -import * as usersController from './usersController'; -import * as organizationsController from './organizationsController'; -import * as workspaceController from './workspaceController'; -import * as serviceTokenDataController from './serviceTokenDataController'; -import * as apiKeyDataController from './apiKeyDataController'; -import * as secretController from './secretController'; -import * as secretsController from './secretsController'; -import * as serviceAccountsController from './serviceAccountsController'; -import * as environmentController from './environmentController'; -import * as tagController from './tagController'; +import * as authController from "./authController"; +import * as signupController from "./signupController"; +import * as usersController from "./usersController"; +import * as organizationsController from "./organizationsController"; +import * as workspaceController from "./workspaceController"; +import * as serviceTokenDataController from "./serviceTokenDataController"; +import * as apiKeyDataController from "./apiKeyDataController"; +import * as secretController from "./secretController"; +import * as secretsController from "./secretsController"; +import * as serviceAccountsController from "./serviceAccountsController"; +import * as environmentController from "./environmentController"; +import * as tagController from "./tagController"; export { authController, @@ -23,5 +23,5 @@ export { secretsController, serviceAccountsController, environmentController, - tagController + tagController, } diff --git a/backend/src/controllers/v2/organizationsController.ts b/backend/src/controllers/v2/organizationsController.ts index 3bfd9085e..301cac9d0 100644 --- a/backend/src/controllers/v2/organizationsController.ts +++ b/backend/src/controllers/v2/organizationsController.ts @@ -1,13 +1,13 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; import { - MembershipOrg, Membership, + MembershipOrg, + ServiceAccount, Workspace, - ServiceAccount -} from '../../models'; -import { deleteMembershipOrg } from '../../helpers/membershipOrg'; -import { updateSubscriptionOrgQuantity } from '../../helpers/organization'; +} from "../../models"; +import { deleteMembershipOrg } from "../../helpers/membershipOrg"; +import { updateSubscriptionOrgQuantity } from "../../helpers/organization"; /** * Return memberships for organization with id [organizationId] @@ -51,11 +51,11 @@ export const getOrganizationMemberships = async (req: Request, res: Response) => const { organizationId } = req.params; const memberships = await MembershipOrg.find({ - organization: organizationId - }).populate('user', '+publicKey'); + organization: organizationId, + }).populate("user", "+publicKey"); return res.status(200).send({ - memberships + memberships, }); } @@ -124,14 +124,14 @@ export const updateOrganizationMembership = async (req: Request, res: Response) const membership = await MembershipOrg.findByIdAndUpdate( membershipId, { - role + role, }, { - new: true + new: true, } ); return res.status(200).send({ - membership + membership, }); } @@ -182,15 +182,15 @@ export const deleteOrganizationMembership = async (req: Request, res: Response) // delete organization membership const membership = await deleteMembershipOrg({ - membershipOrgId: membershipId + membershipOrgId: membershipId, }); await updateSubscriptionOrgQuantity({ - organizationId: membership.organization.toString() + organizationId: membership.organization.toString(), }); return res.status(200).send({ - membership + membership, }); } @@ -240,23 +240,23 @@ export const getOrganizationWorkspaces = async (req: Request, res: Response) => ( await Workspace.find( { - organization: organizationId + organization: organizationId, }, - '_id' + "_id" ) ).map((w) => w._id.toString()) ); const workspaces = ( await Membership.find({ - user: req.user._id - }).populate('workspace') + user: req.user._id, + }).populate("workspace") ) .filter((m) => workspacesSet.has(m.workspace._id.toString())) .map((m) => m.workspace); return res.status(200).send({ - workspaces + workspaces, }); } @@ -269,10 +269,10 @@ export const getOrganizationServiceAccounts = async (req: Request, res: Response const { organizationId } = req.params; const serviceAccounts = await ServiceAccount.find({ - organization: new Types.ObjectId(organizationId) + organization: new Types.ObjectId(organizationId), }); return res.status(200).send({ - serviceAccounts + serviceAccounts, }); } diff --git a/backend/src/controllers/v2/secretController.ts b/backend/src/controllers/v2/secretController.ts index fecba43d6..1b6038f0e 100644 --- a/backend/src/controllers/v2/secretController.ts +++ b/backend/src/controllers/v2/secretController.ts @@ -2,24 +2,39 @@ import to from "await-to-js"; import { Request, Response } from "express"; import mongoose, { Types } from "mongoose"; import Secret, { ISecret } from "../../models/secret"; -import { CreateSecretRequestBody, ModifySecretRequestBody, SanitizedSecretForCreate, SanitizedSecretModify } from "../../types/secret"; +import { + CreateSecretRequestBody, + ModifySecretRequestBody, + SanitizedSecretForCreate, + SanitizedSecretModify +} from "../../types/secret"; const { ValidationError } = mongoose.Error; -import { BadRequestError, InternalServerError, UnauthorizedRequestError, ValidationError as RouteValidationError } from '../../utils/errors'; -import { AnyBulkWriteOperation } from 'mongodb'; -import { ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, SECRET_PERSONAL, SECRET_SHARED } from "../../variables"; -import { TelemetryService } from '../../services'; +import { + BadRequestError, + InternalServerError, + ValidationError as RouteValidationError, + UnauthorizedRequestError +} from "../../utils/errors"; +import { AnyBulkWriteOperation } from "mongodb"; +import { + ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_UTF8, + SECRET_PERSONAL, + SECRET_SHARED +} from "../../variables"; +import { TelemetryService } from "../../services"; import { User } from "../../models"; -import { AccountNotFoundError } from '../../utils/errors'; +import { AccountNotFoundError } from "../../utils/errors"; /** * Create secret for workspace with id [workspaceId] and environment [environment] - * @param req - * @param res + * @param req + * @param res */ export const createSecret = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); const secretToCreate: CreateSecretRequestBody = req.body.secret; - const { workspaceId, environment } = req.params + const { workspaceId, environment } = req.params; const sanitizedSecret: SanitizedSecretForCreate = { secretKeyCiphertext: secretToCreate.secretKeyCiphertext, secretKeyIV: secretToCreate.secretKeyIV, @@ -39,45 +54,44 @@ export const createSecret = async (req: Request, res: Response) => { user: new Types.ObjectId(req.user._id), algorithm: ALGORITHM_AES_256_GCM, keyEncoding: ENCODING_SCHEME_UTF8 - } + }; - - const [error, secret] = await to(Secret.create(sanitizedSecret).then()) + const [error, secret] = await to(Secret.create(sanitizedSecret).then()); if (error instanceof ValidationError) { - throw RouteValidationError({ message: error.message, stack: error.stack }) + throw RouteValidationError({ message: error.message, stack: error.stack }); } if (postHogClient) { postHogClient.capture({ - event: 'secrets added', + event: "secrets added", distinctId: req.user.email, properties: { numberOfSecrets: 1, workspaceId, environment, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] + channel: req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli", + userAgent: req.headers?.["user-agent"] } }); } res.status(200).send({ secret - }) -} + }); +}; /** * Create many secrets for workspace wiht id [workspaceId] and environment [environment] - * @param req - * @param res + * @param req + * @param res */ export const createSecrets = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); const secretsToCreate: CreateSecretRequestBody[] = req.body.secrets; - const { workspaceId, environment } = req.params - const sanitizedSecretesToCreate: SanitizedSecretForCreate[] = [] + const { workspaceId, environment } = req.params; + const sanitizedSecretesToCreate: SanitizedSecretForCreate[] = []; - secretsToCreate.forEach(rawSecret => { + secretsToCreate.forEach((rawSecret) => { const safeUpdateFields: SanitizedSecretForCreate = { secretKeyCiphertext: rawSecret.secretKeyCiphertext, secretKeyIV: rawSecret.secretKeyIV, @@ -97,140 +111,163 @@ export const createSecrets = async (req: Request, res: Response) => { user: new Types.ObjectId(req.user._id), algorithm: ALGORITHM_AES_256_GCM, keyEncoding: ENCODING_SCHEME_UTF8 - } + }; - sanitizedSecretesToCreate.push(safeUpdateFields) - }) + sanitizedSecretesToCreate.push(safeUpdateFields); + }); - const [bulkCreateError, secrets] = await to(Secret.insertMany(sanitizedSecretesToCreate).then()) + const [bulkCreateError, secrets] = await to(Secret.insertMany(sanitizedSecretesToCreate).then()); if (bulkCreateError) { if (bulkCreateError instanceof ValidationError) { - throw RouteValidationError({ message: bulkCreateError.message, stack: bulkCreateError.stack }) + throw RouteValidationError({ + message: bulkCreateError.message, + stack: bulkCreateError.stack + }); } - throw InternalServerError({ message: "Unable to process your batch create request. Please try again", stack: bulkCreateError.stack }) + throw InternalServerError({ + message: "Unable to process your batch create request. Please try again", + stack: bulkCreateError.stack + }); } if (postHogClient) { postHogClient.capture({ - event: 'secrets added', + event: "secrets added", distinctId: req.user.email, properties: { numberOfSecrets: (secretsToCreate ?? []).length, workspaceId, environment, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] + channel: req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli", + userAgent: req.headers?.["user-agent"] } }); } res.status(200).send({ secrets - }) -} + }); +}; /** * Delete secrets in workspace with id [workspaceId] and environment [environment] - * @param req - * @param res + * @param req + * @param res */ export const deleteSecrets = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); - const { workspaceId, environmentName } = req.params - const secretIdsToDelete: string[] = req.body.secretIds + const { workspaceId, environmentName } = req.params; + const secretIdsToDelete: string[] = req.body.secretIds; - const [secretIdsUserCanDeleteError, secretIdsUserCanDelete] = await to(Secret.find({ workspace: workspaceId, environment: environmentName }, { _id: 1 }).then()) + const [secretIdsUserCanDeleteError, secretIdsUserCanDelete] = await to( + Secret.find({ workspace: workspaceId, environment: environmentName }, { _id: 1 }).then() + ); if (secretIdsUserCanDeleteError) { - throw InternalServerError({ message: `Unable to fetch secrets you own: [error=${secretIdsUserCanDeleteError.message}]` }) + throw InternalServerError({ + message: `Unable to fetch secrets you own: [error=${secretIdsUserCanDeleteError.message}]` + }); } - const secretsUserCanDeleteSet: Set = new Set(secretIdsUserCanDelete.map(objectId => objectId._id.toString())); - const deleteOperationsToPerform: AnyBulkWriteOperation[] = [] + const secretsUserCanDeleteSet: Set = new Set( + secretIdsUserCanDelete.map((objectId) => objectId._id.toString()) + ); + const deleteOperationsToPerform: AnyBulkWriteOperation[] = []; let numSecretsDeleted = 0; - secretIdsToDelete.forEach(secretIdToDelete => { + secretIdsToDelete.forEach((secretIdToDelete) => { if (secretsUserCanDeleteSet.has(secretIdToDelete)) { - const deleteOperation = { deleteOne: { filter: { _id: new Types.ObjectId(secretIdToDelete) } } } - deleteOperationsToPerform.push(deleteOperation) + const deleteOperation = { + deleteOne: { filter: { _id: new Types.ObjectId(secretIdToDelete) } } + }; + deleteOperationsToPerform.push(deleteOperation); numSecretsDeleted++; } else { - throw RouteValidationError({ message: "You cannot delete secrets that you do not have access to" }) + throw RouteValidationError({ + message: "You cannot delete secrets that you do not have access to" + }); } - }) + }); - const [bulkDeleteError, bulkDelete] = await to(Secret.bulkWrite(deleteOperationsToPerform).then()) + const [bulkDeleteError] = await to(Secret.bulkWrite(deleteOperationsToPerform).then()); if (bulkDeleteError) { if (bulkDeleteError instanceof ValidationError) { - throw RouteValidationError({ message: "Unable to apply modifications, please try again", stack: bulkDeleteError.stack }) + throw RouteValidationError({ + message: "Unable to apply modifications, please try again", + stack: bulkDeleteError.stack + }); } - throw InternalServerError() + throw InternalServerError(); } if (postHogClient) { postHogClient.capture({ - event: 'secrets deleted', + event: "secrets deleted", distinctId: req.user.email, properties: { numberOfSecrets: numSecretsDeleted, environment: environmentName, workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] + channel: req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli", + userAgent: req.headers?.["user-agent"] } }); } - res.status(200).send() -} + res.status(200).send(); +}; /** * Delete secret with id [secretId] - * @param req + * @param req * @param res */ export const deleteSecret = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); - await Secret.findByIdAndDelete(req._secret._id) + await Secret.findByIdAndDelete(req._secret._id); if (postHogClient) { postHogClient.capture({ - event: 'secrets deleted', + event: "secrets deleted", distinctId: req.user.email, properties: { numberOfSecrets: 1, workspaceId: req._secret.workspace.toString(), environment: req._secret.environment, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] + channel: req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli", + userAgent: req.headers?.["user-agent"] } }); } res.status(200).send({ secret: req._secret - }) -} + }); +}; /** * Update secrets for workspace with id [workspaceId] and environment [environment] - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const updateSecrets = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); - const { workspaceId, environmentName } = req.params + const { workspaceId, environmentName } = req.params; const secretsModificationsRequested: ModifySecretRequestBody[] = req.body.secrets; - const [secretIdsUserCanModifyError, secretIdsUserCanModify] = await to(Secret.find({ workspace: workspaceId, environment: environmentName }, { _id: 1 }).then()) + const [secretIdsUserCanModifyError, secretIdsUserCanModify] = await to( + Secret.find({ workspace: workspaceId, environment: environmentName }, { _id: 1 }).then() + ); if (secretIdsUserCanModifyError) { - throw InternalServerError({ message: "Unable to fetch secrets you own" }) + throw InternalServerError({ message: "Unable to fetch secrets you own" }); } - const secretsUserCanModifySet: Set = new Set(secretIdsUserCanModify.map(objectId => objectId._id.toString())); - const updateOperationsToPerform: any = [] + const secretsUserCanModifySet: Set = new Set( + secretIdsUserCanModify.map((objectId) => objectId._id.toString()) + ); + const updateOperationsToPerform: any = []; - secretsModificationsRequested.forEach(userModifiedSecret => { + secretsModificationsRequested.forEach((userModifiedSecret) => { if (secretsUserCanModifySet.has(userModifiedSecret._id.toString())) { const sanitizedSecret: SanitizedSecretModify = { secretKeyCiphertext: userModifiedSecret.secretKeyCiphertext, @@ -244,56 +281,70 @@ export const updateSecrets = async (req: Request, res: Response) => { secretCommentCiphertext: userModifiedSecret.secretCommentCiphertext, secretCommentIV: userModifiedSecret.secretCommentIV, secretCommentTag: userModifiedSecret.secretCommentTag, - secretCommentHash: userModifiedSecret.secretCommentHash, - } + secretCommentHash: userModifiedSecret.secretCommentHash + }; - const updateOperation = { updateOne: { filter: { _id: userModifiedSecret._id, workspace: workspaceId }, update: { $inc: { version: 1 }, $set: sanitizedSecret } } } - updateOperationsToPerform.push(updateOperation) + const updateOperation = { + updateOne: { + filter: { _id: userModifiedSecret._id, workspace: workspaceId }, + update: { $inc: { version: 1 }, $set: sanitizedSecret } + } + }; + updateOperationsToPerform.push(updateOperation); } else { - throw UnauthorizedRequestError({ message: "You do not have permission to modify one or more of the requested secrets" }) + throw UnauthorizedRequestError({ + message: "You do not have permission to modify one or more of the requested secrets" + }); } - }) + }); - const [bulkModificationInfoError, bulkModificationInfo] = await to(Secret.bulkWrite(updateOperationsToPerform).then()) + const [bulkModificationInfoError, bulkModificationInfo] = await to( + Secret.bulkWrite(updateOperationsToPerform).then() + ); if (bulkModificationInfoError) { if (bulkModificationInfoError instanceof ValidationError) { - throw RouteValidationError({ message: "Unable to apply modifications, please try again", stack: bulkModificationInfoError.stack }) + throw RouteValidationError({ + message: "Unable to apply modifications, please try again", + stack: bulkModificationInfoError.stack + }); } - throw InternalServerError() + throw InternalServerError(); } if (postHogClient) { postHogClient.capture({ - event: 'secrets modified', + event: "secrets modified", distinctId: req.user.email, properties: { numberOfSecrets: (secretsModificationsRequested ?? []).length, environment: environmentName, workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] + channel: req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli", + userAgent: req.headers?.["user-agent"] } }); } - return res.status(200).send() -} + return res.status(200).send(); +}; /** * Update a secret within workspace with id [workspaceId] and environment [environment] - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const updateSecret = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); - const { workspaceId, environmentName } = req.params + const { workspaceId, environmentName } = req.params; const secretModificationsRequested: ModifySecretRequestBody = req.body.secret; - const [secretIdUserCanModifyError, secretIdUserCanModify] = await to(Secret.findOne({ workspace: workspaceId, environment: environmentName }, { _id: 1 }).then()) + const [secretIdUserCanModifyError, secretIdUserCanModify] = await to( + Secret.findOne({ workspace: workspaceId, environment: environmentName }, { _id: 1 }).then() + ); if (secretIdUserCanModifyError && !secretIdUserCanModify) { - throw BadRequestError() + throw BadRequestError(); } const sanitizedSecret: SanitizedSecretModify = { @@ -308,45 +359,53 @@ export const updateSecret = async (req: Request, res: Response) => { secretCommentCiphertext: secretModificationsRequested.secretCommentCiphertext, secretCommentIV: secretModificationsRequested.secretCommentIV, secretCommentTag: secretModificationsRequested.secretCommentTag, - secretCommentHash: secretModificationsRequested.secretCommentHash, - } + secretCommentHash: secretModificationsRequested.secretCommentHash + }; - const [error, singleModificationUpdate] = await to(Secret.updateOne({ _id: secretModificationsRequested._id, workspace: workspaceId }, { $inc: { version: 1 }, $set: sanitizedSecret }).then()) + const [error, singleModificationUpdate] = await to( + Secret.updateOne( + { _id: secretModificationsRequested._id, workspace: workspaceId }, + { $inc: { version: 1 }, $set: sanitizedSecret } + ).then() + ); if (error instanceof ValidationError) { - throw RouteValidationError({ message: "Unable to apply modifications, please try again", stack: error.stack }) + throw RouteValidationError({ + message: "Unable to apply modifications, please try again", + stack: error.stack + }); } if (postHogClient) { postHogClient.capture({ - event: 'secrets modified', + event: "secrets modified", distinctId: req.user.email, properties: { numberOfSecrets: 1, environment: environmentName, workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] + channel: req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli", + userAgent: req.headers?.["user-agent"] } }); } - return res.status(200).send(singleModificationUpdate) -} + return res.status(200).send(singleModificationUpdate); +}; /** * Return secrets for workspace with id [workspaceId], environment [environment] and user * with id [req.user._id] - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const getSecrets = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); const { environment } = req.query; const { workspaceId } = req.params; - let userId: Types.ObjectId | undefined = undefined // used for getting personal secrets for user - let userEmail: string | undefined = undefined // used for posthog + let userId: Types.ObjectId | undefined = undefined; // used for getting personal secrets for user + let userEmail: string | undefined = undefined; // used for posthog if (req.user) { userId = req.user._id; userEmail = req.user.email; @@ -354,47 +413,50 @@ export const getSecrets = async (req: Request, res: Response) => { if (req.serviceTokenData) { userId = req.serviceTokenData.user; - - const user = await User.findById(req.serviceTokenData.user, 'email'); + + const user = await User.findById(req.serviceTokenData.user, "email"); if (!user) throw AccountNotFoundError(); userEmail = user.email; } - const [err, secrets] = await to(Secret.find( - { + const [err, secrets] = await to( + Secret.find({ workspace: workspaceId, environment, $or: [{ user: userId }, { user: { $exists: false } }], type: { $in: [SECRET_SHARED, SECRET_PERSONAL] } - } - ).then()) + }).then() + ); if (err) { - throw RouteValidationError({ message: "Failed to get secrets, please try again", stack: err.stack }) + throw RouteValidationError({ + message: "Failed to get secrets, please try again", + stack: err.stack + }); } if (postHogClient) { postHogClient.capture({ - event: 'secrets pulled', + event: "secrets pulled", distinctId: userEmail, properties: { numberOfSecrets: (secrets ?? []).length, environment, workspaceId, - channel: req.headers?.['user-agent']?.toLowerCase().includes('mozilla') ? 'web' : 'cli', - userAgent: req.headers?.['user-agent'] + channel: req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli", + userAgent: req.headers?.["user-agent"] } }); } - return res.json(secrets) -} + return res.json(secrets); +}; /** * Return secret with id [secretId] - * @param req - * @param res - * @returns + * @param req + * @param res + * @returns */ export const getSecret = async (req: Request, res: Response) => { // if (postHogClient) { @@ -414,4 +476,4 @@ export const getSecret = async (req: Request, res: Response) => { return res.status(200).send({ secret: req._secret }); -} \ No newline at end of file +}; diff --git a/backend/src/controllers/v2/secretsController.ts b/backend/src/controllers/v2/secretsController.ts index 256ad248c..a760a511c 100644 --- a/backend/src/controllers/v2/secretsController.ts +++ b/backend/src/controllers/v2/secretsController.ts @@ -3,19 +3,19 @@ import { Request, Response } from "express"; import { ISecret, Secret, ServiceTokenData } from "../../models"; import { IAction, SecretVersion } from "../../ee/models"; import { - SECRET_PERSONAL, ACTION_ADD_SECRETS, + ACTION_DELETE_SECRETS, ACTION_READ_SECRETS, ACTION_UPDATE_SECRETS, - ACTION_DELETE_SECRETS, ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, + SECRET_PERSONAL, } from "../../variables"; import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors"; import { EventService } from "../../services"; import { eventPushSecrets } from "../../events"; -import { EESecretService, EELogService } from "../../ee/services"; -import { TelemetryService, SecretService } from "../../services"; +import { EELogService, EESecretService } from "../../ee/services"; +import { SecretService, TelemetryService } from "../../services"; import { getChannelFromUserAgent } from "../../utils/posthog"; import { PERMISSION_WRITE_SECRETS } from "../../variables"; import { @@ -25,7 +25,7 @@ import { } from "../../ee/helpers/checkMembershipPermissions"; import Tag from "../../models/tag"; import _ from "lodash"; -import { BatchSecretRequest, BatchSecret } from "../../types/secret"; +import { BatchSecret, BatchSecretRequest } from "../../types/secret"; import Folder from "../../models/folder"; import { getFolderByPath, diff --git a/backend/src/controllers/v2/serviceAccountsController.ts b/backend/src/controllers/v2/serviceAccountsController.ts index d0ec62e1b..0e655782a 100644 --- a/backend/src/controllers/v2/serviceAccountsController.ts +++ b/backend/src/controllers/v2/serviceAccountsController.ts @@ -1,18 +1,18 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; -import crypto from 'crypto'; -import bcrypt from 'bcrypt'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; +import crypto from "crypto"; +import bcrypt from "bcrypt"; import { ServiceAccount, ServiceAccountKey, ServiceAccountOrganizationPermission, - ServiceAccountWorkspacePermission -} from '../../models'; + ServiceAccountWorkspacePermission, +} from "../../models"; import { - CreateServiceAccountDto -} from '../../interfaces/serviceAccounts/dto'; -import { BadRequestError, ServiceAccountNotFoundError } from '../../utils/errors'; -import { getSaltRounds } from '../../config'; + CreateServiceAccountDto, +} from "../../interfaces/serviceAccounts/dto"; +import { BadRequestError, ServiceAccountNotFoundError } from "../../utils/errors"; +import { getSaltRounds } from "../../config"; /** * Return service account tied to the request (service account) client @@ -23,11 +23,11 @@ export const getCurrentServiceAccount = async (req: Request, res: Response) => { const serviceAccount = await ServiceAccount.findById(req.serviceAccount._id); if (!serviceAccount) { - throw ServiceAccountNotFoundError({ message: 'Failed to find service account' }); + throw ServiceAccountNotFoundError({ message: "Failed to find service account" }); } return res.status(200).send({ - serviceAccount + serviceAccount, }); } @@ -42,11 +42,11 @@ export const getServiceAccountById = async (req: Request, res: Response) => { const serviceAccount = await ServiceAccount.findById(serviceAccountId); if (!serviceAccount) { - throw ServiceAccountNotFoundError({ message: 'Failed to find service account' }); + throw ServiceAccountNotFoundError({ message: "Failed to find service account" }); } return res.status(200).send({ - serviceAccount + serviceAccount, }); } @@ -71,7 +71,7 @@ export const createServiceAccount = async (req: Request, res: Response) => { expiresAt.setSeconds(expiresAt.getSeconds() + expiresIn); } - const secret = crypto.randomBytes(16).toString('base64'); + const secret = crypto.randomBytes(16).toString("base64"); const secretHash = await bcrypt.hash(secret, await getSaltRounds()); // create service account @@ -82,7 +82,7 @@ export const createServiceAccount = async (req: Request, res: Response) => { publicKey, lastUsed: new Date(), expiresAt, - secretHash + secretHash, }).save(); const serviceAccountObj = serviceAccount.toObject(); @@ -91,14 +91,14 @@ export const createServiceAccount = async (req: Request, res: Response) => { // provision default org-level permission for service account await new ServiceAccountOrganizationPermission({ - serviceAccount: serviceAccount._id + serviceAccount: serviceAccount._id, }).save(); - const secretId = Buffer.from(serviceAccount._id.toString(), 'hex').toString('base64'); + const secretId = Buffer.from(serviceAccount._id.toString(), "hex").toString("base64"); return res.status(200).send({ serviceAccountAccessKey: `sa.${secretId}.${secret}`, - serviceAccount: serviceAccountObj + serviceAccount: serviceAccountObj, }); } @@ -114,18 +114,18 @@ export const changeServiceAccountName = async (req: Request, res: Response) => { const serviceAccount = await ServiceAccount.findOneAndUpdate( { - _id: new Types.ObjectId(serviceAccountId) + _id: new Types.ObjectId(serviceAccountId), }, { - name + name, }, { - new: true + new: true, } ); return res.status(200).send({ - serviceAccount + serviceAccount, }); } @@ -140,7 +140,7 @@ export const addServiceAccountKey = async (req: Request, res: Response) => { const { workspaceId, encryptedKey, - nonce + nonce, } = req.body; const serviceAccountKey = await new ServiceAccountKey({ @@ -148,7 +148,7 @@ export const addServiceAccountKey = async (req: Request, res: Response) => { nonce, sender: req.user._id, serviceAccount: req.serviceAccount._d, - workspace: new Types.ObjectId(workspaceId) + workspace: new Types.ObjectId(workspaceId), }).save(); return serviceAccountKey; @@ -161,11 +161,11 @@ export const addServiceAccountKey = async (req: Request, res: Response) => { */ export const getServiceAccountWorkspacePermissions = async (req: Request, res: Response) => { const serviceAccountWorkspacePermissions = await ServiceAccountWorkspacePermission.find({ - serviceAccount: req.serviceAccount._id - }).populate('workspace'); + serviceAccount: req.serviceAccount._id, + }).populate("workspace"); return res.status(200).send({ - serviceAccountWorkspacePermissions + serviceAccountWorkspacePermissions, }); } @@ -182,34 +182,34 @@ export const addServiceAccountWorkspacePermission = async (req: Request, res: Re read = false, write = false, encryptedKey, - nonce + nonce, } = req.body; if (!req.membership.workspace.environments.some((e: { name: string; slug: string }) => e.slug === environment)) { return res.status(400).send({ - message: 'Failed to validate workspace environment' + message: "Failed to validate workspace environment", }); } const existingPermission = await ServiceAccountWorkspacePermission.findOne({ serviceAccount: new Types.ObjectId(serviceAccountId), workspace: new Types.ObjectId(workspaceId), - environment + environment, }); - if (existingPermission) throw BadRequestError({ message: 'Failed to add workspace permission to service account due to already-existing ' }); + if (existingPermission) throw BadRequestError({ message: "Failed to add workspace permission to service account due to already-existing " }); const serviceAccountWorkspacePermission = await new ServiceAccountWorkspacePermission({ serviceAccount: new Types.ObjectId(serviceAccountId), workspace: new Types.ObjectId(workspaceId), environment, read, - write + write, }).save(); const existingServiceAccountKey = await ServiceAccountKey.findOne({ serviceAccount: new Types.ObjectId(serviceAccountId), - workspace: new Types.ObjectId(workspaceId) + workspace: new Types.ObjectId(workspaceId), }); if (!existingServiceAccountKey) { @@ -218,12 +218,12 @@ export const addServiceAccountWorkspacePermission = async (req: Request, res: Re nonce, sender: req.user._id, serviceAccount: new Types.ObjectId(serviceAccountId), - workspace: new Types.ObjectId(workspaceId) + workspace: new Types.ObjectId(workspaceId), }).save(); } return res.status(200).send({ - serviceAccountWorkspacePermission + serviceAccountWorkspacePermission, }); } @@ -240,19 +240,19 @@ export const deleteServiceAccountWorkspacePermission = async (req: Request, res: const { serviceAccount, workspace } = serviceAccountWorkspacePermission; const count = await ServiceAccountWorkspacePermission.countDocuments({ serviceAccount, - workspace + workspace, }); if (count === 0) { await ServiceAccountKey.findOneAndDelete({ serviceAccount, - workspace + workspace, }); } } return res.status(200).send({ - serviceAccountWorkspacePermission + serviceAccountWorkspacePermission, }); } @@ -269,20 +269,20 @@ export const deleteServiceAccount = async (req: Request, res: Response) => { if (serviceAccount) { await ServiceAccountKey.deleteMany({ - serviceAccount: serviceAccount._id + serviceAccount: serviceAccount._id, }); await ServiceAccountOrganizationPermission.deleteMany({ - serviceAccount: new Types.ObjectId(serviceAccountId) + serviceAccount: new Types.ObjectId(serviceAccountId), }); await ServiceAccountWorkspacePermission.deleteMany({ - serviceAccount: new Types.ObjectId(serviceAccountId) + serviceAccount: new Types.ObjectId(serviceAccountId), }); } return res.status(200).send({ - serviceAccount + serviceAccount, }); } @@ -297,10 +297,10 @@ export const getServiceAccountKeys = async (req: Request, res: Response) => { const serviceAccountKeys = await ServiceAccountKey.find({ serviceAccount: req.serviceAccount._id, - ...(workspaceId ? { workspace: new Types.ObjectId(workspaceId) } : {}) + ...(workspaceId ? { workspace: new Types.ObjectId(workspaceId) } : {}), }); return res.status(200).send({ - serviceAccountKeys + serviceAccountKeys, }); } \ No newline at end of file diff --git a/backend/src/controllers/v2/serviceTokenDataController.ts b/backend/src/controllers/v2/serviceTokenDataController.ts index 21cc29b04..471ac1f3f 100644 --- a/backend/src/controllers/v2/serviceTokenDataController.ts +++ b/backend/src/controllers/v2/serviceTokenDataController.ts @@ -1,13 +1,10 @@ import { Request, Response } from "express"; import crypto from "crypto"; import bcrypt from "bcrypt"; -import { User, ServiceAccount, ServiceTokenData } from "../../models"; -import { userHasWorkspaceAccess } from "../../ee/helpers/checkMembershipPermissions"; +import { ServiceAccount, ServiceTokenData, User } from "../../models"; import { - PERMISSION_READ_SECRETS, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, - AUTH_MODE_SERVICE_TOKEN, } from "../../variables"; import { getSaltRounds } from "../../config"; import { BadRequestError } from "../../utils/errors"; diff --git a/backend/src/controllers/v2/signupController.ts b/backend/src/controllers/v2/signupController.ts index ada119ee9..45a7db963 100644 --- a/backend/src/controllers/v2/signupController.ts +++ b/backend/src/controllers/v2/signupController.ts @@ -1,14 +1,14 @@ -import { Request, Response } from 'express'; -import { User, MembershipOrg } from '../../models'; -import { completeAccount } from '../../helpers/user'; +import { Request, Response } from "express"; +import { MembershipOrg, User } from "../../models"; +import { completeAccount } from "../../helpers/user"; import { - initializeDefaultOrg -} from '../../helpers/signup'; -import { issueAuthTokens } from '../../helpers/auth'; -import { INVITED, ACCEPTED } from '../../variables'; -import { standardRequest } from '../../config/request'; -import { getLoopsApiKey, getHttpsEnabled } from '../../config'; -import { updateSubscriptionOrgQuantity } from '../../helpers/organization'; + initializeDefaultOrg, +} from "../../helpers/signup"; +import { issueAuthTokens } from "../../helpers/auth"; +import { ACCEPTED, INVITED } from "../../variables"; +import { standardRequest } from "../../config/request"; +import { getHttpsEnabled, getLoopsApiKey } from "../../config"; +import { updateSubscriptionOrgQuantity } from "../../helpers/organization"; /** * Complete setting up user by adding their personal and auth information as part of the @@ -32,7 +32,7 @@ export const completeAccountSignup = async (req: Request, res: Response) => { encryptedPrivateKeyTag, salt, verifier, - organizationName + organizationName, }: { email: string; firstName: string; @@ -56,7 +56,7 @@ export const completeAccountSignup = async (req: Request, res: Response) => { // case 1: user doesn't exist. // case 2: user has already completed account return res.status(403).send({ - error: 'Failed to complete account for complete user' + error: "Failed to complete account for complete user", }); } @@ -74,28 +74,28 @@ export const completeAccountSignup = async (req: Request, res: Response) => { encryptedPrivateKeyIV, encryptedPrivateKeyTag, salt, - verifier + verifier, }); if (!user) - throw new Error('Failed to complete account for non-existent user'); // ensure user is non-null + throw new Error("Failed to complete account for non-existent user"); // ensure user is non-null // initialize default organization and workspace await initializeDefaultOrg({ organizationName, - user + user, }); // update organization membership statuses that are // invited to completed with user attached const membershipsToUpdate = await MembershipOrg.find({ inviteEmail: email, - status: INVITED + status: INVITED, }); membershipsToUpdate.forEach(async (membership) => { await updateSubscriptionOrgQuantity({ - organizationId: membership.organization.toString() + organizationId: membership.organization.toString(), }); }); @@ -104,11 +104,11 @@ export const completeAccountSignup = async (req: Request, res: Response) => { await MembershipOrg.updateMany( { inviteEmail: email, - status: INVITED + status: INVITED, }, { user, - status: ACCEPTED + status: ACCEPTED, } ); @@ -116,7 +116,7 @@ export const completeAccountSignup = async (req: Request, res: Response) => { const tokens = await issueAuthTokens({ userId: user._id, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); token = tokens.token; @@ -127,27 +127,27 @@ export const completeAccountSignup = async (req: Request, res: Response) => { "email": email, "eventName": "Sign Up", "firstName": firstName, - "lastName": lastName + "lastName": lastName, }, { headers: { "Accept": "application/json", - "Authorization": "Bearer " + (await getLoopsApiKey()) + "Authorization": "Bearer " + (await getLoopsApiKey()), }, }); } // store (refresh) token in httpOnly cookie - res.cookie('jid', tokens.refreshToken, { + res.cookie("jid", tokens.refreshToken, { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: await getHttpsEnabled() + path: "/", + sameSite: "strict", + secure: await getHttpsEnabled(), }); return res.status(200).send({ - message: 'Successfully set up account', + message: "Successfully set up account", user, - token + token, }); }; @@ -172,7 +172,7 @@ export const completeAccountInvite = async (req: Request, res: Response) => { encryptedPrivateKeyIV, encryptedPrivateKeyTag, salt, - verifier + verifier, } = req.body; // get user @@ -182,16 +182,16 @@ export const completeAccountInvite = async (req: Request, res: Response) => { // case 1: user doesn't exist. // case 2: user has already completed account return res.status(403).send({ - error: 'Failed to complete account for complete user' + error: "Failed to complete account for complete user", }); } const membershipOrg = await MembershipOrg.findOne({ inviteEmail: email, - status: INVITED + status: INVITED, }); - if (!membershipOrg) throw new Error('Failed to find invitations for email'); + if (!membershipOrg) throw new Error("Failed to find invitations for email"); // complete setting up user's account user = await completeAccount({ @@ -207,33 +207,33 @@ export const completeAccountInvite = async (req: Request, res: Response) => { encryptedPrivateKeyIV, encryptedPrivateKeyTag, salt, - verifier + verifier, }); if (!user) - throw new Error('Failed to complete account for non-existent user'); + throw new Error("Failed to complete account for non-existent user"); // update organization membership statuses that are // invited to completed with user attached const membershipsToUpdate = await MembershipOrg.find({ inviteEmail: email, - status: INVITED + status: INVITED, }); membershipsToUpdate.forEach(async (membership) => { await updateSubscriptionOrgQuantity({ - organizationId: membership.organization.toString() + organizationId: membership.organization.toString(), }); }); await MembershipOrg.updateMany( { inviteEmail: email, - status: INVITED + status: INVITED, }, { user, - status: ACCEPTED + status: ACCEPTED, } ); @@ -241,22 +241,22 @@ export const completeAccountInvite = async (req: Request, res: Response) => { const tokens = await issueAuthTokens({ userId: user._id, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); token = tokens.token; // store (refresh) token in httpOnly cookie - res.cookie('jid', tokens.refreshToken, { + res.cookie("jid", tokens.refreshToken, { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: await getHttpsEnabled() + path: "/", + sameSite: "strict", + secure: await getHttpsEnabled(), }); return res.status(200).send({ - message: 'Successfully set up account', + message: "Successfully set up account", user, - token + token, }); }; diff --git a/backend/src/controllers/v2/tagController.ts b/backend/src/controllers/v2/tagController.ts index 0175b359a..926df0ca5 100644 --- a/backend/src/controllers/v2/tagController.ts +++ b/backend/src/controllers/v2/tagController.ts @@ -1,71 +1,65 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; -import { - Membership, Secret, -} from '../../models'; -import Tag, { ITag } from '../../models/tag'; -import { Builder } from "builder-pattern" -import to from 'await-to-js'; -import { BadRequestError, UnauthorizedRequestError } from '../../utils/errors'; -import { MongoError } from 'mongodb'; -import { userHasWorkspaceAccess } from '../../ee/helpers/checkMembershipPermissions'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; +import { Membership, Secret } from "../../models"; +import Tag, { ITag } from "../../models/tag"; +import { Builder } from "builder-pattern"; +import to from "await-to-js"; +import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors"; +import { MongoError } from "mongodb"; export const createWorkspaceTag = async (req: Request, res: Response) => { - const { workspaceId } = req.params - const { name, slug } = req.body - const sanitizedTagToCreate = Builder() - .name(name) - .workspace(new Types.ObjectId(workspaceId)) - .slug(slug) - .user(new Types.ObjectId(req.user._id)) - .build(); + const { workspaceId } = req.params; + const { name, slug } = req.body; + const sanitizedTagToCreate = Builder() + .name(name) + .workspace(new Types.ObjectId(workspaceId)) + .slug(slug) + .user(new Types.ObjectId(req.user._id)) + .build(); - const [err, createdTag] = await to(Tag.create(sanitizedTagToCreate)) + const [err, createdTag] = await to(Tag.create(sanitizedTagToCreate)); - if (err) { - if ((err as MongoError).code === 11000) { - throw BadRequestError({ message: "Tags must be unique in a workspace" }) - } + if (err) { + if ((err as MongoError).code === 11000) { + throw BadRequestError({ message: "Tags must be unique in a workspace" }); + } - throw err - } + throw err; + } - res.json(createdTag) -} + res.json(createdTag); +}; export const deleteWorkspaceTag = async (req: Request, res: Response) => { - const { tagId } = req.params + const { tagId } = req.params; - const tagFromDB = await Tag.findById(tagId) - if (!tagFromDB) { - throw BadRequestError() - } + const tagFromDB = await Tag.findById(tagId); + if (!tagFromDB) { + throw BadRequestError(); + } - // can only delete if the request user is one that belongs to the same workspace as the tag - const membership = await Membership.findOne({ - user: req.user, - workspace: tagFromDB.workspace - }); + // can only delete if the request user is one that belongs to the same workspace as the tag + const membership = await Membership.findOne({ + user: req.user, + workspace: tagFromDB.workspace + }); - if (!membership) { - UnauthorizedRequestError({ message: 'Failed to validate membership' }); - } + if (!membership) { + UnauthorizedRequestError({ message: "Failed to validate membership" }); + } - const result = await Tag.findByIdAndDelete(tagId); + const result = await Tag.findByIdAndDelete(tagId); - // remove the tag from secrets - await Secret.updateMany( - { tags: { $in: [tagId] } }, - { $pull: { tags: tagId } } - ); + // remove the tag from secrets + await Secret.updateMany({ tags: { $in: [tagId] } }, { $pull: { tags: tagId } }); - res.json(result); -} + res.json(result); +}; export const getWorkspaceTags = async (req: Request, res: Response) => { - const { workspaceId } = req.params - const workspaceTags = await Tag.find({ workspace: workspaceId }) - return res.json({ - workspaceTags - }) -} + const { workspaceId } = req.params; + const workspaceTags = await Tag.find({ workspace: workspaceId }); + return res.json({ + workspaceTags + }); +}; diff --git a/backend/src/controllers/v2/usersController.ts b/backend/src/controllers/v2/usersController.ts index 2d5cdc51a..2b4784b29 100644 --- a/backend/src/controllers/v2/usersController.ts +++ b/backend/src/controllers/v2/usersController.ts @@ -1,8 +1,8 @@ -import { Request, Response } from 'express'; +import { Request, Response } from "express"; import { + MembershipOrg, User, - MembershipOrg -} from '../../models'; +} from "../../models"; /** * Return the current user. @@ -38,10 +38,10 @@ export const getMe = async (req: Request, res: Response) => { */ const user = await User .findById(req.user._id) - .select('+salt +publicKey +encryptedPrivateKey +iv +tag +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag'); + .select("+salt +publicKey +encryptedPrivateKey +iv +tag +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag"); return res.status(200).send({ - user + user, }); } @@ -60,7 +60,7 @@ export const updateMyMfaEnabled = async (req: Request, res: Response) => { if (isMfaEnabled) { // TODO: adapt this route/controller // to work for different forms of MFA - req.user.mfaMethods = ['email']; + req.user.mfaMethods = ["email"]; } else { req.user.mfaMethods = []; } @@ -70,7 +70,7 @@ export const updateMyMfaEnabled = async (req: Request, res: Response) => { const user = req.user; return res.status(200).send({ - user + user, }); } @@ -109,11 +109,11 @@ export const getMyOrganizations = async (req: Request, res: Response) => { */ const organizations = ( await MembershipOrg.find({ - user: req.user._id - }).populate('organization') + user: req.user._id, + }).populate("organization") ).map((m) => m.organization); return res.status(200).send({ - organizations + organizations, }); } diff --git a/backend/src/controllers/v2/workspaceController.ts b/backend/src/controllers/v2/workspaceController.ts index 20778491d..c0d46f851 100644 --- a/backend/src/controllers/v2/workspaceController.ts +++ b/backend/src/controllers/v2/workspaceController.ts @@ -1,25 +1,19 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; import { - Workspace, - Secret, - Membership, - MembershipOrg, - Integration, - IntegrationAuth, Key, - IUser, - ServiceToken, - ServiceTokenData -} from '../../models'; + Membership, + ServiceTokenData, + Workspace, +} from "../../models"; import { - v2PushSecrets as push, pullSecrets as pull, - reformatPullSecrets -} from '../../helpers/secret'; -import { pushKeys } from '../../helpers/key'; -import { TelemetryService, EventService } from '../../services'; -import { eventPushSecrets } from '../../events'; + v2PushSecrets as push, + reformatPullSecrets, +} from "../../helpers/secret"; +import { pushKeys } from "../../helpers/key"; +import { EventService, TelemetryService } from "../../services"; +import { eventPushSecrets } from "../../events"; interface V2PushSecret { type: string; // personal or shared @@ -54,12 +48,12 @@ export const pushWorkspaceSecrets = async (req: Request, res: Response) => { // validate environment const workspaceEnvs = req.membership.workspace.environments; if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { - throw new Error('Failed to validate environment'); + throw new Error("Failed to validate environment"); } // sanitize secrets secrets = secrets.filter( - (s: V2PushSecret) => s.secretKeyCiphertext !== '' && s.secretValueCiphertext !== '' + (s: V2PushSecret) => s.secretKeyCiphertext !== "" && s.secretValueCiphertext !== "" ); await push({ @@ -67,26 +61,26 @@ export const pushWorkspaceSecrets = async (req: Request, res: Response) => { workspaceId, environment, secrets, - channel: channel ? channel : 'cli', - ipAddress: req.realIP + channel: channel ? channel : "cli", + ipAddress: req.realIP, }); await pushKeys({ userId: req.user._id, workspaceId, - keys + keys, }); if (postHogClient) { postHogClient.capture({ - event: 'secrets pushed', + event: "secrets pushed", distinctId: req.user.email, properties: { numberOfSecrets: secrets.length, environment, workspaceId, - channel: channel ? channel : 'cli' - } + channel: channel ? channel : "cli", + }, }); } @@ -94,12 +88,12 @@ export const pushWorkspaceSecrets = async (req: Request, res: Response) => { EventService.handleEvent({ event: eventPushSecrets({ workspaceId: new Types.ObjectId(workspaceId), - environment - }) + environment, + }), }); return res.status(200).send({ - message: 'Successfully uploaded workspace secrets' + message: "Successfully uploaded workspace secrets", }); }; @@ -126,18 +120,18 @@ export const pullSecrets = async (req: Request, res: Response) => { // validate environment const workspaceEnvs = req.membership.workspace.environments; if (!workspaceEnvs.find(({ slug }: { slug: string }) => slug === environment)) { - throw new Error('Failed to validate environment'); + throw new Error("Failed to validate environment"); } secrets = await pull({ userId, workspaceId, environment, - channel: channel ? channel : 'cli', - ipAddress: req.realIP + channel: channel ? channel : "cli", + ipAddress: req.realIP, }); - if (channel !== 'cli') { + if (channel !== "cli") { secrets = reformatPullSecrets({ secrets }); } @@ -145,18 +139,18 @@ export const pullSecrets = async (req: Request, res: Response) => { // capture secrets pushed event in production postHogClient.capture({ distinctId: req.user.email, - event: 'secrets pulled', + event: "secrets pulled", properties: { numberOfSecrets: secrets.length, environment, workspaceId, - channel: channel ? channel : 'cli' - } + channel: channel ? channel : "cli", + }, }); } return res.status(200).send({ - secrets + secrets, }); }; @@ -194,10 +188,10 @@ export const getWorkspaceKey = async (req: Request, res: Response) => { key = await Key.findOne({ workspace: workspaceId, - receiver: req.user._id - }).populate('sender', '+publicKey'); + receiver: req.user._id, + }).populate("sender", "+publicKey"); - if (!key) throw new Error('Failed to find workspace key'); + if (!key) throw new Error("Failed to find workspace key"); return res.status(200).json(key); } @@ -209,12 +203,12 @@ export const getWorkspaceServiceTokenData = async ( const serviceTokenData = await ServiceTokenData .find({ - workspace: workspaceId + workspace: workspaceId, }) - .select('+encryptedKey +iv +tag'); + .select("+encryptedKey +iv +tag"); return res.status(200).send({ - serviceTokenData + serviceTokenData, }); } @@ -261,11 +255,11 @@ export const getWorkspaceMemberships = async (req: Request, res: Response) => { const { workspaceId } = req.params; const memberships = await Membership.find({ - workspace: workspaceId - }).populate('user', '+publicKey'); + workspace: workspaceId, + }).populate("user", "+publicKey"); return res.status(200).send({ - memberships + memberships, }); } @@ -330,21 +324,21 @@ export const updateWorkspaceMembership = async (req: Request, res: Response) => } */ const { - membershipId + membershipId, } = req.params; const { role } = req.body; const membership = await Membership.findByIdAndUpdate( membershipId, { - role + role, }, { - new: true + new: true, } ); return res.status(200).send({ - membership + membership, }); } @@ -392,20 +386,20 @@ export const deleteWorkspaceMembership = async (req: Request, res: Response) => } */ const { - membershipId + membershipId, } = req.params; const membership = await Membership.findByIdAndDelete(membershipId); - if (!membership) throw new Error('Failed to delete workspace membership'); + if (!membership) throw new Error("Failed to delete workspace membership"); await Key.deleteMany({ receiver: membership.user, - workspace: membership.workspace + workspace: membership.workspace, }); return res.status(200).send({ - membership + membership, }); } @@ -421,18 +415,18 @@ export const toggleAutoCapitalization = async (req: Request, res: Response) => { const workspace = await Workspace.findOneAndUpdate( { - _id: workspaceId + _id: workspaceId, }, { - autoCapitalization + autoCapitalization, }, { - new: true + new: true, } ); return res.status(200).send({ - message: 'Successfully changed autoCapitalization setting', - workspace + message: "Successfully changed autoCapitalization setting", + workspace, }); }; diff --git a/backend/src/controllers/v3/authController.ts b/backend/src/controllers/v3/authController.ts index afb670269..7a70f171c 100644 --- a/backend/src/controllers/v3/authController.ts +++ b/backend/src/controllers/v3/authController.ts @@ -1,29 +1,29 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -import { Request, Response } from 'express'; -import jwt from 'jsonwebtoken'; -import * as Sentry from '@sentry/node'; -import * as bigintConversion from 'bigint-conversion'; -const jsrp = require('jsrp'); -import { User, LoginSRPDetail } from '../../models'; -import { issueAuthTokens, createToken, validateProviderAuthToken } from '../../helpers/auth'; -import { checkUserDevice } from '../../helpers/user'; -import { sendMail } from '../../helpers/nodemailer'; -import { TokenService } from '../../services'; -import { EELogService } from '../../ee/services'; -import { BadRequestError, InternalServerError } from '../../utils/errors'; +import { Request, Response } from "express"; +import jwt from "jsonwebtoken"; +import * as Sentry from "@sentry/node"; +import * as bigintConversion from "bigint-conversion"; +const jsrp = require("jsrp"); +import { LoginSRPDetail, User } from "../../models"; +import { createToken, issueAuthTokens, validateProviderAuthToken } from "../../helpers/auth"; +import { checkUserDevice } from "../../helpers/user"; +import { sendMail } from "../../helpers/nodemailer"; +import { TokenService } from "../../services"; +import { EELogService } from "../../ee/services"; +import { BadRequestError, InternalServerError } from "../../utils/errors"; import { + ACTION_LOGIN, TOKEN_EMAIL_MFA, - ACTION_LOGIN -} from '../../variables'; -import { getChannelFromUserAgent } from '../../utils/posthog'; // TODO: move this +} from "../../variables"; +import { getChannelFromUserAgent } from "../../utils/posthog"; // TODO: move this import { + getHttpsEnabled, getJwtMfaLifetime, getJwtMfaSecret, - getHttpsEnabled, -} from '../../config'; -import { AuthProvider } from '../../models/user'; +} from "../../config"; +import { AuthProvider } from "../../models/user"; -declare module 'jsonwebtoken' { +declare module "jsonwebtoken" { export interface ProviderAuthJwtPayload extends jwt.JwtPayload { userId: string; email: string; @@ -43,7 +43,7 @@ export const login1 = async (req: Request, res: Response) => { const { email, providerAuthToken, - clientPublicKey + clientPublicKey, }: { email: string; clientPublicKey: string, @@ -52,9 +52,9 @@ export const login1 = async (req: Request, res: Response) => { const user = await User.findOne({ email, - }).select('+salt +verifier'); + }).select("+salt +verifier"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); if (user.authProvider) { await validateProviderAuthToken({ @@ -68,13 +68,13 @@ export const login1 = async (req: Request, res: Response) => { server.init( { salt: user.salt, - verifier: user.verifier + verifier: user.verifier, }, async () => { // generate server-side public key const serverPublicKey = server.getPublicKey(); await LoginSRPDetail.findOneAndReplace({ - email: email + email: email, }, { email, userId: user.id, @@ -84,7 +84,7 @@ export const login1 = async (req: Request, res: Response) => { return res.status(200).send({ serverPublicKey, - salt: user.salt + salt: user.salt, }); } ); @@ -92,7 +92,7 @@ export const login1 = async (req: Request, res: Response) => { Sentry.setUser(null); Sentry.captureException(err); return res.status(400).send({ - message: 'Failed to start authentication process' + message: "Failed to start authentication process", }); } }; @@ -107,15 +107,15 @@ export const login1 = async (req: Request, res: Response) => { export const login2 = async (req: Request, res: Response) => { try { - if (!req.headers['user-agent']) throw InternalServerError({ message: 'User-Agent header is required' }); + if (!req.headers["user-agent"]) throw InternalServerError({ message: "User-Agent header is required" }); const { email, clientProof, providerAuthToken } = req.body; const user = await User.findOne({ email, - }).select('+salt +verifier +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag +publicKey +encryptedPrivateKey +iv +tag +devices'); + }).select("+salt +verifier +encryptionVersion +protectedKey +protectedKeyIV +protectedKeyTag +publicKey +encryptedPrivateKey +iv +tag +devices"); - if (!user) throw new Error('Failed to find user'); + if (!user) throw new Error("Failed to find user"); if (user.authProvider) { await validateProviderAuthToken({ @@ -136,7 +136,7 @@ export const login2 = async (req: Request, res: Response) => { { salt: user.salt, verifier: user.verifier, - b: loginSRPDetail.serverBInt + b: loginSRPDetail.serverBInt, }, async () => { server.setClientPublicKey(loginSRPDetail.clientPublicKey); @@ -150,52 +150,52 @@ export const login2 = async (req: Request, res: Response) => { // generate temporary MFA token const token = createToken({ payload: { - userId: user._id.toString() + userId: user._id.toString(), }, expiresIn: await getJwtMfaLifetime(), - secret: await getJwtMfaSecret() + secret: await getJwtMfaSecret(), }); const code = await TokenService.createToken({ type: TOKEN_EMAIL_MFA, - email + email, }); // send MFA code [code] to [email] await sendMail({ - template: 'emailMfa.handlebars', - subjectLine: 'Infisical MFA code', + template: "emailMfa.handlebars", + subjectLine: "Infisical MFA code", recipients: [user.email], substitutions: { - code - } + code, + }, }); return res.status(200).send({ mfaEnabled: true, - token + token, }); } await checkUserDevice({ user, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); // issue tokens const tokens = await issueAuthTokens({ userId: user._id, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); // store (refresh) token in httpOnly cookie - res.cookie('jid', tokens.refreshToken, { + res.cookie("jid", tokens.refreshToken, { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: await getHttpsEnabled() + path: "/", + sameSite: "strict", + secure: await getHttpsEnabled(), }); // case: user does not have MFA enablgged @@ -221,7 +221,7 @@ export const login2 = async (req: Request, res: Response) => { publicKey: user.publicKey, encryptedPrivateKey: user.encryptedPrivateKey, iv: user.iv, - tag: user.tag + tag: user.tag, } if ( @@ -236,21 +236,21 @@ export const login2 = async (req: Request, res: Response) => { const loginAction = await EELogService.createAction({ name: ACTION_LOGIN, - userId: user._id + userId: user._id, }); loginAction && await EELogService.createLog({ userId: user._id, actions: [loginAction], - channel: getChannelFromUserAgent(req.headers['user-agent']), - ipAddress: req.realIP + channel: getChannelFromUserAgent(req.headers["user-agent"]), + ipAddress: req.realIP, }); return res.status(200).send(response); } return res.status(400).send({ - message: 'Failed to authenticate. Try again?' + message: "Failed to authenticate. Try again?", }); } ); @@ -258,7 +258,7 @@ export const login2 = async (req: Request, res: Response) => { Sentry.setUser(null); Sentry.captureException(err); return res.status(400).send({ - message: 'Failed to authenticate. Try again?' + message: "Failed to authenticate. Try again?", }); } }; diff --git a/backend/src/controllers/v3/index.ts b/backend/src/controllers/v3/index.ts index 9d3f118d3..959bab532 100644 --- a/backend/src/controllers/v3/index.ts +++ b/backend/src/controllers/v3/index.ts @@ -1,7 +1,7 @@ -import * as secretsController from './secretsController'; -import * as workspacesController from './workspacesController'; -import * as authController from './authController'; -import * as signupController from './signupController'; +import * as secretsController from "./secretsController"; +import * as workspacesController from "./workspacesController"; +import * as authController from "./authController"; +import * as signupController from "./signupController"; export { authController, diff --git a/backend/src/controllers/v3/secretsController.ts b/backend/src/controllers/v3/secretsController.ts index 182d7f14f..3c7336241 100644 --- a/backend/src/controllers/v3/secretsController.ts +++ b/backend/src/controllers/v3/secretsController.ts @@ -1,6 +1,6 @@ import { Request, Response } from "express"; import { Types } from "mongoose"; -import { SecretService, EventService } from "../../services"; +import { EventService, SecretService } from "../../services"; import { eventPushSecrets } from "../../events"; import { BotService } from "../../services"; import { repackageSecretToRaw } from "../../helpers/secrets"; @@ -25,18 +25,18 @@ export const getSecretsRaw = async (req: Request, res: Response) => { }); const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId: new Types.ObjectId(workspaceId) + workspaceId: new Types.ObjectId(workspaceId), }); return res.status(200).send({ secrets: secrets.map((secret) => { const rep = repackageSecretToRaw({ secret, - key + key, }); return rep; - }) + }), }); }; @@ -62,14 +62,14 @@ export const getSecretByNameRaw = async (req: Request, res: Response) => { }); const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId: new Types.ObjectId(workspaceId) + workspaceId: new Types.ObjectId(workspaceId), }); return res.status(200).send({ secret: repackageSecretToRaw({ secret, - key - }) + key, + }), }); }; @@ -86,26 +86,26 @@ export const createSecretRaw = async (req: Request, res: Response) => { type, secretValue, secretComment, - secretPath = "/" + secretPath = "/", } = req.body; const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId: new Types.ObjectId(workspaceId) + workspaceId: new Types.ObjectId(workspaceId), }); const secretKeyEncrypted = encryptSymmetric128BitHexKeyUTF8({ plaintext: secretName, - key + key, }); const secretValueEncrypted = encryptSymmetric128BitHexKeyUTF8({ plaintext: secretValue, - key + key, }); const secretCommentEncrypted = encryptSymmetric128BitHexKeyUTF8({ plaintext: secretComment, - key + key, }); const secret = await SecretService.createSecret({ @@ -123,7 +123,7 @@ export const createSecretRaw = async (req: Request, res: Response) => { secretPath, secretCommentCiphertext: secretCommentEncrypted.ciphertext, secretCommentIV: secretCommentEncrypted.iv, - secretCommentTag: secretCommentEncrypted.tag + secretCommentTag: secretCommentEncrypted.tag, }); await EventService.handleEvent({ @@ -139,8 +139,8 @@ export const createSecretRaw = async (req: Request, res: Response) => { return res.status(200).send({ secret: repackageSecretToRaw({ secret: secretWithoutBlindIndex, - key - }) + key, + }), }); } @@ -160,12 +160,12 @@ export const updateSecretByNameRaw = async (req: Request, res: Response) => { } = req.body; const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId: new Types.ObjectId(workspaceId) + workspaceId: new Types.ObjectId(workspaceId), }); const secretValueEncrypted = encryptSymmetric128BitHexKeyUTF8({ plaintext: secretValue, - key + key, }); const secret = await SecretService.updateSecret({ @@ -190,8 +190,8 @@ export const updateSecretByNameRaw = async (req: Request, res: Response) => { return res.status(200).send({ secret: repackageSecretToRaw({ secret, - key - }) + key, + }), }); }; @@ -206,7 +206,7 @@ export const deleteSecretByNameRaw = async (req: Request, res: Response) => { workspaceId, environment, type, - secretPath = "/" + secretPath = "/", } = req.body; const { secret } = await SecretService.deleteSecret({ @@ -226,14 +226,14 @@ export const deleteSecretByNameRaw = async (req: Request, res: Response) => { }); const key = await BotService.getWorkspaceKeyWithBot({ - workspaceId: new Types.ObjectId(workspaceId) + workspaceId: new Types.ObjectId(workspaceId), }); return res.status(200).send({ secret: repackageSecretToRaw({ secret, - key - }) + key, + }), }); }; @@ -324,7 +324,7 @@ export const createSecret = async (req: Request, res: Response) => { secretPath, secretCommentCiphertext, secretCommentIV, - secretCommentTag + secretCommentTag, }); await EventService.handleEvent({ @@ -395,7 +395,7 @@ export const deleteSecretByName = async (req: Request, res: Response) => { workspaceId, environment, type, - secretPath = "/" + secretPath = "/", } = req.body; const { secret } = await SecretService.deleteSecret({ diff --git a/backend/src/controllers/v3/signupController.ts b/backend/src/controllers/v3/signupController.ts index 5944e289a..3d9f897c4 100644 --- a/backend/src/controllers/v3/signupController.ts +++ b/backend/src/controllers/v3/signupController.ts @@ -1,17 +1,17 @@ -import jwt from 'jsonwebtoken'; -import { Request, Response } from 'express'; -import * as Sentry from '@sentry/node'; -import { User, MembershipOrg } from '../../models'; -import { completeAccount } from '../../helpers/user'; +import jwt from "jsonwebtoken"; +import { Request, Response } from "express"; +import * as Sentry from "@sentry/node"; +import { MembershipOrg, User } from "../../models"; +import { completeAccount } from "../../helpers/user"; import { - initializeDefaultOrg -} from '../../helpers/signup'; -import { issueAuthTokens, validateProviderAuthToken } from '../../helpers/auth'; -import { INVITED, ACCEPTED } from '../../variables'; -import { standardRequest } from '../../config/request'; -import { getLoopsApiKey, getHttpsEnabled, getJwtSignupSecret } from '../../config'; -import { BadRequestError } from '../../utils/errors'; -import { TelemetryService } from '../../services'; + initializeDefaultOrg, +} from "../../helpers/signup"; +import { issueAuthTokens, validateProviderAuthToken } from "../../helpers/auth"; +import { ACCEPTED, INVITED } from "../../variables"; +import { standardRequest } from "../../config/request"; +import { getHttpsEnabled, getJwtSignupSecret, getLoopsApiKey } from "../../config"; +import { BadRequestError } from "../../utils/errors"; +import { TelemetryService } from "../../services"; /** * Complete setting up user by adding their personal and auth information as part of the @@ -63,7 +63,7 @@ export const completeAccountSignup = async (req: Request, res: Response) => { // case 1: user doesn't exist. // case 2: user has already completed account return res.status(403).send({ - error: 'Failed to complete account for complete user' + error: "Failed to complete account for complete user", }); } @@ -74,16 +74,16 @@ export const completeAccountSignup = async (req: Request, res: Response) => { user, }); } else { - const [AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE] = <[string, string]>req.headers['authorization']?.split(' ', 2) ?? [null, null] + const [AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE] = <[string, string]>req.headers["authorization"]?.split(" ", 2) ?? [null, null] if (AUTH_TOKEN_TYPE === null) { - throw BadRequestError({ message: `Missing Authorization Header in the request header.` }); + throw BadRequestError({ message: "Missing Authorization Header in the request header." }); } - if (AUTH_TOKEN_TYPE.toLowerCase() !== 'bearer') { + if (AUTH_TOKEN_TYPE.toLowerCase() !== "bearer") { throw BadRequestError({ message: `The provided authentication type '${AUTH_TOKEN_TYPE}' is not supported.` }) } if (AUTH_TOKEN_VALUE === null) { throw BadRequestError({ - message: 'Missing Authorization Body in the request header', + message: "Missing Authorization Body in the request header", }) } @@ -110,16 +110,16 @@ export const completeAccountSignup = async (req: Request, res: Response) => { encryptedPrivateKeyIV, encryptedPrivateKeyTag, salt, - verifier + verifier, }); if (!user) - throw new Error('Failed to complete account for non-existent user'); // ensure user is non-null + throw new Error("Failed to complete account for non-existent user"); // ensure user is non-null // initialize default organization and workspace await initializeDefaultOrg({ organizationName, - user + user, }); // update organization membership statuses that are @@ -127,11 +127,11 @@ export const completeAccountSignup = async (req: Request, res: Response) => { await MembershipOrg.updateMany( { inviteEmail: email, - status: INVITED + status: INVITED, }, { user, - status: ACCEPTED + status: ACCEPTED, } ); @@ -139,7 +139,7 @@ export const completeAccountSignup = async (req: Request, res: Response) => { const tokens = await issueAuthTokens({ userId: user._id, ip: req.realIP, - userAgent: req.headers['user-agent'] ?? '' + userAgent: req.headers["user-agent"] ?? "", }); token = tokens.token; @@ -150,45 +150,45 @@ export const completeAccountSignup = async (req: Request, res: Response) => { "email": email, "eventName": "Sign Up", "firstName": firstName, - "lastName": lastName + "lastName": lastName, }, { headers: { "Accept": "application/json", - "Authorization": "Bearer " + (await getLoopsApiKey()) + "Authorization": "Bearer " + (await getLoopsApiKey()), }, }); } // store (refresh) token in httpOnly cookie - res.cookie('jid', tokens.refreshToken, { + res.cookie("jid", tokens.refreshToken, { httpOnly: true, - path: '/', - sameSite: 'strict', - secure: await getHttpsEnabled() + path: "/", + sameSite: "strict", + secure: await getHttpsEnabled(), }); const postHogClient = await TelemetryService.getPostHogClient(); if (postHogClient) { postHogClient.capture({ - event: 'User Signed Up', + event: "User Signed Up", distinctId: email, properties: { email, - attributionSource - } + attributionSource, + }, }); } } catch (err) { Sentry.setUser(null); Sentry.captureException(err); return res.status(400).send({ - message: 'Failed to complete account setup' + message: "Failed to complete account setup", }); } return res.status(200).send({ - message: 'Successfully set up account', + message: "Successfully set up account", user, - token + token, }); }; diff --git a/backend/src/controllers/v3/workspacesController.ts b/backend/src/controllers/v3/workspacesController.ts index aac6682d7..4298adba2 100644 --- a/backend/src/controllers/v3/workspacesController.ts +++ b/backend/src/controllers/v3/workspacesController.ts @@ -1,7 +1,7 @@ -import { Request, Response } from 'express'; -import { Types } from 'mongoose'; -import { Secret } from '../../models'; -import { SecretService } from'../../services'; +import { Request, Response } from "express"; +import { Types } from "mongoose"; +import { Secret } from "../../models"; +import { SecretService } from"../../services"; /** * Return whether or not all secrets in workspace with id [workspaceId] @@ -16,8 +16,8 @@ export const getWorkspaceBlindIndexStatus = async (req: Request, res: Response) const secretsWithoutBlindIndex = await Secret.countDocuments({ workspace: new Types.ObjectId(workspaceId), secretBlindIndex: { - $exists: false - } + $exists: false, + }, }); return res.status(200).send(secretsWithoutBlindIndex === 0); @@ -30,11 +30,11 @@ export const getWorkspaceSecrets = async (req: Request, res: Response) => { const { workspaceId } = req.params; const secrets = await Secret.find({ - workspace: new Types.ObjectId (workspaceId) + workspace: new Types.ObjectId (workspaceId), }); return res.status(200).send({ - secrets + secrets, }); } @@ -51,14 +51,14 @@ export const nameWorkspaceSecrets = async (req: Request, res: Response) => { const { workspaceId } = req.params; const { - secretsToUpdate + secretsToUpdate, }: { secretsToUpdate: SecretToUpdate[]; } = req.body; // get secret blind index salt const salt = await SecretService.getSecretBlindIndexSalt({ - workspaceId: new Types.ObjectId(workspaceId) + workspaceId: new Types.ObjectId(workspaceId), }); // update secret blind indices @@ -66,18 +66,18 @@ export const nameWorkspaceSecrets = async (req: Request, res: Response) => { secretsToUpdate.map(async (secretToUpdate: SecretToUpdate) => { const secretBlindIndex = await SecretService.generateSecretBlindIndexWithSalt({ secretName: secretToUpdate.secretName, - salt + salt, }); return ({ updateOne: { filter: { - _id: new Types.ObjectId(secretToUpdate._id) + _id: new Types.ObjectId(secretToUpdate._id), }, update: { - secretBlindIndex - } - } + secretBlindIndex, + }, + }, }); }) ); @@ -85,6 +85,6 @@ export const nameWorkspaceSecrets = async (req: Request, res: Response) => { await Secret.bulkWrite(operations); return res.status(200).send({ - message: 'Successfully named workspace secrets' + message: "Successfully named workspace secrets", }); } \ No newline at end of file diff --git a/backend/src/ee/controllers/v1/actionController.ts b/backend/src/ee/controllers/v1/actionController.ts index 4b3117b20..484c25351 100644 --- a/backend/src/ee/controllers/v1/actionController.ts +++ b/backend/src/ee/controllers/v1/actionController.ts @@ -1,6 +1,6 @@ -import { Request, Response } from 'express'; -import { Action, SecretVersion } from '../../models'; -import { ActionNotFoundError } from '../../../utils/errors'; +import { Request, Response } from "express"; +import { Action } from "../../models"; +import { ActionNotFoundError } from "../../../utils/errors"; export const getAction = async (req: Request, res: Response) => { let action; @@ -10,21 +10,21 @@ export const getAction = async (req: Request, res: Response) => { action = await Action .findById(actionId) .populate([ - 'payload.secretVersions.oldSecretVersion', - 'payload.secretVersions.newSecretVersion' + "payload.secretVersions.oldSecretVersion", + "payload.secretVersions.newSecretVersion", ]); if (!action) throw ActionNotFoundError({ - message: 'Failed to find action' + message: "Failed to find action", }); } catch (err) { throw ActionNotFoundError({ - message: 'Failed to find action' + message: "Failed to find action", }); } return res.status(200).send({ - action + action, }); } diff --git a/backend/src/ee/controllers/v1/cloudProductsController.ts b/backend/src/ee/controllers/v1/cloudProductsController.ts index c7d60ca1a..e66fc66e5 100644 --- a/backend/src/ee/controllers/v1/cloudProductsController.ts +++ b/backend/src/ee/controllers/v1/cloudProductsController.ts @@ -1,7 +1,7 @@ -import { Request, Response } from 'express'; -import { EELicenseService } from '../../services'; -import { getLicenseServerUrl } from '../../../config'; -import { licenseServerKeyRequest } from '../../../config/request'; +import { Request, Response } from "express"; +import { EELicenseService } from "../../services"; +import { getLicenseServerUrl } from "../../../config"; +import { licenseServerKeyRequest } from "../../../config/request"; /** * Return available cloud product information. @@ -11,9 +11,9 @@ import { licenseServerKeyRequest } from '../../../config/request'; * @returns */ export const getCloudProducts = async (req: Request, res: Response) => { - const billingCycle = req.query['billing-cycle'] as string; + const billingCycle = req.query["billing-cycle"] as string; - if (EELicenseService.instanceType === 'cloud') { + if (EELicenseService.instanceType === "cloud") { const { data } = await licenseServerKeyRequest.get( `${await getLicenseServerUrl()}/api/license-server/v1/cloud-products?billing-cycle=${billingCycle}` ); @@ -23,6 +23,6 @@ export const getCloudProducts = async (req: Request, res: Response) => { return res.status(200).send({ head: [], - rows: [] + rows: [], }); } diff --git a/backend/src/ee/controllers/v1/index.ts b/backend/src/ee/controllers/v1/index.ts index bf3992b17..c8b9f48a2 100644 --- a/backend/src/ee/controllers/v1/index.ts +++ b/backend/src/ee/controllers/v1/index.ts @@ -1,11 +1,11 @@ -import * as stripeController from './stripeController'; -import * as secretController from './secretController'; -import * as secretSnapshotController from './secretSnapshotController'; -import * as organizationsController from './organizationsController'; -import * as workspaceController from './workspaceController'; -import * as actionController from './actionController'; -import * as membershipController from './membershipController'; -import * as cloudProductsController from './cloudProductsController'; +import * as stripeController from "./stripeController"; +import * as secretController from "./secretController"; +import * as secretSnapshotController from "./secretSnapshotController"; +import * as organizationsController from "./organizationsController"; +import * as workspaceController from "./workspaceController"; +import * as actionController from "./actionController"; +import * as membershipController from "./membershipController"; +import * as cloudProductsController from "./cloudProductsController"; export { stripeController, @@ -15,5 +15,5 @@ export { workspaceController, actionController, membershipController, - cloudProductsController + cloudProductsController, } \ No newline at end of file diff --git a/backend/src/ee/controllers/v1/membershipController.ts b/backend/src/ee/controllers/v1/membershipController.ts index 35534d19c..1a03d36d0 100644 --- a/backend/src/ee/controllers/v1/membershipController.ts +++ b/backend/src/ee/controllers/v1/membershipController.ts @@ -3,7 +3,7 @@ import { Membership, Workspace } from "../../../models"; import { IMembershipPermission } from "../../../models/membership"; import { BadRequestError, UnauthorizedRequestError } from "../../../utils/errors"; import { ADMIN, MEMBER } from "../../../variables/organization"; -import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from '../../../variables'; +import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from "../../../variables"; import { Builder } from "builder-pattern" import _ from "lodash"; @@ -39,7 +39,7 @@ export const denyMembershipPermissions = async (req: Request, res: Response) => throw BadRequestError({ message: "Something went wrong when locating the related workspace" }) } - const uniqueEnvironmentSlugs = new Set(_.uniq(_.map(relatedWorkspace.environments, 'slug'))); + const uniqueEnvironmentSlugs = new Set(_.uniq(_.map(relatedWorkspace.environments, "slug"))); sanitizedMembershipPermissionsUnique.forEach(permission => { if (!uniqueEnvironmentSlugs.has(permission.environmentSlug)) { @@ -59,6 +59,6 @@ export const denyMembershipPermissions = async (req: Request, res: Response) => } res.send({ - permissionsDenied: updatedMembershipWithPermissions.deniedPermissions + permissionsDenied: updatedMembershipWithPermissions.deniedPermissions, }) } diff --git a/backend/src/ee/controllers/v1/organizationsController.ts b/backend/src/ee/controllers/v1/organizationsController.ts index 2d2867d71..54c154c7a 100644 --- a/backend/src/ee/controllers/v1/organizationsController.ts +++ b/backend/src/ee/controllers/v1/organizationsController.ts @@ -1,7 +1,7 @@ -import { Request, Response } from 'express'; -import { getLicenseServerUrl } from '../../../config'; -import { licenseServerKeyRequest } from '../../../config/request'; -import { EELicenseService } from '../../services'; +import { Request, Response } from "express"; +import { getLicenseServerUrl } from "../../../config"; +import { licenseServerKeyRequest } from "../../../config/request"; +import { EELicenseService } from "../../services"; /** * Return the organization's current plan and allowed feature set @@ -25,13 +25,13 @@ export const getOrganizationPlan = async (req: Request, res: Response) => { */ export const updateOrganizationPlan = async (req: Request, res: Response) => { const { - productId + productId, } = req.body; const { data } = await licenseServerKeyRequest.patch( `${await getLicenseServerUrl()}/api/license-server/v1/customers/${req.organization.customerId}/cloud-plan`, { - productId + productId, } ); @@ -47,7 +47,7 @@ export const getOrganizationPmtMethods = async (req: Request, res: Response) => ); return res.status(200).send({ - pmtMethods + pmtMethods, }); } @@ -57,19 +57,19 @@ export const getOrganizationPmtMethods = async (req: Request, res: Response) => export const addOrganizationPmtMethod = async (req: Request, res: Response) => { const { success_url, - cancel_url + cancel_url, } = req.body; const { data: { url } } = await licenseServerKeyRequest.post( `${await getLicenseServerUrl()}/api/license-server/v1/customers/${req.organization.customerId}/billing-details/payment-methods`, { success_url, - cancel_url + cancel_url, } ); return res.status(200).send({ - url + url, }); } diff --git a/backend/src/ee/controllers/v1/secretSnapshotController.ts b/backend/src/ee/controllers/v1/secretSnapshotController.ts index 445add15a..c10188b10 100644 --- a/backend/src/ee/controllers/v1/secretSnapshotController.ts +++ b/backend/src/ee/controllers/v1/secretSnapshotController.ts @@ -17,11 +17,11 @@ export const getSecretSnapshot = async (req: Request, res: Response) => { const secretSnapshot = await SecretSnapshot.findById(secretSnapshotId) .lean() .populate<{ secretVersions: ISecretVersion[] }>({ - path: 'secretVersions', + path: "secretVersions", populate: { - path: 'tags', - model: 'Tag' - } + path: "tags", + model: "Tag", + }, }) .populate<{ folderVersion: TFolderRootVersionSchema }>("folderVersion"); diff --git a/backend/src/ee/controllers/v1/stripeController.ts b/backend/src/ee/controllers/v1/stripeController.ts index 172df3220..bd3ed7704 100644 --- a/backend/src/ee/controllers/v1/stripeController.ts +++ b/backend/src/ee/controllers/v1/stripeController.ts @@ -1,6 +1,6 @@ -import { Request, Response } from 'express'; -import Stripe from 'stripe'; -import { getStripeSecretKey, getStripeWebhookSecret } from '../../../config'; +import { Request, Response } from "express"; +import Stripe from "stripe"; +import { getStripeSecretKey, getStripeWebhookSecret } from "../../../config"; /** * Handle service provisioning/un-provisioning via Stripe @@ -10,11 +10,11 @@ import { getStripeSecretKey, getStripeWebhookSecret } from '../../../config'; */ export const handleWebhook = async (req: Request, res: Response) => { const stripe = new Stripe(await getStripeSecretKey(), { - apiVersion: '2022-08-01' + apiVersion: "2022-08-01", }); // check request for valid stripe signature - const sig = req.headers['stripe-signature'] as string; + const sig = req.headers["stripe-signature"] as string; const event = stripe.webhooks.constructEvent( req.body, sig, @@ -22,7 +22,7 @@ export const handleWebhook = async (req: Request, res: Response) => { ); switch (event.type) { - case '': + case "": break; default: } diff --git a/backend/src/ee/controllers/v1/workspaceController.ts b/backend/src/ee/controllers/v1/workspaceController.ts index 166171ccd..5ec54d676 100644 --- a/backend/src/ee/controllers/v1/workspaceController.ts +++ b/backend/src/ee/controllers/v1/workspaceController.ts @@ -2,11 +2,11 @@ import { Request, Response } from "express"; import { PipelineStage, Types } from "mongoose"; import { Secret } from "../../../models"; import { - SecretSnapshot, - Log, - SecretVersion, - ISecretVersion, FolderVersion, + ISecretVersion, + Log, + SecretSnapshot, + SecretVersion, TFolderRootVersionSchema, } from "../../models"; import { EESecretService } from "../../services"; diff --git a/backend/src/ee/helpers/action.ts b/backend/src/ee/helpers/action.ts index 94e6bd24d..3279e86ca 100644 --- a/backend/src/ee/helpers/action.ts +++ b/backend/src/ee/helpers/action.ts @@ -1,17 +1,17 @@ -import { Types } from 'mongoose'; -import { Action } from '../models'; +import { Types } from "mongoose"; +import { Action } from "../models"; import { + getLatestNSecretSecretVersionIds, getLatestSecretVersionIds, - getLatestNSecretSecretVersionIds -} from '../helpers/secretVersion'; +} from "../helpers/secretVersion"; import { + ACTION_ADD_SECRETS, + ACTION_DELETE_SECRETS, ACTION_LOGIN, ACTION_LOGOUT, - ACTION_ADD_SECRETS, ACTION_READ_SECRETS, - ACTION_DELETE_SECRETS, ACTION_UPDATE_SECRETS, -} from '../../variables'; +} from "../../variables"; /** * Create an (audit) action for updating secrets @@ -26,7 +26,7 @@ const createActionUpdateSecret = async ({ serviceAccountId, serviceTokenDataId, workspaceId, - secretIds + secretIds, }: { name: string; userId?: Types.ObjectId; @@ -37,11 +37,11 @@ const createActionUpdateSecret = async ({ }) => { const latestSecretVersions = (await getLatestNSecretSecretVersionIds({ secretIds, - n: 2 + n: 2, })) .map((s) => ({ oldSecretVersion: s.versions[0]._id, - newSecretVersion: s.versions[1]._id + newSecretVersion: s.versions[1]._id, })); const action = await new Action({ @@ -51,8 +51,8 @@ const createActionUpdateSecret = async ({ serviceTokenData: serviceTokenDataId, workspace: workspaceId, payload: { - secretVersions: latestSecretVersions - } + secretVersions: latestSecretVersions, + }, }).save(); return action; @@ -72,7 +72,7 @@ const createActionSecret = async ({ serviceAccountId, serviceTokenDataId, workspaceId, - secretIds + secretIds, }: { name: string; userId?: Types.ObjectId; @@ -84,10 +84,10 @@ const createActionSecret = async ({ // case: action is adding, deleting, or reading secrets // -> add new secret versions const latestSecretVersions = (await getLatestSecretVersionIds({ - secretIds + secretIds, })) .map((s) => ({ - newSecretVersion: s.versionId + newSecretVersion: s.versionId, })); const action = await new Action({ @@ -97,8 +97,8 @@ const createActionSecret = async ({ serviceTokenData: serviceTokenDataId, workspace: workspaceId, payload: { - secretVersions: latestSecretVersions - } + secretVersions: latestSecretVersions, + }, }).save(); return action; @@ -116,7 +116,7 @@ const createActionClient = ({ name, userId, serviceAccountId, - serviceTokenDataId + serviceTokenDataId, }: { name: string; userId?: Types.ObjectId; @@ -127,7 +127,7 @@ const createActionClient = ({ name, user: userId, serviceAccount: serviceAccountId, - serviceTokenData: serviceTokenDataId + serviceTokenData: serviceTokenDataId, }).save(); return action; @@ -162,27 +162,27 @@ const createActionHelper = async ({ case ACTION_LOGOUT: action = await createActionClient({ name, - userId + userId, }); break; case ACTION_ADD_SECRETS: case ACTION_READ_SECRETS: case ACTION_DELETE_SECRETS: - if (!workspaceId || !secretIds) throw new Error('Missing required params workspace id or secret ids to create action secret'); + if (!workspaceId || !secretIds) throw new Error("Missing required params workspace id or secret ids to create action secret"); action = await createActionSecret({ name, userId, workspaceId, - secretIds + secretIds, }); break; case ACTION_UPDATE_SECRETS: - if (!workspaceId || !secretIds) throw new Error('Missing required params workspace id or secret ids to create action secret'); + if (!workspaceId || !secretIds) throw new Error("Missing required params workspace id or secret ids to create action secret"); action = await createActionUpdateSecret({ name, userId, workspaceId, - secretIds + secretIds, }); break; } @@ -191,5 +191,5 @@ const createActionHelper = async ({ } export { - createActionHelper + createActionHelper, }; diff --git a/backend/src/ee/helpers/checkMembershipPermissions.ts b/backend/src/ee/helpers/checkMembershipPermissions.ts index c97a51619..4f6ddc771 100644 --- a/backend/src/ee/helpers/checkMembershipPermissions.ts +++ b/backend/src/ee/helpers/checkMembershipPermissions.ts @@ -1,7 +1,7 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import _ from "lodash"; import { Membership } from "../../models"; -import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from '../../variables'; +import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from "../../variables"; export const userHasWorkspaceAccess = async (userId: Types.ObjectId, workspaceId: Types.ObjectId, environment: string, action: any) => { const membershipForWorkspace = await Membership.findOne({ workspace: workspaceId, user: userId }) diff --git a/backend/src/ee/helpers/log.ts b/backend/src/ee/helpers/log.ts index 5b6d78f31..feb52d151 100644 --- a/backend/src/ee/helpers/log.ts +++ b/backend/src/ee/helpers/log.ts @@ -1,8 +1,8 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { + IAction, Log, - IAction -} from '../models'; +} from "../models"; /** * Create an (audit) log @@ -21,7 +21,7 @@ const createLogHelper = async ({ workspaceId, actions, channel, - ipAddress + ipAddress, }: { userId?: Types.ObjectId; serviceAccountId?: Types.ObjectId; @@ -39,12 +39,12 @@ const createLogHelper = async ({ actionNames: actions.map((a) => a.name), actions, channel, - ipAddress + ipAddress, }).save(); return log; } export { - createLogHelper + createLogHelper, } diff --git a/backend/src/ee/helpers/secret.ts b/backend/src/ee/helpers/secret.ts index b315310cb..54b26f56e 100644 --- a/backend/src/ee/helpers/secret.ts +++ b/backend/src/ee/helpers/secret.ts @@ -1,10 +1,10 @@ import { Types } from "mongoose"; -import { Secret, ISecret } from "../../models"; +import { Secret } from "../../models"; import { + FolderVersion, + ISecretVersion, SecretSnapshot, SecretVersion, - ISecretVersion, - FolderVersion, } from "../models"; /** diff --git a/backend/src/ee/middleware/index.ts b/backend/src/ee/middleware/index.ts index ff9267965..a984d924b 100644 --- a/backend/src/ee/middleware/index.ts +++ b/backend/src/ee/middleware/index.ts @@ -1,7 +1,7 @@ -import requireLicenseAuth from './requireLicenseAuth'; -import requireSecretSnapshotAuth from './requireSecretSnapshotAuth'; +import requireLicenseAuth from "./requireLicenseAuth"; +import requireSecretSnapshotAuth from "./requireSecretSnapshotAuth"; export { requireLicenseAuth, - requireSecretSnapshotAuth + requireSecretSnapshotAuth, } \ No newline at end of file diff --git a/backend/src/ee/middleware/requireLicenseAuth.ts b/backend/src/ee/middleware/requireLicenseAuth.ts index c577563f3..476a3e82b 100644 --- a/backend/src/ee/middleware/requireLicenseAuth.ts +++ b/backend/src/ee/middleware/requireLicenseAuth.ts @@ -1,4 +1,4 @@ -import { Request, Response, NextFunction } from 'express'; +import { NextFunction, Request, Response } from "express"; /** * Validate if organization hosting meets license requirements to @@ -7,7 +7,7 @@ import { Request, Response, NextFunction } from 'express'; * @param {String[]} obj.acceptedTiers */ const requireLicenseAuth = ({ - acceptedTiers + acceptedTiers, }: { acceptedTiers: string[]; }) => { diff --git a/backend/src/ee/middleware/requireSecretSnapshotAuth.ts b/backend/src/ee/middleware/requireSecretSnapshotAuth.ts index af4d1e21c..7cc5d1de7 100644 --- a/backend/src/ee/middleware/requireSecretSnapshotAuth.ts +++ b/backend/src/ee/middleware/requireSecretSnapshotAuth.ts @@ -1,9 +1,9 @@ -import { Request, Response, NextFunction } from 'express'; -import { UnauthorizedRequestError, SecretSnapshotNotFoundError } from '../../utils/errors'; -import { SecretSnapshot } from '../models'; +import { NextFunction, Request, Response } from "express"; +import { SecretSnapshotNotFoundError } from "../../utils/errors"; +import { SecretSnapshot } from "../models"; import { - validateMembership -} from '../../helpers/membership'; + validateMembership, +} from "../../helpers/membership"; /** * Validate if user on request has proper membership for secret snapshot @@ -15,7 +15,7 @@ import { const requireSecretSnapshotAuth = ({ acceptedRoles, }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; }) => { return async (req: Request, res: Response, next: NextFunction) => { const { secretSnapshotId } = req.params; @@ -24,14 +24,14 @@ const requireSecretSnapshotAuth = ({ if (!secretSnapshot) { return next(SecretSnapshotNotFoundError({ - message: 'Failed to find secret snapshot' + message: "Failed to find secret snapshot", })); } await validateMembership({ userId: req.user._id, workspaceId: secretSnapshot.workspace, - acceptedRoles + acceptedRoles, }); req.secretSnapshot = secretSnapshot as any; diff --git a/backend/src/ee/models/action.ts b/backend/src/ee/models/action.ts index 055e144fd..2e8432914 100644 --- a/backend/src/ee/models/action.ts +++ b/backend/src/ee/models/action.ts @@ -1,12 +1,12 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; import { + ACTION_ADD_SECRETS, + ACTION_DELETE_SECRETS, ACTION_LOGIN, ACTION_LOGOUT, - ACTION_ADD_SECRETS, - ACTION_UPDATE_SECRETS, ACTION_READ_SECRETS, - ACTION_DELETE_SECRETS -} from '../../variables'; + ACTION_UPDATE_SECRETS, +} from "../../variables"; export interface IAction { name: string; @@ -30,42 +30,42 @@ const actionSchema = new Schema( ACTION_ADD_SECRETS, ACTION_UPDATE_SECRETS, ACTION_READ_SECRETS, - ACTION_DELETE_SECRETS - ] + ACTION_DELETE_SECRETS, + ], }, user: { type: Schema.Types.ObjectId, - ref: 'User' + ref: "User", }, serviceAccount: { type: Schema.Types.ObjectId, - ref: 'ServiceAccount' + ref: "ServiceAccount", }, serviceTokenData: { type: Schema.Types.ObjectId, - ref: 'ServiceTokenData' + ref: "ServiceTokenData", }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace' + ref: "Workspace", }, payload: { secretVersions: [{ oldSecretVersion: { type: Schema.Types.ObjectId, - ref: 'SecretVersion' + ref: "SecretVersion", }, newSecretVersion: { type: Schema.Types.ObjectId, - ref: 'SecretVersion' - } - }] - } + ref: "SecretVersion", + }, + }], + }, }, { - timestamps: true + timestamps: true, } ); -const Action = model('Action', actionSchema); +const Action = model("Action", actionSchema); export default Action; \ No newline at end of file diff --git a/backend/src/ee/models/folderVersion.ts b/backend/src/ee/models/folderVersion.ts index f0fa5afbf..4bfa2f67c 100644 --- a/backend/src/ee/models/folderVersion.ts +++ b/backend/src/ee/models/folderVersion.ts @@ -1,4 +1,4 @@ -import { model, Schema, Types } from "mongoose"; +import { Schema, Types, model } from "mongoose"; export type TFolderRootVersionSchema = { _id: Types.ObjectId; diff --git a/backend/src/ee/models/log.ts b/backend/src/ee/models/log.ts index 9ed552640..5e3d0dbbb 100644 --- a/backend/src/ee/models/log.ts +++ b/backend/src/ee/models/log.ts @@ -1,12 +1,12 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; import { + ACTION_ADD_SECRETS, + ACTION_DELETE_SECRETS, ACTION_LOGIN, ACTION_LOGOUT, - ACTION_ADD_SECRETS, - ACTION_UPDATE_SECRETS, ACTION_READ_SECRETS, - ACTION_DELETE_SECRETS -} from '../../variables'; + ACTION_UPDATE_SECRETS, +} from "../../variables"; export interface ILog { _id: Types.ObjectId; @@ -24,19 +24,19 @@ const logSchema = new Schema( { user: { type: Schema.Types.ObjectId, - ref: 'User' + ref: "User", }, serviceAccount: { type: Schema.Types.ObjectId, - ref: 'ServiceAccount' + ref: "ServiceAccount", }, serviceTokenData: { type: Schema.Types.ObjectId, - ref: 'ServiceTokenData' + ref: "ServiceTokenData", }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace' + ref: "Workspace", }, actionNames: { type: [String], @@ -46,28 +46,28 @@ const logSchema = new Schema( ACTION_ADD_SECRETS, ACTION_UPDATE_SECRETS, ACTION_READ_SECRETS, - ACTION_DELETE_SECRETS + ACTION_DELETE_SECRETS, ], - required: true + required: true, }, actions: [{ type: Schema.Types.ObjectId, - ref: 'Action', - required: true + ref: "Action", + required: true, }], channel: { type: String, - enum: ['web', 'cli', 'auto', 'k8-operator', 'other'], - required: true + enum: ["web", "cli", "auto", "k8-operator", "other"], + required: true, }, ipAddress: { - type: String - } + type: String, + }, }, { - timestamps: true + timestamps: true, } ); -const Log = model('Log', logSchema); +const Log = model("Log", logSchema); export default Log; \ No newline at end of file diff --git a/backend/src/ee/models/secretSnapshot.ts b/backend/src/ee/models/secretSnapshot.ts index cfc5b03b7..d0fb61110 100644 --- a/backend/src/ee/models/secretSnapshot.ts +++ b/backend/src/ee/models/secretSnapshot.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from "mongoose"; +import { Schema, Types, model } from "mongoose"; export interface ISecretSnapshot { workspace: Types.ObjectId; diff --git a/backend/src/ee/models/secretVersion.ts b/backend/src/ee/models/secretVersion.ts index b915e640e..1922d4539 100644 --- a/backend/src/ee/models/secretVersion.ts +++ b/backend/src/ee/models/secretVersion.ts @@ -1,10 +1,10 @@ -import { Schema, model, Types } from "mongoose"; +import { Schema, Types, model } from "mongoose"; import { - SECRET_SHARED, - SECRET_PERSONAL, ALGORITHM_AES_256_GCM, - ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64, + ENCODING_SCHEME_UTF8, + SECRET_PERSONAL, + SECRET_SHARED, } from "../../variables"; export interface ISecretVersion { @@ -114,9 +114,9 @@ const secretVersionSchema = new Schema( required: true, }, tags: { - ref: 'Tag', + ref: "Tag", type: [Schema.Types.ObjectId], - default: [] + default: [], }, }, { diff --git a/backend/src/ee/routes/v1/action.ts b/backend/src/ee/routes/v1/action.ts index 5dca83cf9..b77a84188 100644 --- a/backend/src/ee/routes/v1/action.ts +++ b/backend/src/ee/routes/v1/action.ts @@ -1,15 +1,15 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { - validateRequest -} from '../../../middleware'; -import { param } from 'express-validator'; -import { actionController } from '../../controllers/v1'; + validateRequest, +} from "../../../middleware"; +import { param } from "express-validator"; +import { actionController } from "../../controllers/v1"; // TODO: put into action controller router.get( - '/:actionId', - param('actionId').exists().trim(), + "/:actionId", + param("actionId").exists().trim(), validateRequest, actionController.getAction ); diff --git a/backend/src/ee/routes/v1/cloudProducts.ts b/backend/src/ee/routes/v1/cloudProducts.ts index 73af00aca..a9be34747 100644 --- a/backend/src/ee/routes/v1/cloudProducts.ts +++ b/backend/src/ee/routes/v1/cloudProducts.ts @@ -1,18 +1,18 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, - validateRequest -} from '../../../middleware'; -import { query } from 'express-validator'; -import { cloudProductsController } from '../../controllers/v1'; + validateRequest, +} from "../../../middleware"; +import { query } from "express-validator"; +import { cloudProductsController } from "../../controllers/v1"; router.get( - '/', + "/", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), - query('billing-cycle').exists().isIn(['monthly', 'yearly']), + query("billing-cycle").exists().isIn(["monthly", "yearly"]), validateRequest, cloudProductsController.getCloudProducts ); diff --git a/backend/src/ee/routes/v1/index.ts b/backend/src/ee/routes/v1/index.ts index 7568e45d6..c68196c64 100644 --- a/backend/src/ee/routes/v1/index.ts +++ b/backend/src/ee/routes/v1/index.ts @@ -1,9 +1,9 @@ -import secret from './secret'; -import secretSnapshot from './secretSnapshot'; -import organizations from './organizations'; -import workspace from './workspace'; -import action from './action'; -import cloudProducts from './cloudProducts'; +import secret from "./secret"; +import secretSnapshot from "./secretSnapshot"; +import organizations from "./organizations"; +import workspace from "./workspace"; +import action from "./action"; +import cloudProducts from "./cloudProducts"; export { secret, @@ -11,5 +11,5 @@ export { organizations, workspace, action, - cloudProducts + cloudProducts, } \ No newline at end of file diff --git a/backend/src/ee/routes/v1/organizations.ts b/backend/src/ee/routes/v1/organizations.ts index 711b5a17f..5a9c603b1 100644 --- a/backend/src/ee/routes/v1/organizations.ts +++ b/backend/src/ee/routes/v1/organizations.ts @@ -1,86 +1,86 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, requireOrganizationAuth, - validateRequest -} from '../../../middleware'; -import { param, body, query } from 'express-validator'; -import { organizationsController } from '../../controllers/v1'; + validateRequest, +} from "../../../middleware"; +import { body, param, query } from "express-validator"; +import { organizationsController } from "../../controllers/v1"; import { - OWNER, ADMIN, MEMBER, ACCEPTED -} from '../../../variables'; + ACCEPTED, ADMIN, MEMBER, OWNER, +} from "../../../variables"; router.get( - '/:organizationId/plan', + "/:organizationId/plan", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), - query('workspaceId').optional().isString(), + param("organizationId").exists().trim(), + query("workspaceId").optional().isString(), validateRequest, organizationsController.getOrganizationPlan ); router.patch( - '/:organizationId/plan', + "/:organizationId/plan", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), - body('productId').exists().isString(), + param("organizationId").exists().trim(), + body("productId").exists().isString(), validateRequest, organizationsController.updateOrganizationPlan ); router.get( - '/:organizationId/billing-details/payment-methods', + "/:organizationId/billing-details/payment-methods", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationsController.getOrganizationPmtMethods ); router.post( - '/:organizationId/billing-details/payment-methods', + "/:organizationId/billing-details/payment-methods", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), - body('success_url').exists().isString(), - body('cancel_url').exists().isString(), + param("organizationId").exists().trim(), + body("success_url").exists().isString(), + body("cancel_url").exists().isString(), validateRequest, organizationsController.addOrganizationPmtMethod ); router.delete( - '/:organizationId/billing-details/payment-methods/:pmtMethodId', + "/:organizationId/billing-details/payment-methods/:pmtMethodId", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationsController.deleteOrganizationPmtMethod ); diff --git a/backend/src/ee/routes/v1/secret.ts b/backend/src/ee/routes/v1/secret.ts index 3e956a388..7be6f311a 100644 --- a/backend/src/ee/routes/v1/secret.ts +++ b/backend/src/ee/routes/v1/secret.ts @@ -1,46 +1,46 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, requireSecretAuth, - validateRequest -} from '../../../middleware'; -import { query, param, body } from 'express-validator'; -import { secretController } from '../../controllers/v1'; + validateRequest, +} from "../../../middleware"; +import { body, param, query } from "express-validator"; +import { secretController } from "../../controllers/v1"; import { ADMIN, MEMBER, PERMISSION_READ_SECRETS, - PERMISSION_WRITE_SECRETS -} from '../../../variables'; + PERMISSION_WRITE_SECRETS, +} from "../../../variables"; router.get( - '/:secretId/secret-versions', + "/:secretId/secret-versions", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), requireSecretAuth({ acceptedRoles: [ADMIN, MEMBER], - requiredPermissions: [PERMISSION_READ_SECRETS] + requiredPermissions: [PERMISSION_READ_SECRETS], }), - param('secretId').exists().trim(), - query('offset').exists().isInt(), - query('limit').exists().isInt(), + param("secretId").exists().trim(), + query("offset").exists().isInt(), + query("limit").exists().isInt(), validateRequest, secretController.getSecretVersions ); router.post( - '/:secretId/secret-versions/rollback', + "/:secretId/secret-versions/rollback", requireAuth({ - acceptedAuthModes: ['jwt', 'apiKey'] + acceptedAuthModes: ["jwt", "apiKey"], }), requireSecretAuth({ acceptedRoles: [ADMIN, MEMBER], - requiredPermissions: [PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS] + requiredPermissions: [PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS], }), - param('secretId').exists().trim(), - body('version').exists().isInt(), + param("secretId").exists().trim(), + body("version").exists().isInt(), secretController.rollbackSecretVersion ); diff --git a/backend/src/ee/routes/v1/secretSnapshot.ts b/backend/src/ee/routes/v1/secretSnapshot.ts index 80aa7d1ee..fe0c2690c 100644 --- a/backend/src/ee/routes/v1/secretSnapshot.ts +++ b/backend/src/ee/routes/v1/secretSnapshot.ts @@ -1,25 +1,25 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { - requireSecretSnapshotAuth -} from '../../middleware'; + requireSecretSnapshotAuth, +} from "../../middleware"; import { requireAuth, - validateRequest -} from '../../../middleware'; -import { param } from 'express-validator'; -import { ADMIN, MEMBER } from '../../../variables'; -import { secretSnapshotController } from '../../controllers/v1'; + validateRequest, +} from "../../../middleware"; +import { param } from "express-validator"; +import { ADMIN, MEMBER } from "../../../variables"; +import { secretSnapshotController } from "../../controllers/v1"; router.get( - '/:secretSnapshotId', + "/:secretSnapshotId", requireAuth({ - acceptedAuthModes: ['jwt'] + acceptedAuthModes: ["jwt"], }), requireSecretSnapshotAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - param('secretSnapshotId').exists().trim(), + param("secretSnapshotId").exists().trim(), validateRequest, secretSnapshotController.getSecretSnapshot ); diff --git a/backend/src/ee/routes/v1/stripe.ts b/backend/src/ee/routes/v1/stripe.ts index 02d68c4ea..101f44f24 100644 --- a/backend/src/ee/routes/v1/stripe.ts +++ b/backend/src/ee/routes/v1/stripe.ts @@ -1,7 +1,7 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { stripeController } from '../../controllers/v1'; +import { stripeController } from "../../controllers/v1"; -router.post('/webhook', stripeController.handleWebhook); +router.post("/webhook", stripeController.handleWebhook); export default router; \ No newline at end of file diff --git a/backend/src/ee/routes/v1/workspace.ts b/backend/src/ee/routes/v1/workspace.ts index 2b840892f..40392b45f 100644 --- a/backend/src/ee/routes/v1/workspace.ts +++ b/backend/src/ee/routes/v1/workspace.ts @@ -5,7 +5,7 @@ import { requireWorkspaceAuth, validateRequest, } from "../../../middleware"; -import { param, query, body } from "express-validator"; +import { body, param, query } from "express-validator"; import { ADMIN, MEMBER } from "../../../variables"; import { workspaceController } from "../../controllers/v1"; diff --git a/backend/src/ee/services/EELicenseService.ts b/backend/src/ee/services/EELicenseService.ts index 89e71e57b..6417eeb1c 100644 --- a/backend/src/ee/services/EELicenseService.ts +++ b/backend/src/ee/services/EELicenseService.ts @@ -1,22 +1,22 @@ -import * as Sentry from '@sentry/node'; -import NodeCache from 'node-cache'; +import * as Sentry from "@sentry/node"; +import NodeCache from "node-cache"; import { getLicenseKey, getLicenseServerKey, - getLicenseServerUrl -} from '../../config'; + getLicenseServerUrl, +} from "../../config"; import { licenseKeyRequest, licenseServerKeyRequest, + refreshLicenseKeyToken, refreshLicenseServerKeyToken, - refreshLicenseKeyToken -} from '../../config/request'; -import { Organization } from '../../models'; -import { OrganizationNotFoundError } from '../../utils/errors'; +} from "../../config/request"; +import { Organization } from "../../models"; +import { OrganizationNotFoundError } from "../../utils/errors"; interface FeatureSet { _id: string | null; - slug: 'starter' | 'team' | 'pro' | 'enterprise' | null; + slug: "starter" | "team" | "pro" | "enterprise" | null; tier: number; workspaceLimit: number | null; workspacesUsed: number; @@ -42,7 +42,7 @@ class EELicenseService { private readonly _isLicenseValid: boolean; // TODO: deprecate - public instanceType: 'self-hosted' | 'enterprise-self-hosted' | 'cloud' = 'self-hosted'; + public instanceType: "self-hosted" | "enterprise-self-hosted" | "cloud" = "self-hosted"; public globalFeatureSet: FeatureSet = { _id: null, @@ -59,7 +59,7 @@ class EELicenseService { rbac: true, customRateLimits: true, customAlerts: true, - auditLogs: false + auditLogs: false, } public localFeatureSet: NodeCache; @@ -67,14 +67,14 @@ class EELicenseService { constructor() { this._isLicenseValid = true; this.localFeatureSet = new NodeCache({ - stdTTL: 300 + stdTTL: 300, }); } public async getPlan(organizationId: string, workspaceId?: string): Promise { try { - if (this.instanceType === 'cloud') { - const cachedPlan = this.localFeatureSet.get(`${organizationId}-${workspaceId ?? ''}`); + if (this.instanceType === "cloud") { + const cachedPlan = this.localFeatureSet.get(`${organizationId}-${workspaceId ?? ""}`); if (cachedPlan) { return cachedPlan; } @@ -91,7 +91,7 @@ class EELicenseService { const { data: { currentPlan } } = await licenseServerKeyRequest.get(url); // cache fetched plan for organization - this.localFeatureSet.set(`${organizationId}-${workspaceId ?? ''}`, currentPlan); + this.localFeatureSet.set(`${organizationId}-${workspaceId ?? ""}`, currentPlan); return currentPlan; } @@ -103,8 +103,8 @@ class EELicenseService { } public async refreshPlan(organizationId: string, workspaceId?: string) { - if (this.instanceType === 'cloud') { - this.localFeatureSet.del(`${organizationId}-${workspaceId ?? ''}`); + if (this.instanceType === "cloud") { + this.localFeatureSet.del(`${organizationId}-${workspaceId ?? ""}`); await this.getPlan(organizationId, workspaceId); } } @@ -119,7 +119,7 @@ class EELicenseService { const token = await refreshLicenseServerKeyToken() if (token) { - this.instanceType = 'cloud'; + this.instanceType = "cloud"; } return; @@ -135,7 +135,7 @@ class EELicenseService { ); this.globalFeatureSet = currentPlan; - this.instanceType = 'enterprise-self-hosted'; + this.instanceType = "enterprise-self-hosted"; } } } catch (err) { diff --git a/backend/src/ee/services/EELogService.ts b/backend/src/ee/services/EELogService.ts index 81d26765f..70f702953 100644 --- a/backend/src/ee/services/EELogService.ts +++ b/backend/src/ee/services/EELogService.ts @@ -1,14 +1,14 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IAction -} from '../models'; + IAction, +} from "../models"; import { - createLogHelper -} from '../helpers/log'; + createLogHelper, +} from "../helpers/log"; import { - createActionHelper -} from '../helpers/action'; -import EELicenseService from './EELicenseService'; + createActionHelper, +} from "../helpers/action"; +import EELicenseService from "./EELicenseService"; /** * Class to handle Enterprise Edition log actions @@ -31,7 +31,7 @@ class EELogService { workspaceId, actions, channel, - ipAddress + ipAddress, }: { userId?: Types.ObjectId; serviceAccountId?: Types.ObjectId; @@ -49,7 +49,7 @@ class EELogService { workspaceId, actions, channel, - ipAddress + ipAddress, }) } @@ -68,7 +68,7 @@ class EELogService { serviceAccountId, serviceTokenDataId, workspaceId, - secretIds + secretIds, }: { name: string; userId?: Types.ObjectId; @@ -83,7 +83,7 @@ class EELogService { serviceAccountId, serviceTokenDataId, workspaceId, - secretIds + secretIds, }); } } diff --git a/backend/src/ee/services/EESecretService.ts b/backend/src/ee/services/EESecretService.ts index a0803dd36..5a1c4d3cb 100644 --- a/backend/src/ee/services/EESecretService.ts +++ b/backend/src/ee/services/EESecretService.ts @@ -1,11 +1,11 @@ -import { Types } from 'mongoose'; -import { ISecretVersion } from '../models'; +import { Types } from "mongoose"; +import { ISecretVersion } from "../models"; import { - takeSecretSnapshotHelper, addSecretVersionsHelper, markDeletedSecretVersionsHelper, -} from '../helpers/secret'; -import EELicenseService from './EELicenseService'; + takeSecretSnapshotHelper, +} from "../helpers/secret"; +import EELicenseService from "./EELicenseService"; /** * Class to handle Enterprise Edition secret actions diff --git a/backend/src/ee/services/index.ts b/backend/src/ee/services/index.ts index b3544bcff..afc3fb80e 100644 --- a/backend/src/ee/services/index.ts +++ b/backend/src/ee/services/index.ts @@ -5,5 +5,5 @@ import EELogService from "./EELogService"; export { EELicenseService, EESecretService, - EELogService + EELogService, } \ No newline at end of file diff --git a/backend/src/events/index.ts b/backend/src/events/index.ts index 461a3ece6..d8198d2fb 100644 --- a/backend/src/events/index.ts +++ b/backend/src/events/index.ts @@ -1,5 +1,5 @@ import { eventPushSecrets } from "./secret" export { - eventPushSecrets + eventPushSecrets, } \ No newline at end of file diff --git a/backend/src/events/secret.ts b/backend/src/events/secret.ts index 6007dd682..23ff9f59c 100644 --- a/backend/src/events/secret.ts +++ b/backend/src/events/secret.ts @@ -1,8 +1,8 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { + EVENT_PULL_SECRETS, EVENT_PUSH_SECRETS, - EVENT_PULL_SECRETS -} from '../variables'; +} from "../variables"; interface PushSecret { ciphertextKey: string; @@ -13,7 +13,7 @@ interface PushSecret { ivValue: string; tagValue: string; hashValue: string; - type: 'shared' | 'personal'; + type: "shared" | "personal"; } /** @@ -24,7 +24,7 @@ interface PushSecret { */ const eventPushSecrets = ({ workspaceId, - environment + environment, }: { workspaceId: Types.ObjectId; environment?: string; @@ -35,7 +35,7 @@ const eventPushSecrets = ({ environment, payload: { - } + }, }); } @@ -55,10 +55,10 @@ const eventPullSecrets = ({ workspaceId, payload: { - } + }, }); } export { - eventPushSecrets + eventPushSecrets, } diff --git a/backend/src/helpers/auth.ts b/backend/src/helpers/auth.ts index ce61f3650..00ed43aba 100644 --- a/backend/src/helpers/auth.ts +++ b/backend/src/helpers/auth.ts @@ -1,36 +1,36 @@ -import { Types } from 'mongoose'; -import jwt from 'jsonwebtoken'; -import bcrypt from 'bcrypt'; +import { Types } from "mongoose"; +import jwt from "jsonwebtoken"; +import bcrypt from "bcrypt"; import { - IUser, - User, - ServiceTokenData, - ServiceAccount, APIKeyData, + ITokenVersion, + IUser, + ServiceAccount, + ServiceTokenData, TokenVersion, - ITokenVersion -} from '../models'; + User, +} from "../models"; import { - AccountNotFoundError, - ServiceTokenDataNotFoundError, - ServiceAccountNotFoundError, APIKeyDataNotFoundError, + AccountNotFoundError, + BadRequestError, + ServiceAccountNotFoundError, + ServiceTokenDataNotFoundError, UnauthorizedRequestError, - BadRequestError -} from '../utils/errors'; +} from "../utils/errors"; import { getJwtAuthLifetime, getJwtAuthSecret, getJwtProviderAuthSecret, getJwtRefreshLifetime, - getJwtRefreshSecret -} from '../config'; + getJwtRefreshSecret, +} from "../config"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; /** * @@ -39,41 +39,41 @@ import { */ export const validateAuthMode = ({ headers, - acceptedAuthModes + acceptedAuthModes, }: { headers: { [key: string]: string | string[] | undefined }, acceptedAuthModes: string[] }) => { - const apiKey = headers['x-api-key']; - const authHeader = headers['authorization']; + const apiKey = headers["x-api-key"]; + const authHeader = headers["authorization"]; let authMode, authTokenValue; if (apiKey === undefined && authHeader === undefined) { // case: no auth or X-API-KEY header present - throw BadRequestError({ message: 'Missing Authorization or X-API-KEY in request header.' }); + throw BadRequestError({ message: "Missing Authorization or X-API-KEY in request header." }); } - if (typeof apiKey === 'string') { + if (typeof apiKey === "string") { // case: treat request authentication type as via X-API-KEY (i.e. API Key) authMode = AUTH_MODE_API_KEY; authTokenValue = apiKey; } - if (typeof authHeader === 'string') { + if (typeof authHeader === "string") { // case: treat request authentication type as via Authorization header (i.e. either JWT or service token) - const [tokenType, tokenValue] = <[string, string]>authHeader.split(' ', 2) ?? [null, null] + const [tokenType, tokenValue] = <[string, string]>authHeader.split(" ", 2) ?? [null, null] if (tokenType === null) - throw BadRequestError({ message: `Missing Authorization Header in the request header.` }); - if (tokenType.toLowerCase() !== 'bearer') + throw BadRequestError({ message: "Missing Authorization Header in the request header." }); + if (tokenType.toLowerCase() !== "bearer") throw BadRequestError({ message: `The provided authentication type '${tokenType}' is not supported.` }); if (tokenValue === null) - throw BadRequestError({ message: 'Missing Authorization Body in the request header.' }); + throw BadRequestError({ message: "Missing Authorization Body in the request header." }); - switch (tokenValue.split('.', 1)[0]) { - case 'st': + switch (tokenValue.split(".", 1)[0]) { + case "st": authMode = AUTH_MODE_SERVICE_TOKEN; break; - case 'sa': + case "sa": authMode = AUTH_MODE_SERVICE_ACCOUNT; break; default: @@ -83,13 +83,13 @@ export const validateAuthMode = ({ authTokenValue = tokenValue; } - if (!authMode || !authTokenValue) throw BadRequestError({ message: 'Missing valid Authorization or X-API-KEY in request header.' }); + if (!authMode || !authTokenValue) throw BadRequestError({ message: "Missing valid Authorization or X-API-KEY in request header." }); - if (!acceptedAuthModes.includes(authMode)) throw BadRequestError({ message: 'The provided authentication type is not supported.' }); + if (!acceptedAuthModes.includes(authMode)) throw BadRequestError({ message: "The provided authentication type is not supported." }); return ({ authMode, - authTokenValue + authTokenValue, }); } @@ -100,7 +100,7 @@ export const validateAuthMode = ({ * @returns {User} user - user corresponding to JWT token */ export const getAuthUserPayload = async ({ - authTokenValue + authTokenValue, }: { authTokenValue: string; }) => { @@ -109,31 +109,31 @@ export const getAuthUserPayload = async ({ ); const user = await User.findOne({ - _id: new Types.ObjectId(decodedToken.userId) - }).select('+publicKey +accessVersion'); + _id: new Types.ObjectId(decodedToken.userId), + }).select("+publicKey +accessVersion"); - if (!user) throw AccountNotFoundError({ message: 'Failed to find user' }); + if (!user) throw AccountNotFoundError({ message: "Failed to find user" }); - if (!user?.publicKey) throw UnauthorizedRequestError({ message: 'Failed to authenticate user with partially set up account' }); + if (!user?.publicKey) throw UnauthorizedRequestError({ message: "Failed to authenticate user with partially set up account" }); const tokenVersion = await TokenVersion.findOneAndUpdate({ _id: new Types.ObjectId(decodedToken.tokenVersionId), - user: user._id + user: user._id, }, { - lastUsed: new Date() + lastUsed: new Date(), }); if (!tokenVersion) throw UnauthorizedRequestError({ - message: 'Failed to validate access token' + message: "Failed to validate access token", }); if (decodedToken.accessVersion !== tokenVersion.accessVersion) throw UnauthorizedRequestError({ - message: 'Failed to validate access token' + message: "Failed to validate access token", }); return ({ user, - tokenVersionId: tokenVersion._id + tokenVersionId: tokenVersion._id, }); } @@ -144,41 +144,41 @@ export const getAuthUserPayload = async ({ * @returns {ServiceTokenData} serviceTokenData - service token data */ export const getAuthSTDPayload = async ({ - authTokenValue + authTokenValue, }: { authTokenValue: string; }) => { - const [_, TOKEN_IDENTIFIER, TOKEN_SECRET] = <[string, string, string]>authTokenValue.split('.', 3); + const [_, TOKEN_IDENTIFIER, TOKEN_SECRET] = <[string, string, string]>authTokenValue.split(".", 3); let serviceTokenData = await ServiceTokenData - .findById(TOKEN_IDENTIFIER, '+secretHash +expiresAt'); + .findById(TOKEN_IDENTIFIER, "+secretHash +expiresAt"); if (!serviceTokenData) { - throw ServiceTokenDataNotFoundError({ message: 'Failed to find service token data' }); + throw ServiceTokenDataNotFoundError({ message: "Failed to find service token data" }); } else if (serviceTokenData?.expiresAt && new Date(serviceTokenData.expiresAt) < new Date()) { // case: service token expired await ServiceTokenData.findByIdAndDelete(serviceTokenData._id); throw UnauthorizedRequestError({ - message: 'Failed to authenticate expired service token' + message: "Failed to authenticate expired service token", }); } const isMatch = await bcrypt.compare(TOKEN_SECRET, serviceTokenData.secretHash); if (!isMatch) throw UnauthorizedRequestError({ - message: 'Failed to authenticate service token' + message: "Failed to authenticate service token", }); serviceTokenData = await ServiceTokenData .findOneAndUpdate({ - _id: new Types.ObjectId(TOKEN_IDENTIFIER) + _id: new Types.ObjectId(TOKEN_IDENTIFIER), }, { - lastUsed: new Date() + lastUsed: new Date(), }, { - new: true + new: true, }) - .select('+encryptedKey +iv +tag'); + .select("+encryptedKey +iv +tag"); - if (!serviceTokenData) throw ServiceTokenDataNotFoundError({ message: 'Failed to find service token data' }); + if (!serviceTokenData) throw ServiceTokenDataNotFoundError({ message: "Failed to find service token data" }); return serviceTokenData; } @@ -190,23 +190,23 @@ export const getAuthSTDPayload = async ({ * @returns {ServiceAccount} serviceAccount */ export const getAuthSAAKPayload = async ({ - authTokenValue + authTokenValue, }: { authTokenValue: string; }) => { - const [_, TOKEN_IDENTIFIER, TOKEN_SECRET] = <[string, string, string]>authTokenValue.split('.', 3); + const [_, TOKEN_IDENTIFIER, TOKEN_SECRET] = <[string, string, string]>authTokenValue.split(".", 3); const serviceAccount = await ServiceAccount.findById( - Buffer.from(TOKEN_IDENTIFIER, 'base64').toString('hex') - ).select('+secretHash'); + Buffer.from(TOKEN_IDENTIFIER, "base64").toString("hex") + ).select("+secretHash"); if (!serviceAccount) { - throw ServiceAccountNotFoundError({ message: 'Failed to find service account' }); + throw ServiceAccountNotFoundError({ message: "Failed to find service account" }); } const result = await bcrypt.compare(TOKEN_SECRET, serviceAccount.secretHash); if (!result) throw UnauthorizedRequestError({ - message: 'Failed to authenticate service account access key' + message: "Failed to authenticate service account access key", }); return serviceAccount; @@ -219,48 +219,48 @@ export const getAuthSAAKPayload = async ({ * @returns {APIKeyData} apiKeyData - API key data */ export const getAuthAPIKeyPayload = async ({ - authTokenValue + authTokenValue, }: { authTokenValue: string; }) => { - const [_, TOKEN_IDENTIFIER, TOKEN_SECRET] = <[string, string, string]>authTokenValue.split('.', 3); + const [_, TOKEN_IDENTIFIER, TOKEN_SECRET] = <[string, string, string]>authTokenValue.split(".", 3); let apiKeyData = await APIKeyData - .findById(TOKEN_IDENTIFIER, '+secretHash +expiresAt') - .populate<{ user: IUser }>('user', '+publicKey'); + .findById(TOKEN_IDENTIFIER, "+secretHash +expiresAt") + .populate<{ user: IUser }>("user", "+publicKey"); if (!apiKeyData) { - throw APIKeyDataNotFoundError({ message: 'Failed to find API key data' }); + throw APIKeyDataNotFoundError({ message: "Failed to find API key data" }); } else if (apiKeyData?.expiresAt && new Date(apiKeyData.expiresAt) < new Date()) { // case: API key expired await APIKeyData.findByIdAndDelete(apiKeyData._id); throw UnauthorizedRequestError({ - message: 'Failed to authenticate expired API key' + message: "Failed to authenticate expired API key", }); } const isMatch = await bcrypt.compare(TOKEN_SECRET, apiKeyData.secretHash); if (!isMatch) throw UnauthorizedRequestError({ - message: 'Failed to authenticate API key' + message: "Failed to authenticate API key", }); apiKeyData = await APIKeyData.findOneAndUpdate({ - _id: new Types.ObjectId(TOKEN_IDENTIFIER) + _id: new Types.ObjectId(TOKEN_IDENTIFIER), }, { - lastUsed: new Date() + lastUsed: new Date(), }, { - new: true + new: true, }); if (!apiKeyData) { - throw APIKeyDataNotFoundError({ message: 'Failed to find API key data' }); + throw APIKeyDataNotFoundError({ message: "Failed to find API key data" }); } - const user = await User.findById(apiKeyData.user).select('+publicKey'); + const user = await User.findById(apiKeyData.user).select("+publicKey"); if (!user) { throw AccountNotFoundError({ - message: 'Failed to find user' + message: "Failed to find user", }); } @@ -278,7 +278,7 @@ export const getAuthAPIKeyPayload = async ({ export const issueAuthTokens = async ({ userId, ip, - userAgent + userAgent, }: { userId: Types.ObjectId; ip: string; @@ -290,7 +290,7 @@ export const issueAuthTokens = async ({ tokenVersion = await TokenVersion.findOne({ user: userId, ip, - userAgent + userAgent, }); if (!tokenVersion) { @@ -302,7 +302,7 @@ export const issueAuthTokens = async ({ accessVersion: 0, ip, userAgent, - lastUsed: new Date() + lastUsed: new Date(), }).save(); } @@ -311,25 +311,25 @@ export const issueAuthTokens = async ({ payload: { userId, tokenVersionId: tokenVersion._id.toString(), - accessVersion: tokenVersion.accessVersion + accessVersion: tokenVersion.accessVersion, }, expiresIn: await getJwtAuthLifetime(), - secret: await getJwtAuthSecret() + secret: await getJwtAuthSecret(), }); const refreshToken = createToken({ payload: { userId, tokenVersionId: tokenVersion._id.toString(), - refreshVersion: tokenVersion.refreshVersion + refreshVersion: tokenVersion.refreshVersion, }, expiresIn: await getJwtRefreshLifetime(), - secret: await getJwtRefreshSecret() + secret: await getJwtRefreshSecret(), }); return { token, - refreshToken + refreshToken, }; }; @@ -342,12 +342,12 @@ export const clearTokens = async (tokenVersionId: Types.ObjectId): Promise // increment refreshVersion on user by 1 await TokenVersion.findOneAndUpdate({ - _id: tokenVersionId + _id: tokenVersionId, }, { $inc: { refreshVersion: 1, - accessVersion: 1 - } + accessVersion: 1, + }, }); }; @@ -362,14 +362,14 @@ export const clearTokens = async (tokenVersionId: Types.ObjectId): Promise export const createToken = ({ payload, expiresIn, - secret + secret, }: { payload: any; expiresIn: string | number; secret: string; }) => { return jwt.sign(payload, secret, { - expiresIn + expiresIn, }); }; @@ -383,7 +383,7 @@ export const validateProviderAuthToken = async ({ providerAuthToken?: string; }) => { if (!providerAuthToken) { - throw new Error('Invalid authentication request.'); + throw new Error("Invalid authentication request."); } const decodedToken = ( @@ -394,6 +394,6 @@ export const validateProviderAuthToken = async ({ decodedToken.authProvider !== user.authProvider || decodedToken.email !== email ) { - throw new Error('Invalid authentication credentials.') + throw new Error("Invalid authentication credentials.") } } \ No newline at end of file diff --git a/backend/src/helpers/bot.ts b/backend/src/helpers/bot.ts index 8c3b5b816..c7c5904c7 100644 --- a/backend/src/helpers/bot.ts +++ b/backend/src/helpers/bot.ts @@ -1,18 +1,18 @@ import { Types } from "mongoose"; -import { Bot, BotKey, Secret, ISecret, IUser } from "../models"; +import { Bot, BotKey, ISecret, IUser, Secret } from "../models"; import { - generateKeyPair, - encryptSymmetric128BitHexKeyUTF8, - decryptSymmetric128BitHexKeyUTF8, decryptAsymmetric, + decryptSymmetric128BitHexKeyUTF8, + encryptSymmetric128BitHexKeyUTF8, + generateKeyPair, } from "../utils/crypto"; import { - SECRET_SHARED, ALGORITHM_AES_256_GCM, - ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64, + ENCODING_SCHEME_UTF8, + SECRET_SHARED, } from "../variables"; -import { getEncryptionKey, getRootEncryptionKey, client } from "../config"; +import { client, getEncryptionKey, getRootEncryptionKey } from "../config"; import { InternalServerError } from "../utils/errors"; import Folder from "../models/folder"; import { getFolderByPath } from "../services/FolderService"; diff --git a/backend/src/helpers/database.ts b/backend/src/helpers/database.ts index b9284bbf8..4780be346 100644 --- a/backend/src/helpers/database.ts +++ b/backend/src/helpers/database.ts @@ -1,5 +1,5 @@ -import mongoose from 'mongoose'; -import { getLogger } from '../utils/logger'; +import mongoose from "mongoose"; +import { getLogger } from "../utils/logger"; /** * Initialize database connection @@ -8,7 +8,7 @@ import { getLogger } from '../utils/logger'; * @returns */ export const initDatabaseHelper = async ({ - mongoURL + mongoURL, }: { mongoURL: string; }) => { @@ -16,7 +16,7 @@ export const initDatabaseHelper = async ({ await mongoose.connect(mongoURL); // allow empty strings to pass the required validator - mongoose.Schema.Types.String.checkRequired(v => typeof v === 'string'); + mongoose.Schema.Types.String.checkRequired(v => typeof v === "string"); (await getLogger("database")).info("Database connection established"); @@ -35,10 +35,10 @@ export const closeDatabaseHelper = async () => { new Promise((resolve) => { if (mongoose.connection && mongoose.connection.readyState == 1) { mongoose.connection.close() - .then(() => resolve('Database connection closed')); + .then(() => resolve("Database connection closed")); } else { - resolve('Database connection already closed'); + resolve("Database connection already closed"); } - }) + }), ]); } \ No newline at end of file diff --git a/backend/src/helpers/event.ts b/backend/src/helpers/event.ts index 47c243749..124da257c 100644 --- a/backend/src/helpers/event.ts +++ b/backend/src/helpers/event.ts @@ -1,5 +1,5 @@ import { Types } from "mongoose"; -import { Bot, IBot } from "../models"; +import { Bot } from "../models"; import { EVENT_PUSH_SECRETS } from "../variables"; import { IntegrationService } from "../services"; diff --git a/backend/src/helpers/index.ts b/backend/src/helpers/index.ts index b9d85f871..f9a0009fc 100644 --- a/backend/src/helpers/index.ts +++ b/backend/src/helpers/index.ts @@ -1,17 +1,17 @@ -export * from './auth'; -export * from './bot'; -export * from './database'; -export * from './event'; -export * from './integration'; -export * from './key'; -export * from './membership'; -export * from './membershipOrg'; -export * from './nodemailer'; -export * from './organization'; -export * from './rateLimiter'; -export * from './secret'; -export * from './secrets'; -export * from './signup'; -export * from './token'; -export * from './user'; -export * from './workspace'; \ No newline at end of file +export * from "./auth"; +export * from "./bot"; +export * from "./database"; +export * from "./event"; +export * from "./integration"; +export * from "./key"; +export * from "./membership"; +export * from "./membershipOrg"; +export * from "./nodemailer"; +export * from "./organization"; +export * from "./rateLimiter"; +export * from "./secret"; +export * from "./secrets"; +export * from "./signup"; +export * from "./token"; +export * from "./user"; +export * from "./workspace"; \ No newline at end of file diff --git a/backend/src/helpers/integration.ts b/backend/src/helpers/integration.ts index baf41d762..f2dd1ba66 100644 --- a/backend/src/helpers/integration.ts +++ b/backend/src/helpers/integration.ts @@ -3,10 +3,10 @@ import { Bot, Integration, IntegrationAuth } from "../models"; import { exchangeCode, exchangeRefresh, syncSecrets } from "../integrations"; import { BotService } from "../services"; import { - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, + INTEGRATION_NETLIFY, + INTEGRATION_VERCEL, } from "../variables"; import { UnauthorizedRequestError } from "../utils/errors"; diff --git a/backend/src/helpers/key.ts b/backend/src/helpers/key.ts index afb4f6396..88bf28f47 100644 --- a/backend/src/helpers/key.ts +++ b/backend/src/helpers/key.ts @@ -1,4 +1,4 @@ -import { Key, IKey } from '../models'; +import { IKey, Key } from "../models"; interface Key { encryptedKey: string; @@ -20,7 +20,7 @@ interface Key { export const pushKeys = async ({ userId, workspaceId, - keys + keys, }: { userId: string; workspaceId: string; @@ -31,9 +31,9 @@ export const pushKeys = async ({ ( await Key.find( { - workspace: workspaceId + workspace: workspaceId, }, - 'receiver' + "receiver" ) ).map((k: IKey) => k.receiver.toString()) ); @@ -47,7 +47,7 @@ export const pushKeys = async ({ nonce: k.nonce, sender: userId, receiver: k.userId, - workspace: workspaceId + workspace: workspaceId, })) ); }; \ No newline at end of file diff --git a/backend/src/helpers/membership.ts b/backend/src/helpers/membership.ts index 976297512..d2fcf5b17 100644 --- a/backend/src/helpers/membership.ts +++ b/backend/src/helpers/membership.ts @@ -1,6 +1,6 @@ import { Types } from "mongoose"; -import { Membership, Key } from "../models"; -import { MembershipNotFoundError, BadRequestError } from "../utils/errors"; +import { Key, Membership } from "../models"; +import { BadRequestError, MembershipNotFoundError } from "../utils/errors"; /** * Validate that user with id [userId] is a member of workspace with id [workspaceId] @@ -62,7 +62,7 @@ export const findMembership = async (queryObj: any) => { export const addMemberships = async ({ userIds, workspaceId, - roles + roles, }: { userIds: string[]; workspaceId: string; @@ -95,7 +95,7 @@ export const addMemberships = async ({ */ export const deleteMembership = async ({ membershipId }: { membershipId: string }) => { const deletedMembership = await Membership.findOneAndDelete({ - _id: membershipId + _id: membershipId, }); // delete keys associated with the membership diff --git a/backend/src/helpers/membershipOrg.ts b/backend/src/helpers/membershipOrg.ts index f29f3cec0..3ed5be088 100644 --- a/backend/src/helpers/membershipOrg.ts +++ b/backend/src/helpers/membershipOrg.ts @@ -1,14 +1,14 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - MembershipOrg, - Workspace, + Key, Membership, - Key -} from '../models'; + MembershipOrg, + Workspace, +} from "../models"; import { MembershipOrgNotFoundError, - UnauthorizedRequestError -} from '../utils/errors'; + UnauthorizedRequestError, +} from "../utils/errors"; /** * Validate that user with id [userId] is a member of organization with id [organizationId] @@ -22,31 +22,31 @@ export const validateMembershipOrg = async ({ userId, organizationId, acceptedRoles, - acceptedStatuses + acceptedStatuses, }: { userId: Types.ObjectId; organizationId: Types.ObjectId; - acceptedRoles?: Array<'owner' | 'admin' | 'member'>; - acceptedStatuses?: Array<'invited' | 'accepted'>; + acceptedRoles?: Array<"owner" | "admin" | "member">; + acceptedStatuses?: Array<"invited" | "accepted">; }) => { const membershipOrg = await MembershipOrg.findOne({ user: userId, - organization: organizationId + organization: organizationId, }); if (!membershipOrg) { - throw MembershipOrgNotFoundError({ message: 'Failed to find organization membership' }); + throw MembershipOrgNotFoundError({ message: "Failed to find organization membership" }); } if (acceptedRoles) { if (!acceptedRoles.includes(membershipOrg.role)) { - throw UnauthorizedRequestError({ message: 'Failed to validate organization membership role' }); + throw UnauthorizedRequestError({ message: "Failed to validate organization membership role" }); } } if (acceptedStatuses) { if (!acceptedStatuses.includes(membershipOrg.status)) { - throw UnauthorizedRequestError({ message: 'Failed to validate organization membership status' }); + throw UnauthorizedRequestError({ message: "Failed to validate organization membership status" }); } } @@ -76,7 +76,7 @@ export const addMembershipsOrg = async ({ userIds, organizationId, roles, - statuses + statuses, }: { userIds: string[]; organizationId: string; @@ -90,16 +90,16 @@ export const addMembershipsOrg = async ({ user: userId, organization: organizationId, role: roles[idx], - status: statuses[idx] + status: statuses[idx], }, update: { user: userId, organization: organizationId, role: roles[idx], - status: statuses[idx] + status: statuses[idx], }, - upsert: true - } + upsert: true, + }, }; }); @@ -112,15 +112,15 @@ export const addMembershipsOrg = async ({ * @param {String} obj.membershipOrgId - id of organization membership to delete */ export const deleteMembershipOrg = async ({ - membershipOrgId + membershipOrgId, }: { membershipOrgId: string; }) => { const deletedMembershipOrg = await MembershipOrg.findOneAndDelete({ - _id: membershipOrgId + _id: membershipOrgId, }); - if (!deletedMembershipOrg) throw new Error('Failed to delete organization membership'); + if (!deletedMembershipOrg) throw new Error("Failed to delete organization membership"); // delete keys associated with organization membership if (deletedMembershipOrg?.user) { @@ -128,22 +128,22 @@ export const deleteMembershipOrg = async ({ const workspaces = ( await Workspace.find({ - organization: deletedMembershipOrg.organization + organization: deletedMembershipOrg.organization, }) ).map((w) => w._id.toString()); await Membership.deleteMany({ user: deletedMembershipOrg.user, workspace: { - $in: workspaces - } + $in: workspaces, + }, }); await Key.deleteMany({ receiver: deletedMembershipOrg.user, workspace: { - $in: workspaces - } + $in: workspaces, + }, }); } diff --git a/backend/src/helpers/nodemailer.ts b/backend/src/helpers/nodemailer.ts index ffd39d7dd..b83d9bf61 100644 --- a/backend/src/helpers/nodemailer.ts +++ b/backend/src/helpers/nodemailer.ts @@ -1,8 +1,8 @@ -import fs from 'fs'; -import path from 'path'; -import handlebars from 'handlebars'; -import nodemailer from 'nodemailer'; -import { getSmtpFromName, getSmtpFromAddress, getSmtpConfigured } from '../config'; +import fs from "fs"; +import path from "path"; +import handlebars from "handlebars"; +import nodemailer from "nodemailer"; +import { getSmtpConfigured, getSmtpFromAddress, getSmtpFromName } from "../config"; let smtpTransporter: nodemailer.Transporter; @@ -17,7 +17,7 @@ export const sendMail = async ({ template, subjectLine, recipients, - substitutions + substitutions, }: { template: string; subjectLine: string; @@ -26,17 +26,17 @@ export const sendMail = async ({ }) => { if (await getSmtpConfigured()) { const html = fs.readFileSync( - path.resolve(__dirname, '../templates/' + template), - 'utf8' + path.resolve(__dirname, "../templates/" + template), + "utf8" ); const temp = handlebars.compile(html); const htmlToSend = temp(substitutions); await smtpTransporter.sendMail({ from: `"${await getSmtpFromName()}" <${await getSmtpFromAddress()}>`, - to: recipients.join(', '), + to: recipients.join(", "), subject: subjectLine, - html: htmlToSend + html: htmlToSend, }); } }; diff --git a/backend/src/helpers/organization.ts b/backend/src/helpers/organization.ts index b88fbdf12..642a1233b 100644 --- a/backend/src/helpers/organization.ts +++ b/backend/src/helpers/organization.ts @@ -1,25 +1,25 @@ import Stripe from "stripe"; import { Types } from "mongoose"; -import { Organization, MembershipOrg } from "../models"; +import { MembershipOrg, Organization } from "../models"; import { - ACCEPTED + ACCEPTED, } from "../variables"; import { - getStripeSecretKey, getStripeProductPro, - getStripeProductTeam, getStripeProductStarter, + getStripeProductTeam, + getStripeSecretKey, } from "../config"; import { - EELicenseService -} from '../ee/services'; + EELicenseService, +} from "../ee/services"; import { - getLicenseServerUrl -} from '../config'; + getLicenseServerUrl, +} from "../config"; import { + licenseKeyRequest, licenseServerKeyRequest, - licenseKeyRequest -} from '../config/request'; +} from "../config/request"; /** * Create an organization with name [name] @@ -137,7 +137,7 @@ export const updateSubscriptionOrgQuantity = async ({ }); if (organization && organization.customerId) { - if (EELicenseService.instanceType === 'cloud') { + if (EELicenseService.instanceType === "cloud") { // instance of Infisical is a cloud instance const quantity = await MembershipOrg.countDocuments({ organization: new Types.ObjectId(organizationId), @@ -147,7 +147,7 @@ export const updateSubscriptionOrgQuantity = async ({ await licenseServerKeyRequest.patch( `${await getLicenseServerUrl()}/api/license-server/v1/customers/${organization.customerId}/cloud-plan`, { - quantity + quantity, } ); @@ -155,17 +155,17 @@ export const updateSubscriptionOrgQuantity = async ({ } } - if (EELicenseService.instanceType === 'enterprise-self-hosted') { + if (EELicenseService.instanceType === "enterprise-self-hosted") { // instance of Infisical is an enterprise self-hosted instance const usedSeats = await MembershipOrg.countDocuments({ - status: ACCEPTED + status: ACCEPTED, }); await licenseKeyRequest.patch( `${await getLicenseServerUrl()}/api/license/v1/license`, { - usedSeats + usedSeats, } ); } diff --git a/backend/src/helpers/rateLimiter.ts b/backend/src/helpers/rateLimiter.ts index 123b230a4..853e7c2ed 100644 --- a/backend/src/helpers/rateLimiter.ts +++ b/backend/src/helpers/rateLimiter.ts @@ -1,4 +1,4 @@ -import rateLimit from 'express-rate-limit'; +import rateLimit from "express-rate-limit"; // const MongoStore = require('rate-limit-mongo'); // 200 per minute @@ -14,11 +14,11 @@ export const apiLimiter = rateLimit({ standardHeaders: true, legacyHeaders: false, skip: (request) => { - return request.path === '/healthcheck' || request.path === '/api/status' + return request.path === "/healthcheck" || request.path === "/api/status" }, keyGenerator: (req, res) => { return req.realIP - } + }, }); // 50 requests per 1 hours @@ -35,7 +35,7 @@ const authLimit = rateLimit({ legacyHeaders: false, keyGenerator: (req, res) => { return req.realIP - } + }, }); // 5 requests per 1 hour @@ -52,11 +52,11 @@ export const passwordLimiter = rateLimit({ legacyHeaders: false, keyGenerator: (req, res) => { return req.realIP - } + }, }); export const authLimiter = (req: any, res: any, next: any) => { - if (process.env.NODE_ENV === 'production') { + if (process.env.NODE_ENV === "production") { authLimit(req, res, next); } else { next(); diff --git a/backend/src/helpers/secret.ts b/backend/src/helpers/secret.ts index 31f6c6c9c..c86807f03 100644 --- a/backend/src/helpers/secret.ts +++ b/backend/src/helpers/secret.ts @@ -1,16 +1,16 @@ import { Types } from "mongoose"; -import { Secret, ISecret } from "../models"; -import { EESecretService, EELogService } from "../ee/services"; +import { ISecret, Secret } from "../models"; +import { EELogService, EESecretService } from "../ee/services"; import { IAction, SecretVersion } from "../ee/models"; import { - SECRET_SHARED, - SECRET_PERSONAL, ACTION_ADD_SECRETS, - ACTION_UPDATE_SECRETS, ACTION_DELETE_SECRETS, ACTION_READ_SECRETS, + ACTION_UPDATE_SECRETS, ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, + SECRET_PERSONAL, + SECRET_SHARED, } from "../variables"; interface V1PushSecret { diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index 7c8c69e97..51731bb6a 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -1,45 +1,45 @@ import { Types } from "mongoose"; import { CreateSecretParams, - GetSecretsParams, - GetSecretParams, - UpdateSecretParams, DeleteSecretParams, -} from '../interfaces/services/SecretService'; + GetSecretParams, + GetSecretsParams, + UpdateSecretParams, +} from "../interfaces/services/SecretService"; import { - Secret, ISecret, + Secret, SecretBlindIndexData, ServiceTokenData, } from "../models"; import { SecretVersion } from "../ee/models"; import { BadRequestError, - SecretNotFoundError, - SecretBlindIndexDataNotFoundError, InternalServerError, + SecretBlindIndexDataNotFoundError, + SecretNotFoundError, UnauthorizedRequestError, } from "../utils/errors"; import { - SECRET_PERSONAL, - SECRET_SHARED, ACTION_ADD_SECRETS, + ACTION_DELETE_SECRETS, ACTION_READ_SECRETS, ACTION_UPDATE_SECRETS, - ACTION_DELETE_SECRETS, ALGORITHM_AES_256_GCM, - ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64, + ENCODING_SCHEME_UTF8, + SECRET_PERSONAL, + SECRET_SHARED, } from "../variables"; import crypto from "crypto"; import * as argon2 from "argon2"; import { - encryptSymmetric128BitHexKeyUTF8, decryptSymmetric128BitHexKeyUTF8, -} from '../utils/crypto'; -import { TelemetryService } from '../services'; -import { getEncryptionKey, client, getRootEncryptionKey } from "../config"; -import { EESecretService, EELogService } from "../ee/services"; + encryptSymmetric128BitHexKeyUTF8, +} from "../utils/crypto"; +import { TelemetryService } from "../services"; +import { client, getEncryptionKey, getRootEncryptionKey } from "../config"; +import { EELogService, EESecretService } from "../ee/services"; import { getAuthDataPayloadIdObj, getAuthDataPayloadUserObj, @@ -56,7 +56,7 @@ import { getFolderIdFromServiceToken } from "../services/FolderService"; */ export const repackageSecretToRaw = ({ secret, - key + key, }: { secret: ISecret; key: string; @@ -66,24 +66,24 @@ export const repackageSecretToRaw = ({ ciphertext: secret.secretKeyCiphertext, iv: secret.secretKeyIV, tag: secret.secretKeyTag, - key + key, }); const secretValue = decryptSymmetric128BitHexKeyUTF8({ ciphertext: secret.secretValueCiphertext, iv: secret.secretValueIV, tag: secret.secretValueTag, - key + key, }); - let secretComment: string = ''; + let secretComment = ""; if (secret.secretCommentCiphertext && secret.secretCommentIV && secret.secretCommentTag) { secretComment = decryptSymmetric128BitHexKeyUTF8({ ciphertext: secret.secretCommentCiphertext, iv: secret.secretCommentIV, tag: secret.secretCommentTag, - key + key, }); } @@ -96,7 +96,7 @@ export const repackageSecretToRaw = ({ user: secret.user, secretKey, secretValue, - secretComment + secretComment, }); } @@ -944,6 +944,6 @@ export const deleteSecretHelper = async ({ return ({ secrets, - secret + secret, }); }; diff --git a/backend/src/helpers/signup.ts b/backend/src/helpers/signup.ts index d747de20d..da494f4f7 100644 --- a/backend/src/helpers/signup.ts +++ b/backend/src/helpers/signup.ts @@ -1,10 +1,10 @@ -import { IUser } from '../models'; -import { createOrganization } from './organization'; -import { addMembershipsOrg } from './membershipOrg'; -import { OWNER, ACCEPTED } from '../variables'; -import { sendMail } from '../helpers/nodemailer'; -import { TokenService } from '../services'; -import { TOKEN_EMAIL_CONFIRMATION } from '../variables'; +import { IUser } from "../models"; +import { createOrganization } from "./organization"; +import { addMembershipsOrg } from "./membershipOrg"; +import { ACCEPTED, OWNER } from "../variables"; +import { sendMail } from "../helpers/nodemailer"; +import { TokenService } from "../services"; +import { TOKEN_EMAIL_CONFIRMATION } from "../variables"; /** * Send magic link to verify email to [email] @@ -16,17 +16,17 @@ import { TOKEN_EMAIL_CONFIRMATION } from '../variables'; export const sendEmailVerification = async ({ email }: { email: string }) => { const token = await TokenService.createToken({ type: TOKEN_EMAIL_CONFIRMATION, - email + email, }); // send mail await sendMail({ - template: 'emailVerification.handlebars', - subjectLine: 'Infisical confirmation code', + template: "emailVerification.handlebars", + subjectLine: "Infisical confirmation code", recipients: [email], substitutions: { - code: token - } + code: token, + }, }); }; @@ -38,7 +38,7 @@ export const sendEmailVerification = async ({ email }: { email: string }) => { */ export const checkEmailVerification = async ({ email, - code + code, }: { email: string; code: string; @@ -46,7 +46,7 @@ export const checkEmailVerification = async ({ await TokenService.validateToken({ type: TOKEN_EMAIL_CONFIRMATION, email, - token: code + token: code, }); }; @@ -59,7 +59,7 @@ export const checkEmailVerification = async ({ */ export const initializeDefaultOrg = async ({ organizationName, - user + user, }: { organizationName: string; user: IUser; @@ -69,14 +69,14 @@ export const initializeDefaultOrg = async ({ // subscription const organization = await createOrganization({ email: user.email, - name: organizationName + name: organizationName, }); await addMembershipsOrg({ userIds: [user._id.toString()], organizationId: organization._id.toString(), roles: [OWNER], - statuses: [ACCEPTED] + statuses: [ACCEPTED], }); } catch (err) { throw new Error(`Failed to initialize default organization and workspace [err=${err}]`); diff --git a/backend/src/helpers/user.ts b/backend/src/helpers/user.ts index a69b72695..59030ff8c 100644 --- a/backend/src/helpers/user.ts +++ b/backend/src/helpers/user.ts @@ -1,8 +1,8 @@ import { IUser, User, -} from '../models'; -import { sendMail } from './nodemailer'; +} from "../models"; +import { sendMail } from "./nodemailer"; /** * Initialize a user under email [email] @@ -12,7 +12,7 @@ import { sendMail } from './nodemailer'; */ export const setupAccount = async ({ email }: { email: string }) => { const user = await new User({ - email + email, }).save(); return user; @@ -49,7 +49,7 @@ export const completeAccount = async ({ encryptedPrivateKeyIV, encryptedPrivateKeyTag, salt, - verifier + verifier, }: { userId: string; firstName: string; @@ -66,7 +66,7 @@ export const completeAccount = async ({ verifier: string; }) => { const options = { - new: true + new: true, }; const user = await User.findByIdAndUpdate( userId, @@ -82,7 +82,7 @@ export const completeAccount = async ({ iv: encryptedPrivateKeyIV, tag: encryptedPrivateKeyTag, salt, - verifier + verifier, }, options ); @@ -100,7 +100,7 @@ export const completeAccount = async ({ export const checkUserDevice = async ({ user, ip, - userAgent + userAgent, }: { user: IUser; ip: string; @@ -114,22 +114,22 @@ export const checkUserDevice = async ({ user.devices = user.devices.concat([{ ip: String(ip), - userAgent + userAgent, }]); await user.save(); // send MFA code [code] to [email] await sendMail({ - template: 'newDevice.handlebars', - subjectLine: `Successful login from new device`, + template: "newDevice.handlebars", + subjectLine: "Successful login from new device", recipients: [user.email], substitutions: { email: user.email, timestamp: new Date().toString(), ip, - userAgent - } + userAgent, + }, }); } } \ No newline at end of file diff --git a/backend/src/helpers/workspace.ts b/backend/src/helpers/workspace.ts index 694540f86..d79d6c453 100644 --- a/backend/src/helpers/workspace.ts +++ b/backend/src/helpers/workspace.ts @@ -1,13 +1,13 @@ import { - Workspace, Bot, - Membership, Key, - Secret -} from '../models'; -import { createBot } from '../helpers/bot'; -import { EELicenseService } from '../ee/services'; -import { SecretService } from '../services'; + Membership, + Secret, + Workspace, +} from "../models"; +import { createBot } from "../helpers/bot"; +import { EELicenseService } from "../ee/services"; +import { SecretService } from "../services"; /** * Create a workspace with name [name] in organization with id [organizationId] @@ -18,7 +18,7 @@ import { SecretService } from '../services'; */ export const createWorkspace = async ({ name, - organizationId + organizationId, }: { name: string; organizationId: string; @@ -27,18 +27,18 @@ export const createWorkspace = async ({ const workspace = await new Workspace({ name, organization: organizationId, - autoCapitalization: true + autoCapitalization: true, }).save(); // initialize bot for workspace await createBot({ - name: 'Infisical Bot', - workspaceId: workspace._id + name: "Infisical Bot", + workspaceId: workspace._id, }); // initialize blind index salt for workspace await SecretService.createSecretBlindIndexData({ - workspaceId: workspace._id + workspaceId: workspace._id, }); await EELicenseService.refreshPlan(organizationId); @@ -55,15 +55,15 @@ export const createWorkspace = async ({ export const deleteWorkspace = async ({ id }: { id: string }) => { await Workspace.deleteOne({ _id: id }); await Bot.deleteOne({ - workspace: id + workspace: id, }); await Membership.deleteMany({ - workspace: id + workspace: id, }); await Secret.deleteMany({ - workspace: id + workspace: id, }); await Key.deleteMany({ - workspace: id + workspace: id, }); }; diff --git a/backend/src/index.ts b/backend/src/index.ts index af3e0b24b..d0cd67ae5 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -2,7 +2,7 @@ import dotenv from "dotenv"; dotenv.config(); import express from "express"; // eslint-disable-next-line @typescript-eslint/no-var-requires -require('express-async-errors'); +require("express-async-errors"); import helmet from "helmet"; import cors from "cors"; import { DatabaseService } from "./services"; @@ -15,32 +15,32 @@ const swaggerFile = require("../spec.json"); // eslint-disable-next-line @typescript-eslint/no-var-requires import { apiLimiter } from "./helpers/rateLimiter"; import { - workspace as eeWorkspaceRouter, + action as eeActionRouter, + cloudProducts as eeCloudProductsRouter, + organizations as eeOrganizationsRouter, secret as eeSecretRouter, secretSnapshot as eeSecretSnapshotRouter, - action as eeActionRouter, - organizations as eeOrganizationsRouter, - cloudProducts as eeCloudProductsRouter, + workspace as eeWorkspaceRouter, } from "./ee/routes/v1"; import { - signup as v1SignupRouter, auth as v1AuthRouter, bot as v1BotRouter, - organization as v1OrganizationRouter, - workspace as v1WorkspaceRouter, + integrationAuth as v1IntegrationAuthRouter, + integration as v1IntegrationRouter, + inviteOrg as v1InviteOrgRouter, + key as v1KeyRouter, membershipOrg as v1MembershipOrgRouter, membership as v1MembershipRouter, - key as v1KeyRouter, - inviteOrg as v1InviteOrgRouter, - user as v1UserRouter, - userAction as v1UserActionRouter, - secret as v1SecretRouter, - serviceToken as v1ServiceTokenRouter, + organization as v1OrganizationRouter, password as v1PasswordRouter, - stripe as v1StripeRouter, - integration as v1IntegrationRouter, - integrationAuth as v1IntegrationAuthRouter, + secret as v1SecretRouter, secretsFolder as v1SecretsFolder, + serviceToken as v1ServiceTokenRouter, + signup as v1SignupRouter, + stripe as v1StripeRouter, + userAction as v1UserActionRouter, + user as v1UserRouter, + workspace as v1WorkspaceRouter, } from "./routes/v1"; import { signup as v2SignupRouter, @@ -95,7 +95,7 @@ const main = async () => { app.use((req, res, next) => { // default to IP address provided by Cloudflare - const cfIp = req.headers['cf-connecting-ip']; + const cfIp = req.headers["cf-connecting-ip"]; req.realIP = Array.isArray(cfIp) ? cfIp[0] : (cfIp as string) || req.ip; next(); }); diff --git a/backend/src/integrations/apps.ts b/backend/src/integrations/apps.ts index 6e1a8b501..e93e47fb5 100644 --- a/backend/src/integrations/apps.ts +++ b/backend/src/integrations/apps.ts @@ -2,32 +2,32 @@ import { Octokit } from "@octokit/rest"; import { IIntegrationAuth } from "../models"; import { standardRequest } from "../config/request"; import { - INTEGRATION_AZURE_KEY_VAULT, INTEGRATION_AWS_PARAMETER_STORE, INTEGRATION_AWS_SECRET_MANAGER, - INTEGRATION_HEROKU, - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, + INTEGRATION_AZURE_KEY_VAULT, + INTEGRATION_CHECKLY, + INTEGRATION_CHECKLY_API_URL, + INTEGRATION_CIRCLECI, + INTEGRATION_CIRCLECI_API_URL, + INTEGRATION_FLYIO, + INTEGRATION_FLYIO_API_URL, INTEGRATION_GITHUB, INTEGRATION_GITLAB, - INTEGRATION_RENDER, - INTEGRATION_RAILWAY, - INTEGRATION_FLYIO, - INTEGRATION_CIRCLECI, - INTEGRATION_TRAVISCI, - INTEGRATION_SUPABASE, - INTEGRATION_CHECKLY, - INTEGRATION_HEROKU_API_URL, INTEGRATION_GITLAB_API_URL, - INTEGRATION_VERCEL_API_URL, + INTEGRATION_HEROKU, + INTEGRATION_HEROKU_API_URL, + INTEGRATION_NETLIFY, INTEGRATION_NETLIFY_API_URL, - INTEGRATION_RENDER_API_URL, + INTEGRATION_RAILWAY, INTEGRATION_RAILWAY_API_URL, - INTEGRATION_FLYIO_API_URL, - INTEGRATION_CIRCLECI_API_URL, - INTEGRATION_TRAVISCI_API_URL, + INTEGRATION_RENDER, + INTEGRATION_RENDER_API_URL, + INTEGRATION_SUPABASE, INTEGRATION_SUPABASE_API_URL, - INTEGRATION_CHECKLY_API_URL + INTEGRATION_TRAVISCI, + INTEGRATION_TRAVISCI_API_URL, + INTEGRATION_VERCEL, + INTEGRATION_VERCEL_API_URL, } from "../variables"; interface App { @@ -214,7 +214,7 @@ const getAppsNetlify = async ({ accessToken }: { accessToken: string }) => { const params = new URLSearchParams({ page: String(page), per_page: String(perPage), - filter: 'all' + filter: "all", }); const { data } = await standardRequest.get( diff --git a/backend/src/integrations/exchange.ts b/backend/src/integrations/exchange.ts index a4d5f5b06..12948d403 100644 --- a/backend/src/integrations/exchange.ts +++ b/backend/src/integrations/exchange.ts @@ -1,31 +1,31 @@ import { standardRequest } from "../config/request"; import { INTEGRATION_AZURE_KEY_VAULT, - INTEGRATION_HEROKU, - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, - INTEGRATION_GITHUB, - INTEGRATION_GITLAB, INTEGRATION_AZURE_TOKEN_URL, - INTEGRATION_HEROKU_TOKEN_URL, - INTEGRATION_VERCEL_TOKEN_URL, - INTEGRATION_NETLIFY_TOKEN_URL, + INTEGRATION_GITHUB, INTEGRATION_GITHUB_TOKEN_URL, + INTEGRATION_GITLAB, INTEGRATION_GITLAB_TOKEN_URL, + INTEGRATION_HEROKU, + INTEGRATION_HEROKU_TOKEN_URL, + INTEGRATION_NETLIFY, + INTEGRATION_NETLIFY_TOKEN_URL, + INTEGRATION_VERCEL, + INTEGRATION_VERCEL_TOKEN_URL, } from "../variables"; import { - getSiteURL, getClientIdAzure, - getClientSecretAzure, - getClientSecretHeroku, - getClientIdVercel, - getClientSecretVercel, - getClientIdNetlify, - getClientSecretNetlify, getClientIdGitHub, - getClientSecretGitHub, getClientIdGitLab, + getClientIdNetlify, + getClientIdVercel, + getClientSecretAzure, + getClientSecretGitHub, getClientSecretGitLab, + getClientSecretHeroku, + getClientSecretNetlify, + getClientSecretVercel, + getSiteURL, } from "../config"; interface ExchangeCodeAzureResponse { diff --git a/backend/src/integrations/index.ts b/backend/src/integrations/index.ts index 8439ff3ba..14e2da7f9 100644 --- a/backend/src/integrations/index.ts +++ b/backend/src/integrations/index.ts @@ -1,9 +1,9 @@ -import { exchangeCode } from './exchange'; -import { exchangeRefresh } from './refresh'; -import { getApps } from './apps'; -import { getTeams } from './teams'; -import { syncSecrets } from './sync'; -import { revokeAccess } from './revoke'; +import { exchangeCode } from "./exchange"; +import { exchangeRefresh } from "./refresh"; +import { getApps } from "./apps"; +import { getTeams } from "./teams"; +import { syncSecrets } from "./sync"; +import { revokeAccess } from "./revoke"; export { exchangeCode, @@ -11,5 +11,5 @@ export { getApps, getTeams, syncSecrets, - revokeAccess + revokeAccess, } \ No newline at end of file diff --git a/backend/src/integrations/refresh.ts b/backend/src/integrations/refresh.ts index 0c401bf15..d530ab2f5 100644 --- a/backend/src/integrations/refresh.ts +++ b/backend/src/integrations/refresh.ts @@ -2,22 +2,22 @@ import { standardRequest } from "../config/request"; import { IIntegrationAuth } from "../models"; import { INTEGRATION_AZURE_KEY_VAULT, - INTEGRATION_HEROKU, INTEGRATION_GITLAB, + INTEGRATION_HEROKU, } from "../variables"; import { INTEGRATION_AZURE_TOKEN_URL, - INTEGRATION_HEROKU_TOKEN_URL, INTEGRATION_GITLAB_TOKEN_URL, + INTEGRATION_HEROKU_TOKEN_URL, } from "../variables"; import { IntegrationService } from "../services"; import { - getSiteURL, getClientIdAzure, - getClientSecretAzure, - getClientSecretHeroku, getClientIdGitLab, + getClientSecretAzure, getClientSecretGitLab, + getClientSecretHeroku, + getSiteURL, } from "../config"; interface RefreshTokenAzureResponse { diff --git a/backend/src/integrations/revoke.ts b/backend/src/integrations/revoke.ts index 46c93017d..d4747a52a 100644 --- a/backend/src/integrations/revoke.ts +++ b/backend/src/integrations/revoke.ts @@ -1,21 +1,19 @@ import { IIntegrationAuth, - IntegrationAuth, - Integration, - Bot, - BotKey -} from '../models'; + Integration, + IntegrationAuth, +} from "../models"; import { - INTEGRATION_HEROKU, - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, INTEGRATION_GITHUB, INTEGRATION_GITLAB, -} from '../variables'; + INTEGRATION_HEROKU, + INTEGRATION_NETLIFY, + INTEGRATION_VERCEL, +} from "../variables"; const revokeAccess = async ({ integrationAuth, - accessToken + accessToken, }: { integrationAuth: IIntegrationAuth; accessToken: string; @@ -36,12 +34,12 @@ const revokeAccess = async ({ } deletedIntegrationAuth = await IntegrationAuth.findOneAndDelete({ - _id: integrationAuth._id + _id: integrationAuth._id, }); if (deletedIntegrationAuth) { await Integration.deleteMany({ - integrationAuth: deletedIntegrationAuth._id + integrationAuth: deletedIntegrationAuth._id, }); } diff --git a/backend/src/integrations/sync.ts b/backend/src/integrations/sync.ts index 76d009944..907ea9e16 100644 --- a/backend/src/integrations/sync.ts +++ b/backend/src/integrations/sync.ts @@ -1,45 +1,45 @@ -import _ from 'lodash'; -import AWS from 'aws-sdk'; +import _ from "lodash"; +import AWS from "aws-sdk"; import { - SecretsManagerClient, - UpdateSecretCommand, - CreateSecretCommand, + CreateSecretCommand, GetSecretValueCommand, - ResourceNotFoundException -} from '@aws-sdk/client-secrets-manager'; + ResourceNotFoundException, + SecretsManagerClient, + UpdateSecretCommand, +} from "@aws-sdk/client-secrets-manager"; import { Octokit } from "@octokit/rest"; import sodium from "libsodium-wrappers"; import { IIntegration, IIntegrationAuth } from "../models"; import { - INTEGRATION_AZURE_KEY_VAULT, INTEGRATION_AWS_PARAMETER_STORE, INTEGRATION_AWS_SECRET_MANAGER, - INTEGRATION_HEROKU, - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, - INTEGRATION_GITHUB, - INTEGRATION_GITLAB, - INTEGRATION_RENDER, - INTEGRATION_RAILWAY, - INTEGRATION_FLYIO, - INTEGRATION_CIRCLECI, - INTEGRATION_TRAVISCI, - INTEGRATION_SUPABASE, - INTEGRATION_HEROKU_API_URL, - INTEGRATION_GITLAB_API_URL, - INTEGRATION_VERCEL_API_URL, - INTEGRATION_NETLIFY_API_URL, - INTEGRATION_RENDER_API_URL, - INTEGRATION_RAILWAY_API_URL, - INTEGRATION_FLYIO_API_URL, - INTEGRATION_CIRCLECI_API_URL, - INTEGRATION_TRAVISCI_API_URL, - INTEGRATION_SUPABASE_API_URL, + INTEGRATION_AZURE_KEY_VAULT, INTEGRATION_CHECKLY, INTEGRATION_CHECKLY_API_URL, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_CIRCLECI, + INTEGRATION_CIRCLECI_API_URL, + INTEGRATION_FLYIO, + INTEGRATION_FLYIO_API_URL, + INTEGRATION_GITHUB, + INTEGRATION_GITLAB, + INTEGRATION_GITLAB_API_URL, + INTEGRATION_HASHICORP_VAULT, + INTEGRATION_HEROKU, + INTEGRATION_HEROKU_API_URL, + INTEGRATION_NETLIFY, + INTEGRATION_NETLIFY_API_URL, + INTEGRATION_RAILWAY, + INTEGRATION_RAILWAY_API_URL, + INTEGRATION_RENDER, + INTEGRATION_RENDER_API_URL, + INTEGRATION_SUPABASE, + INTEGRATION_SUPABASE_API_URL, + INTEGRATION_TRAVISCI, + INTEGRATION_TRAVISCI_API_URL, + INTEGRATION_VERCEL, + INTEGRATION_VERCEL_API_URL, } from "../variables"; -import { standardRequest} from '../config/request'; +import { standardRequest} from "../config/request"; /** * Sync/push [secrets] to [app] in integration named [integration] @@ -68,7 +68,7 @@ const syncSecrets = async ({ await syncSecretsAzureKeyVault({ integration, secrets, - accessToken + accessToken, }); break; case INTEGRATION_AWS_PARAMETER_STORE: @@ -76,7 +76,7 @@ const syncSecrets = async ({ integration, secrets, accessId, - accessToken + accessToken, }); break; case INTEGRATION_AWS_SECRET_MANAGER: @@ -84,7 +84,7 @@ const syncSecrets = async ({ integration, secrets, accessId, - accessToken + accessToken, }); break; case INTEGRATION_HEROKU: @@ -135,7 +135,7 @@ const syncSecrets = async ({ await syncSecretsRailway({ integration, secrets, - accessToken + accessToken, }); break; case INTEGRATION_FLYIO: @@ -163,7 +163,7 @@ const syncSecrets = async ({ await syncSecretsSupabase({ integration, secrets, - accessToken + accessToken, }); break; case INTEGRATION_FLYIO: @@ -191,7 +191,7 @@ const syncSecrets = async ({ await syncSecretsSupabase({ integration, secrets, - accessToken + accessToken, }); break; case INTEGRATION_CHECKLY: @@ -207,7 +207,7 @@ const syncSecrets = async ({ integrationAuth, secrets, accessId, - accessToken + accessToken, }); break; } @@ -223,7 +223,7 @@ const syncSecrets = async ({ const syncSecretsAzureKeyVault = async ({ integration, secrets, - accessToken + accessToken, }: { integration: IIntegration; secrets: any; @@ -254,8 +254,8 @@ const syncSecretsAzureKeyVault = async ({ while (url) { const res = await standardRequest.get(url, { headers: { - Authorization: `Bearer ${accessToken}` - } + Authorization: `Bearer ${accessToken}`, + }, }); result = result.concat(res.data.value); @@ -271,13 +271,13 @@ const syncSecretsAzureKeyVault = async ({ let lastSlashIndex: number; const res = (await Promise.all(getAzureKeyVaultSecrets.map(async (getAzureKeyVaultSecret) => { if (!lastSlashIndex) { - lastSlashIndex = getAzureKeyVaultSecret.id.lastIndexOf('/'); + lastSlashIndex = getAzureKeyVaultSecret.id.lastIndexOf("/"); } const azureKeyVaultSecret = await standardRequest.get(`${getAzureKeyVaultSecret.id}?api-version=7.3`, { headers: { - 'Authorization': `Bearer ${accessToken}` - } + "Authorization": `Bearer ${accessToken}`, + }, }); return ({ @@ -287,7 +287,7 @@ const syncSecretsAzureKeyVault = async ({ }))) .reduce((obj: any, secret: any) => ({ ...obj, - [secret.key]: secret + [secret.key]: secret, }), {}); const setSecrets: { @@ -296,19 +296,19 @@ const syncSecretsAzureKeyVault = async ({ }[] = []; Object.keys(secrets).forEach((key) => { - const hyphenatedKey = key.replace(/_/g, '-'); + const hyphenatedKey = key.replace(/_/g, "-"); if (!(hyphenatedKey in res)) { // case: secret has been created setSecrets.push({ key: hyphenatedKey, - value: secrets[key] + value: secrets[key], }); } else { if (secrets[key] !== res[hyphenatedKey].value) { // case: secret has been updated setSecrets.push({ key: hyphenatedKey, - value: secrets[key] + value: secrets[key], }); } } @@ -317,7 +317,7 @@ const syncSecretsAzureKeyVault = async ({ const deleteSecrets: AzureKeyVaultSecret[] = []; Object.keys(res).forEach((key) => { - const underscoredKey = key.replace(/-/g, '_'); + const underscoredKey = key.replace(/-/g, "_"); if (!(underscoredKey in secrets)) { deleteSecrets.push(res[key]); } @@ -327,7 +327,7 @@ const syncSecretsAzureKeyVault = async ({ key, value, integration, - accessToken + accessToken, }: { key: string; value: string; @@ -343,12 +343,12 @@ const syncSecretsAzureKeyVault = async ({ await standardRequest.put( `${integration.app}/secrets/${key}?api-version=7.3`, { - value + value, }, { headers: { - Authorization: `Bearer ${accessToken}` - } + Authorization: `Bearer ${accessToken}`, + }, } ); @@ -356,13 +356,13 @@ const syncSecretsAzureKeyVault = async ({ } catch (err) { const error: any = err; - if (error?.response?.data?.error?.innererror?.code === 'ObjectIsDeletedButRecoverable') { + if (error?.response?.data?.error?.innererror?.code === "ObjectIsDeletedButRecoverable") { await standardRequest.post( `${integration.app}/deletedsecrets/${key}/recover?api-version=7.3`, {}, { headers: { - Authorization: `Bearer ${accessToken}` - } + Authorization: `Bearer ${accessToken}`, + }, } ); await new Promise(resolve => setTimeout(resolve, 10000)); @@ -381,7 +381,7 @@ const syncSecretsAzureKeyVault = async ({ key, value, integration, - accessToken + accessToken, }); } @@ -389,8 +389,8 @@ const syncSecretsAzureKeyVault = async ({ const { key } = deleteSecret; await standardRequest.delete(`${integration.app}/secrets/${key}?api-version=7.3`, { headers: { - 'Authorization': `Bearer ${accessToken}` - } + "Authorization": `Bearer ${accessToken}`, + }, }); } }; @@ -407,7 +407,7 @@ const syncSecretsAWSParameterStore = async ({ integration, secrets, accessId, - accessToken + accessToken, }: { integration: IIntegration; secrets: any; @@ -419,18 +419,18 @@ const syncSecretsAWSParameterStore = async ({ AWS.config.update({ region: integration.region, accessKeyId: accessId, - secretAccessKey: accessToken + secretAccessKey: accessToken, }); const ssm = new AWS.SSM({ - apiVersion: '2014-11-06', - region: integration.region + apiVersion: "2014-11-06", + region: integration.region, }); const params = { Path: integration.path, Recursive: true, - WithDecryption: true + WithDecryption: true, }; const parameterList = (await ssm.getParametersByPath(params).promise()).Parameters @@ -442,7 +442,7 @@ const syncSecretsAWSParameterStore = async ({ if (parameterList) { awsParameterStoreSecretsObj = parameterList.reduce((obj: any, secret: any) => ({ ...obj, - [secret.Name.split("/").pop()]: secret + [secret.Name.split("/").pop()]: secret, }), {}); } @@ -453,9 +453,9 @@ const syncSecretsAWSParameterStore = async ({ // -> create secret await ssm.putParameter({ Name: `${integration.path}${key}`, - Type: 'SecureString', + Type: "SecureString", Value: secrets[key], - Overwrite: true + Overwrite: true, }).promise(); } else { // case: secret exists in AWS parameter store @@ -465,9 +465,9 @@ const syncSecretsAWSParameterStore = async ({ // -> update secret await ssm.putParameter({ Name: `${integration.path}${key}`, - Type: 'SecureString', + Type: "SecureString", Value: secrets[key], - Overwrite: true + Overwrite: true, }).promise(); } } @@ -479,7 +479,7 @@ const syncSecretsAWSParameterStore = async ({ // case: // -> delete secret await ssm.deleteParameter({ - Name: awsParameterStoreSecretsObj[key].Name + Name: awsParameterStoreSecretsObj[key].Name, }).promise(); } }); @@ -487,7 +487,7 @@ const syncSecretsAWSParameterStore = async ({ AWS.config.update({ region: undefined, accessKeyId: undefined, - secretAccessKey: undefined + secretAccessKey: undefined, }); } @@ -503,7 +503,7 @@ const syncSecretsAWSSecretManager = async ({ integration, secrets, accessId, - accessToken + accessToken, }: { integration: IIntegration; secrets: any; @@ -517,20 +517,20 @@ const syncSecretsAWSSecretManager = async ({ AWS.config.update({ region: integration.region, accessKeyId: accessId, - secretAccessKey: accessToken + secretAccessKey: accessToken, }); secretsManager = new SecretsManagerClient({ region: integration.region, credentials: { accessKeyId: accessId, - secretAccessKey: accessToken - } + secretAccessKey: accessToken, + }, }); const awsSecretManagerSecret = await secretsManager.send( new GetSecretValueCommand({ - SecretId: integration.app + SecretId: integration.app, }) ); @@ -543,26 +543,26 @@ const syncSecretsAWSSecretManager = async ({ if (!_.isEqual(awsSecretManagerSecretObj, secrets)) { await secretsManager.send(new UpdateSecretCommand({ SecretId: integration.app, - SecretString: JSON.stringify(secrets) + SecretString: JSON.stringify(secrets), })); } AWS.config.update({ region: undefined, accessKeyId: undefined, - secretAccessKey: undefined + secretAccessKey: undefined, }); } catch (err) { if (err instanceof ResourceNotFoundException && secretsManager) { await secretsManager.send(new CreateSecretCommand({ Name: integration.app, - SecretString: JSON.stringify(secrets) + SecretString: JSON.stringify(secrets), })); } AWS.config.update({ region: undefined, accessKeyId: undefined, - secretAccessKey: undefined + secretAccessKey: undefined, }); } } @@ -590,7 +590,7 @@ const syncSecretsHeroku = async ({ headers: { Accept: "application/vnd.heroku+json; version=3", Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ) @@ -609,7 +609,7 @@ const syncSecretsHeroku = async ({ headers: { Accept: "application/vnd.heroku+json; version=3", Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -657,8 +657,8 @@ const syncSecretsVercel = async ({ params, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' - } + "Accept-Encoding": "application/json", + }, } )) .data @@ -669,7 +669,7 @@ const syncSecretsVercel = async ({ return false; } - if (integration.targetEnvironment === 'preview' && integration.path && integration.path !== secret.gitBranch) { + if (integration.targetEnvironment === "preview" && integration.path && integration.path !== secret.gitBranch) { // case: secret on preview environment does not have same target git branch return false; } @@ -682,7 +682,7 @@ const syncSecretsVercel = async ({ const res: { [key: string]: VercelSecret } = {}; for await (const vercelSecret of vercelSecrets) { - if (vercelSecret.type === 'encrypted') { + if (vercelSecret.type === "encrypted") { // case: secret is encrypted -> need to decrypt const decryptedSecret = (await standardRequest.get( `${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${vercelSecret.id}`, @@ -690,8 +690,8 @@ const syncSecretsVercel = async ({ params, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' - } + "Accept-Encoding": "application/json", + }, } )).data; @@ -715,8 +715,8 @@ const syncSecretsVercel = async ({ type: "encrypted", target: [integration.targetEnvironment], ...(integration.path ? { - gitBranch: integration.path - } : {}) + gitBranch: integration.path, + } : {}), }); } }); @@ -735,8 +735,8 @@ const syncSecretsVercel = async ({ ? [...res[key].target] : [...res[key].target, integration.targetEnvironment], ...(integration.path ? { - gitBranch: integration.path - } : {}) + gitBranch: integration.path, + } : {}), }); } } else { @@ -748,8 +748,8 @@ const syncSecretsVercel = async ({ type: "encrypted", // value doesn't matter target: [integration.targetEnvironment], ...(integration.path ? { - gitBranch: integration.path - } : {}) + gitBranch: integration.path, + } : {}), }); } }); @@ -763,14 +763,14 @@ const syncSecretsVercel = async ({ params, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); } for await (const secret of updateSecrets) { - if (secret.type !== 'sensitive') { + if (secret.type !== "sensitive") { const { id, ...updatedSecret } = secret; await standardRequest.patch( `${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${secret.id}`, @@ -779,7 +779,7 @@ const syncSecretsVercel = async ({ params, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -793,7 +793,7 @@ const syncSecretsVercel = async ({ params, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -846,7 +846,7 @@ const syncSecretsNetlify = async ({ params: getParams, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ) @@ -961,7 +961,7 @@ const syncSecretsNetlify = async ({ params: syncParams, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -979,7 +979,7 @@ const syncSecretsNetlify = async ({ params: syncParams, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -994,7 +994,7 @@ const syncSecretsNetlify = async ({ params: syncParams, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -1009,7 +1009,7 @@ const syncSecretsNetlify = async ({ params: syncParams, headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -1061,7 +1061,7 @@ const syncSecretsGitHub = async ({ "GET /repos/{owner}/{repo}/actions/secrets/public-key", { owner: integration.owner, - repo: integration.app + repo: integration.app, } ) ).data; @@ -1151,7 +1151,7 @@ const syncSecretsRender = async ({ { headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' + "Accept-Encoding": "application/json", }, } ); @@ -1167,7 +1167,7 @@ const syncSecretsRender = async ({ const syncSecretsRailway = async ({ integration, secrets, - accessToken + accessToken, }: { integration: IIntegration; secrets: any; @@ -1184,7 +1184,7 @@ const syncSecretsRailway = async ({ environmentId: integration.targetEnvironmentId, ...(integration.targetServiceId ? { serviceId: integration.targetServiceId } : {}), replace: true, - variables: secrets + variables: secrets, }; await standardRequest.post(INTEGRATION_RAILWAY_API_URL, { @@ -1194,9 +1194,9 @@ const syncSecretsRailway = async ({ }, }, { headers: { - 'Authorization': `Bearer ${accessToken}`, - 'Content-Type': 'application/json', - 'Accept-Encoding': 'application/json' + "Authorization": `Bearer ${accessToken}`, + "Content-Type": "application/json", + "Accept-Encoding": "application/json", }, }); } @@ -1252,7 +1252,7 @@ const syncSecretsFlyio = async ({ }, { headers: { Authorization: "Bearer " + accessToken, - 'Accept-Encoding': 'application/json', + "Accept-Encoding": "application/json", }, }); @@ -1281,8 +1281,8 @@ const syncSecretsFlyio = async ({ }, { headers: { Authorization: "Bearer " + accessToken, - 'Content-Type': 'application/json', - 'Accept-Encoding': 'application/json', + "Content-Type": "application/json", + "Accept-Encoding": "application/json", }, })).data.data.app.secrets; @@ -1321,7 +1321,7 @@ const syncSecretsFlyio = async ({ headers: { Authorization: "Bearer " + accessToken, "Content-Type": "application/json", - 'Accept-Encoding': 'application/json', + "Accept-Encoding": "application/json", }, }); }; @@ -1432,7 +1432,7 @@ const syncSecretsTravisCI = async ({ ?.env_vars .reduce((obj: any, secret: any) => ({ ...obj, - [secret.name]: secret + [secret.name]: secret, }), {}); // add secrets @@ -1445,8 +1445,8 @@ const syncSecretsTravisCI = async ({ { env_var: { name: key, - value: secrets[key] - } + value: secrets[key], + }, }, { headers: { @@ -1465,7 +1465,7 @@ const syncSecretsTravisCI = async ({ env_var: { name: key, value: secrets[key], - } + }, }, { headers: { @@ -1533,10 +1533,10 @@ const syncSecretsGitLab = async ({ allEnvVariables = [...allEnvVariables, ...response.data]; const linkHeader = response.headers.link; - const nextLink = linkHeader?.split(',').find((part: string) => part.includes('rel="next"')); + const nextLink = linkHeader?.split(",").find((part: string) => part.includes('rel="next"')); if (nextLink) { - url = nextLink.trim().split(';')[0].slice(1, -1); + url = nextLink.trim().split(";")[0].slice(1, -1); } else { url = null; } @@ -1561,7 +1561,7 @@ const syncSecretsGitLab = async ({ protected: false, masked: false, raw: false, - environment_scope: integration.targetEnvironment + environment_scope: integration.targetEnvironment, }, { headers: { @@ -1578,7 +1578,7 @@ const syncSecretsGitLab = async ({ `${INTEGRATION_GITLAB_API_URL}/v4/projects/${integration?.appId}/variables/${existingSecret.key}?filter[environment_scope]=${integration.targetEnvironment}`, { ...existingSecret, - value: secrets[existingSecret.key] + value: secrets[existingSecret.key], }, { headers: { @@ -1618,7 +1618,7 @@ const syncSecretsGitLab = async ({ const syncSecretsSupabase = async ({ integration, secrets, - accessToken + accessToken, }: { integration: IIntegration; secrets: any; @@ -1629,8 +1629,8 @@ const syncSecretsSupabase = async ({ { headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' - } + "Accept-Encoding": "application/json", + }, } ); @@ -1639,7 +1639,7 @@ const syncSecretsSupabase = async ({ (key) => { return { name: key, - value: secrets[key] + value: secrets[key], }; } ); @@ -1650,8 +1650,8 @@ const syncSecretsSupabase = async ({ { headers: { Authorization: `Bearer ${accessToken}`, - 'Accept-Encoding': 'application/json' - } + "Accept-Encoding": "application/json", + }, } ); @@ -1667,10 +1667,10 @@ const syncSecretsSupabase = async ({ { headers: { Authorization: `Bearer ${accessToken}`, - 'Content-Type': 'application/json', - 'Accept-Encoding': 'application/json' + "Content-Type": "application/json", + "Accept-Encoding": "application/json", }, - data: secretsToDelete + data: secretsToDelete, } ); }; @@ -1700,7 +1700,7 @@ const syncSecretsCheckly = async ({ headers: { "Authorization": `Bearer ${accessToken}`, "Accept-Encoding": "application/json", - "X-Checkly-Account": integration.appId + "X-Checkly-Account": integration.appId, }, } ) @@ -1708,7 +1708,7 @@ const syncSecretsCheckly = async ({ .data .reduce((obj: any, secret: any) => ({ ...obj, - [secret.key]: secret.value + [secret.key]: secret.value, }), {}); // add secrets @@ -1721,14 +1721,14 @@ const syncSecretsCheckly = async ({ `${INTEGRATION_CHECKLY_API_URL}/v1/variables`, { key, - value: secrets[key] + value: secrets[key], }, { headers: { "Authorization": `Bearer ${accessToken}`, "Accept": "application/json", "Content-Type": "application/json", - "X-Checkly-Account": integration.appId + "X-Checkly-Account": integration.appId, }, } ); @@ -1740,14 +1740,14 @@ const syncSecretsCheckly = async ({ await standardRequest.put( `${INTEGRATION_CHECKLY_API_URL}/v1/variables/${key}`, { - value: secrets[key] + value: secrets[key], }, { headers: { "Authorization": `Bearer ${accessToken}`, "Content-Type": "application/json", "Accept": "application/json", - "X-Checkly-Account": integration.appId + "X-Checkly-Account": integration.appId, }, } ); @@ -1764,7 +1764,7 @@ const syncSecretsCheckly = async ({ headers: { "Authorization": `Bearer ${accessToken}`, "Accept": "application/json", - "X-Checkly-Account": integration.appId + "X-Checkly-Account": integration.appId, }, } ); @@ -1805,12 +1805,12 @@ const syncSecretsHashiCorpVault = async ({ `${integrationAuth.url}/v1/auth/approle/login`, { "role_id": accessId, - "secret_id": accessToken + "secret_id": accessToken, }, { headers: { - "X-Vault-Namespace": integrationAuth.namespace - } + "X-Vault-Namespace": integrationAuth.namespace, + }, } ); @@ -1819,7 +1819,7 @@ const syncSecretsHashiCorpVault = async ({ await standardRequest.post( `${integrationAuth.url}/v1/${integration.app}/data/${integration.path}`, { - data: secrets + data: secrets, }, { headers: { @@ -1827,7 +1827,7 @@ const syncSecretsHashiCorpVault = async ({ "Accept": "application/json", "Content-Type": "application/json", "X-Vault-Token": clientToken, - "X-Vault-Namespace": integrationAuth.namespace + "X-Vault-Namespace": integrationAuth.namespace, }, } ); diff --git a/backend/src/integrations/teams.ts b/backend/src/integrations/teams.ts index 74fc0ca86..3b0564322 100644 --- a/backend/src/integrations/teams.ts +++ b/backend/src/integrations/teams.ts @@ -1,11 +1,11 @@ import { - IIntegrationAuth -} from '../models'; + IIntegrationAuth, +} from "../models"; import { INTEGRATION_GITLAB, - INTEGRATION_GITLAB_API_URL -} from '../variables'; -import { standardRequest } from '../config/request'; + INTEGRATION_GITLAB_API_URL, +} from "../variables"; +import { standardRequest } from "../config/request"; interface Team { name: string; @@ -23,7 +23,7 @@ interface Team { */ const getTeams = async ({ integrationAuth, - accessToken + accessToken, }: { integrationAuth: IIntegrationAuth; accessToken: string; @@ -34,7 +34,7 @@ const getTeams = async ({ switch (integrationAuth.integration) { case INTEGRATION_GITLAB: teams = await getTeamsGitLab({ - accessToken + accessToken, }); break; } @@ -51,7 +51,7 @@ const getTeams = async ({ * @returns {String} teams.teamId - id of team */ const getTeamsGitLab = async ({ - accessToken + accessToken, }: { accessToken: string; }) => { @@ -61,19 +61,19 @@ const getTeamsGitLab = async ({ { headers: { Authorization: `Bearer ${accessToken}`, - "Accept-Encoding": "application/json" - } + "Accept-Encoding": "application/json", + }, } )).data; teams = res.map((t: any) => ({ name: t.name, - teamId: t.id + teamId: t.id, })); return teams; } export { - getTeams + getTeams, } diff --git a/backend/src/interfaces/middleware/index.ts b/backend/src/interfaces/middleware/index.ts index a368a3be1..3fba92348 100644 --- a/backend/src/interfaces/middleware/index.ts +++ b/backend/src/interfaces/middleware/index.ts @@ -1,9 +1,9 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IUser, IServiceAccount, - IServiceTokenData -} from '../../models'; + IServiceTokenData, + IUser, +} from "../../models"; export interface AuthData { authMode: string; diff --git a/backend/src/interfaces/serviceAccounts/dto/index.ts b/backend/src/interfaces/serviceAccounts/dto/index.ts index 52d8d8342..f69778144 100644 --- a/backend/src/interfaces/serviceAccounts/dto/index.ts +++ b/backend/src/interfaces/serviceAccounts/dto/index.ts @@ -1,7 +1,7 @@ -import CreateServiceAccountDto from './CreateServiceAccountDto'; -import AddServiceAccountPermissionDto from './AddServiceAccountPermissionDto'; +import CreateServiceAccountDto from "./CreateServiceAccountDto"; +import AddServiceAccountPermissionDto from "./AddServiceAccountPermissionDto"; export { CreateServiceAccountDto, - AddServiceAccountPermissionDto + AddServiceAccountPermissionDto, } \ No newline at end of file diff --git a/backend/src/interfaces/utils/index.ts b/backend/src/interfaces/utils/index.ts index 7d27c9105..b781a39bb 100644 --- a/backend/src/interfaces/utils/index.ts +++ b/backend/src/interfaces/utils/index.ts @@ -1 +1 @@ -export * from './crypto'; \ No newline at end of file +export * from "./crypto"; \ No newline at end of file diff --git a/backend/src/middleware/index.ts b/backend/src/middleware/index.ts index 039b8612d..bc2cbc969 100644 --- a/backend/src/middleware/index.ts +++ b/backend/src/middleware/index.ts @@ -1,20 +1,20 @@ -import requireAuth from './requireAuth'; -import requireMfaAuth from './requireMfaAuth'; -import requireBotAuth from './requireBotAuth'; -import requireSignupAuth from './requireSignupAuth'; -import requireWorkspaceAuth from './requireWorkspaceAuth'; -import requireMembershipAuth from './requireMembershipAuth'; -import requireMembershipOrgAuth from './requireMembershipOrgAuth'; -import requireOrganizationAuth from './requireOrganizationAuth'; -import requireIntegrationAuth from './requireIntegrationAuth'; -import requireIntegrationAuthorizationAuth from './requireIntegrationAuthorizationAuth'; -import requireServiceTokenAuth from './requireServiceTokenAuth'; -import requireServiceTokenDataAuth from './requireServiceTokenDataAuth'; -import requireServiceAccountAuth from './requireServiceAccountAuth'; -import requireServiceAccountWorkspacePermissionAuth from './requireServiceAccountWorkspacePermissionAuth'; -import requireSecretAuth from './requireSecretAuth'; -import requireSecretsAuth from './requireSecretsAuth'; -import validateRequest from './validateRequest'; +import requireAuth from "./requireAuth"; +import requireMfaAuth from "./requireMfaAuth"; +import requireBotAuth from "./requireBotAuth"; +import requireSignupAuth from "./requireSignupAuth"; +import requireWorkspaceAuth from "./requireWorkspaceAuth"; +import requireMembershipAuth from "./requireMembershipAuth"; +import requireMembershipOrgAuth from "./requireMembershipOrgAuth"; +import requireOrganizationAuth from "./requireOrganizationAuth"; +import requireIntegrationAuth from "./requireIntegrationAuth"; +import requireIntegrationAuthorizationAuth from "./requireIntegrationAuthorizationAuth"; +import requireServiceTokenAuth from "./requireServiceTokenAuth"; +import requireServiceTokenDataAuth from "./requireServiceTokenDataAuth"; +import requireServiceAccountAuth from "./requireServiceAccountAuth"; +import requireServiceAccountWorkspacePermissionAuth from "./requireServiceAccountWorkspacePermissionAuth"; +import requireSecretAuth from "./requireSecretAuth"; +import requireSecretsAuth from "./requireSecretsAuth"; +import validateRequest from "./validateRequest"; export { requireAuth, @@ -33,5 +33,5 @@ export { requireServiceAccountWorkspacePermissionAuth, requireSecretAuth, requireSecretsAuth, - validateRequest + validateRequest, }; diff --git a/backend/src/middleware/requestErrorHandler.ts b/backend/src/middleware/requestErrorHandler.ts index 6aa73954b..dca6a82ba 100644 --- a/backend/src/middleware/requestErrorHandler.ts +++ b/backend/src/middleware/requestErrorHandler.ts @@ -1,9 +1,9 @@ -import * as Sentry from '@sentry/node'; -import { ErrorRequestHandler } from 'express'; -import { InternalServerError } from '../utils/errors'; -import { getLogger } from '../utils/logger'; -import RequestError, { LogLevel } from '../utils/requestError'; -import { getNodeEnv } from '../config'; +import * as Sentry from "@sentry/node"; +import { ErrorRequestHandler } from "express"; +import { InternalServerError } from "../utils/errors"; +import { getLogger } from "../utils/logger"; +import RequestError, { LogLevel } from "../utils/requestError"; +import { getNodeEnv } from "../config"; export const requestErrorHandler: ErrorRequestHandler = async ( error: RequestError | Error, @@ -24,7 +24,7 @@ export const requestErrorHandler: ErrorRequestHandler = async ( context: { exception: error.message }, stack: error.stack, }); - (await getLogger('backend-main')).log( + (await getLogger("backend-main")).log( (error).levelName.toLowerCase(), (error).message ); diff --git a/backend/src/middleware/requireAuth.ts b/backend/src/middleware/requireAuth.ts index 22de05f68..667524afd 100644 --- a/backend/src/middleware/requireAuth.ts +++ b/backend/src/middleware/requireAuth.ts @@ -1,26 +1,26 @@ -import jwt from 'jsonwebtoken'; -import { Request, Response, NextFunction } from 'express'; +import jwt from "jsonwebtoken"; +import { NextFunction, Request, Response } from "express"; import { - validateAuthMode, - getAuthUserPayload, - getAuthSTDPayload, getAuthAPIKeyPayload, - getAuthSAAKPayload -} from '../helpers/auth'; + getAuthSAAKPayload, + getAuthSTDPayload, + getAuthUserPayload, + validateAuthMode, +} from "../helpers/auth"; import { - IUser, IServiceAccount, - IServiceTokenData -} from '../models'; + IServiceTokenData, + IUser, +} from "../models"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; -import { getChannelFromUserAgent } from '../utils/posthog'; +} from "../variables"; +import { getChannelFromUserAgent } from "../utils/posthog"; -declare module 'jsonwebtoken' { +declare module "jsonwebtoken" { export interface UserIDJwtPayload extends jwt.JwtPayload { userId: string; } @@ -47,32 +47,32 @@ const requireAuth = ({ // and return token type [authTokenType] and value [authTokenValue] const { authMode, authTokenValue } = validateAuthMode({ headers: req.headers, - acceptedAuthModes + acceptedAuthModes, }); let authPayload: IUser | IServiceAccount | IServiceTokenData; switch (authMode) { case AUTH_MODE_SERVICE_ACCOUNT: authPayload = await getAuthSAAKPayload({ - authTokenValue + authTokenValue, }); req.serviceAccount = authPayload; break; case AUTH_MODE_SERVICE_TOKEN: authPayload = await getAuthSTDPayload({ - authTokenValue + authTokenValue, }); req.serviceTokenData = authPayload; break; case AUTH_MODE_API_KEY: authPayload = await getAuthAPIKeyPayload({ - authTokenValue + authTokenValue, }); req.user = authPayload; break; default: const { user, tokenVersionId } = await getAuthUserPayload({ - authTokenValue + authTokenValue, }); authPayload = user; req.user = user; @@ -89,10 +89,10 @@ const requireAuth = ({ req.authData = { authMode, authPayload, // User, ServiceAccount, ServiceTokenData - authChannel: getChannelFromUserAgent(req.headers['user-agent']), + authChannel: getChannelFromUserAgent(req.headers["user-agent"]), authIP: req.realIP, - authUserAgent: req.headers['user-agent'] ?? 'other', - tokenVersionId: req.tokenVersionId + authUserAgent: req.headers["user-agent"] ?? "other", + tokenVersionId: req.tokenVersionId, } return next(); diff --git a/backend/src/middleware/requireBotAuth.ts b/backend/src/middleware/requireBotAuth.ts index 2de8217da..b0dc36956 100644 --- a/backend/src/middleware/requireBotAuth.ts +++ b/backend/src/middleware/requireBotAuth.ts @@ -1,14 +1,14 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForBot } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForBot } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; const requireBotAuth = ({ acceptedRoles, - locationBotId = 'params' + locationBotId = "params", }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; locationBotId?: req; }) => { return async (req: Request, res: Response, next: NextFunction) => { @@ -17,7 +17,7 @@ const requireBotAuth = ({ req.bot = await validateClientForBot({ authData: req.authData, botId: new Types.ObjectId(botId), - acceptedRoles + acceptedRoles, }); next(); diff --git a/backend/src/middleware/requireIntegrationAuth.ts b/backend/src/middleware/requireIntegrationAuth.ts index 94d39a6c1..5adc04353 100644 --- a/backend/src/middleware/requireIntegrationAuth.ts +++ b/backend/src/middleware/requireIntegrationAuth.ts @@ -1,6 +1,6 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForIntegration } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForIntegration } from "../validation"; /** * Validate if user on request is a member of workspace with proper roles associated @@ -9,9 +9,9 @@ import { validateClientForIntegration } from '../validation'; * @param {String[]} obj.acceptedRoles - accepted workspace roles */ const requireIntegrationAuth = ({ - acceptedRoles + acceptedRoles, }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; }) => { return async (req: Request, res: Response, next: NextFunction) => { const { integrationId } = req.params; @@ -19,7 +19,7 @@ const requireIntegrationAuth = ({ const { integration, accessToken } = await validateClientForIntegration({ authData: req.authData, integrationId: new Types.ObjectId(integrationId), - acceptedRoles + acceptedRoles, }); if (integration) { diff --git a/backend/src/middleware/requireIntegrationAuthorizationAuth.ts b/backend/src/middleware/requireIntegrationAuthorizationAuth.ts index 2ddd54093..ccbe7e8a3 100644 --- a/backend/src/middleware/requireIntegrationAuthorizationAuth.ts +++ b/backend/src/middleware/requireIntegrationAuthorizationAuth.ts @@ -1,8 +1,8 @@ -import { Types } from 'mongoose'; -import { Request, Response, NextFunction } from 'express'; -import { validateClientForIntegrationAuth } from '../validation'; +import { Types } from "mongoose"; +import { NextFunction, Request, Response } from "express"; +import { validateClientForIntegrationAuth } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; /** * Validate if user on request is a member of workspace with proper roles associated @@ -14,9 +14,9 @@ type req = 'params' | 'body' | 'query'; const requireIntegrationAuthorizationAuth = ({ acceptedRoles, attachAccessToken = true, - location = 'params' + location = "params", }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; attachAccessToken?: boolean; location?: req; }) => { @@ -27,7 +27,7 @@ const requireIntegrationAuthorizationAuth = ({ authData: req.authData, integrationAuthId: new Types.ObjectId(integrationAuthId), acceptedRoles, - attachAccessToken + attachAccessToken, }); if (integrationAuth) { diff --git a/backend/src/middleware/requireMembershipAuth.ts b/backend/src/middleware/requireMembershipAuth.ts index e03a6ea12..cc781677b 100644 --- a/backend/src/middleware/requireMembershipAuth.ts +++ b/backend/src/middleware/requireMembershipAuth.ts @@ -1,8 +1,8 @@ -import { Types } from 'mongoose'; -import { Request, Response, NextFunction } from 'express'; -import { validateClientForMembership } from '../validation'; +import { Types } from "mongoose"; +import { NextFunction, Request, Response } from "express"; +import { validateClientForMembership } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; /** * Validate membership with id [membershipId] and that user with id @@ -13,9 +13,9 @@ type req = 'params' | 'body' | 'query'; */ const requireMembershipAuth = ({ acceptedRoles, - locationMembershipId = 'params' + locationMembershipId = "params", }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; locationMembershipId: req }) => { return async ( @@ -28,7 +28,7 @@ const requireMembershipAuth = ({ req.targetMembership = await validateClientForMembership({ authData: req.authData, membershipId: new Types.ObjectId(membershipId), - acceptedRoles + acceptedRoles, }); return next(); diff --git a/backend/src/middleware/requireMembershipOrgAuth.ts b/backend/src/middleware/requireMembershipOrgAuth.ts index dda90cae8..00bcb6de8 100644 --- a/backend/src/middleware/requireMembershipOrgAuth.ts +++ b/backend/src/middleware/requireMembershipOrgAuth.ts @@ -1,8 +1,8 @@ -import { Types } from 'mongoose'; -import { Request, Response, NextFunction } from 'express'; -import { validateClientForMembershipOrg } from '../validation'; +import { Types } from "mongoose"; +import { NextFunction, Request, Response } from "express"; +import { validateClientForMembershipOrg } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; /** * Validate (organization) membership id [membershipId] and that user with id @@ -14,10 +14,10 @@ type req = 'params' | 'body' | 'query'; const requireMembershipOrgAuth = ({ acceptedRoles, acceptedStatuses, - locationMembershipOrgId = 'params' + locationMembershipOrgId = "params", }: { - acceptedRoles: Array<'owner' | 'admin' | 'member'>; - acceptedStatuses: Array<'invited' | 'accepted'>; + acceptedRoles: Array<"owner" | "admin" | "member">; + acceptedStatuses: Array<"invited" | "accepted">; locationMembershipOrgId?: req; }) => { return async (req: Request, res: Response, next: NextFunction) => { @@ -27,7 +27,7 @@ const requireMembershipOrgAuth = ({ authData: req.authData, membershipOrgId: new Types.ObjectId(membershipId), acceptedRoles, - acceptedStatuses + acceptedStatuses, }); return next(); diff --git a/backend/src/middleware/requireMfaAuth.ts b/backend/src/middleware/requireMfaAuth.ts index ca0b3434e..7a7f7db4b 100644 --- a/backend/src/middleware/requireMfaAuth.ts +++ b/backend/src/middleware/requireMfaAuth.ts @@ -1,10 +1,10 @@ -import jwt from 'jsonwebtoken'; -import { Request, Response, NextFunction } from 'express'; -import { User } from '../models'; -import { BadRequestError, UnauthorizedRequestError } from '../utils/errors'; -import { getJwtMfaSecret } from '../config'; +import jwt from "jsonwebtoken"; +import { NextFunction, Request, Response } from "express"; +import { User } from "../models"; +import { BadRequestError, UnauthorizedRequestError } from "../utils/errors"; +import { getJwtMfaSecret } from "../config"; -declare module 'jsonwebtoken' { +declare module "jsonwebtoken" { export interface UserIDJwtPayload extends jwt.JwtPayload { userId: string; } @@ -20,21 +20,21 @@ const requireMfaAuth = async ( next: NextFunction ) => { // JWT (temporary) authentication middleware for complete signup - const [ AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE ] = <[string, string]>req.headers['authorization']?.split(' ', 2) ?? [null, null] - if(AUTH_TOKEN_TYPE === null) return next(BadRequestError({message: `Missing Authorization Header in the request header.`})) - if(AUTH_TOKEN_TYPE.toLowerCase() !== 'bearer') return next(BadRequestError({message: `The provided authentication type '${AUTH_TOKEN_TYPE}' is not supported.`})) - if(AUTH_TOKEN_VALUE === null) return next(BadRequestError({message: 'Missing Authorization Body in the request header'})) + const [ AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE ] = <[string, string]>req.headers["authorization"]?.split(" ", 2) ?? [null, null] + if(AUTH_TOKEN_TYPE === null) return next(BadRequestError({message: "Missing Authorization Header in the request header."})) + if(AUTH_TOKEN_TYPE.toLowerCase() !== "bearer") return next(BadRequestError({message: `The provided authentication type '${AUTH_TOKEN_TYPE}' is not supported.`})) + if(AUTH_TOKEN_VALUE === null) return next(BadRequestError({message: "Missing Authorization Body in the request header"})) const decodedToken = ( jwt.verify(AUTH_TOKEN_VALUE, await getJwtMfaSecret()) ); const user = await User.findOne({ - _id: decodedToken.userId - }).select('+publicKey'); + _id: decodedToken.userId, + }).select("+publicKey"); if (!user) - return next(UnauthorizedRequestError({message: 'Unable to authenticate for User account completion. Try logging in again'})) + return next(UnauthorizedRequestError({message: "Unable to authenticate for User account completion. Try logging in again"})) req.user = user; return next(); diff --git a/backend/src/middleware/requireOrganizationAuth.ts b/backend/src/middleware/requireOrganizationAuth.ts index 5f7ef151d..f28660d0e 100644 --- a/backend/src/middleware/requireOrganizationAuth.ts +++ b/backend/src/middleware/requireOrganizationAuth.ts @@ -1,8 +1,8 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForOrganization } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForOrganization } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; /** * Validate if user on request is a member with proper roles for organization @@ -14,10 +14,10 @@ type req = 'params' | 'body' | 'query'; const requireOrganizationAuth = ({ acceptedRoles, acceptedStatuses, - locationOrganizationId = 'params' + locationOrganizationId = "params", }: { - acceptedRoles: Array<'owner' | 'admin' | 'member'>; - acceptedStatuses: Array<'invited' | 'accepted'>; + acceptedRoles: Array<"owner" | "admin" | "member">; + acceptedStatuses: Array<"invited" | "accepted">; locationOrganizationId?: req; }) => { return async (req: Request, res: Response, next: NextFunction) => { @@ -27,7 +27,7 @@ const requireOrganizationAuth = ({ authData: req.authData, organizationId: new Types.ObjectId(organizationId), acceptedRoles, - acceptedStatuses + acceptedStatuses, }); if (organization) { diff --git a/backend/src/middleware/requireSecretAuth.ts b/backend/src/middleware/requireSecretAuth.ts index 4fda73a23..06ad6019e 100644 --- a/backend/src/middleware/requireSecretAuth.ts +++ b/backend/src/middleware/requireSecretAuth.ts @@ -1,6 +1,6 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForSecret } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForSecret } from "../validation"; // note: used for old /v1/secret and /v2/secret routes. // newer /v2/secrets routes use [requireSecretsAuth] middleware with the exception @@ -14,9 +14,9 @@ import { validateClientForSecret } from '../validation'; */ const requireSecretAuth = ({ acceptedRoles, - requiredPermissions + requiredPermissions, }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; requiredPermissions: string[]; }) => { return async (req: Request, res: Response, next: NextFunction) => { @@ -26,7 +26,7 @@ const requireSecretAuth = ({ authData: req.authData, secretId: new Types.ObjectId(secretId), acceptedRoles, - requiredPermissions + requiredPermissions, }); req._secret = secret; diff --git a/backend/src/middleware/requireSecretsAuth.ts b/backend/src/middleware/requireSecretsAuth.ts index f25487b97..3dabdb25c 100644 --- a/backend/src/middleware/requireSecretsAuth.ts +++ b/backend/src/middleware/requireSecretsAuth.ts @@ -1,10 +1,10 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForSecrets } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForSecrets } from "../validation"; const requireSecretsAuth = ({ acceptedRoles, - requiredPermissions = [] + requiredPermissions = [], }: { acceptedRoles: string[]; requiredPermissions?: string[]; @@ -13,18 +13,18 @@ const requireSecretsAuth = ({ let secretIds = []; if (Array.isArray(req.body.secrets)) { secretIds = req.body.secrets.map((s: any) => s.id); - } else if (typeof req.body.secrets === 'object') { + } else if (typeof req.body.secrets === "object") { secretIds = [req.body.secrets.id]; } else if (Array.isArray(req.body.secretIds)) { secretIds = req.body.secretIds; - } else if (typeof req.body.secretIds === 'string') { + } else if (typeof req.body.secretIds === "string") { secretIds = [req.body.secretIds]; } req.secrets = await validateClientForSecrets({ authData: req.authData, secretIds: secretIds.map((secretId: string) => new Types.ObjectId(secretId)), - requiredPermissions + requiredPermissions, }); return next(); diff --git a/backend/src/middleware/requireServiceAccountAuth.ts b/backend/src/middleware/requireServiceAccountAuth.ts index da690c7bb..f7e423b79 100644 --- a/backend/src/middleware/requireServiceAccountAuth.ts +++ b/backend/src/middleware/requireServiceAccountAuth.ts @@ -1,14 +1,14 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForServiceAccount } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForServiceAccount } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; const requireServiceAccountAuth = ({ acceptedRoles, acceptedStatuses, - locationServiceAccountId = 'params', - requiredPermissions = [] + locationServiceAccountId = "params", + requiredPermissions = [], }: { acceptedRoles: string[]; acceptedStatuses: string[]; @@ -21,7 +21,7 @@ const requireServiceAccountAuth = ({ req.serviceAccount = await validateClientForServiceAccount({ authData: req.authData, serviceAccountId: new Types.ObjectId(serviceAccountId), - requiredPermissions + requiredPermissions, }); next(); diff --git a/backend/src/middleware/requireServiceAccountWorkspacePermissionAuth.ts b/backend/src/middleware/requireServiceAccountWorkspacePermissionAuth.ts index 0ceb4f598..535cd2068 100644 --- a/backend/src/middleware/requireServiceAccountWorkspacePermissionAuth.ts +++ b/backend/src/middleware/requireServiceAccountWorkspacePermissionAuth.ts @@ -1,21 +1,21 @@ -import { Request, Response, NextFunction } from 'express'; -import { ServiceAccount, ServiceAccountWorkspacePermission } from '../models'; +import { NextFunction, Request, Response } from "express"; +import { ServiceAccount, ServiceAccountWorkspacePermission } from "../models"; import { - ServiceAccountNotFoundError -} from '../utils/errors'; + ServiceAccountNotFoundError, +} from "../utils/errors"; import { - validateMembershipOrg -} from '../helpers/membershipOrg'; + validateMembershipOrg, +} from "../helpers/membershipOrg"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; const requireServiceAccountWorkspacePermissionAuth = ({ acceptedRoles, acceptedStatuses, - location = 'params' + location = "params", }: { - acceptedRoles: Array<'owner' | 'admin' | 'member'>; - acceptedStatuses: Array<'invited' | 'accepted'>; + acceptedRoles: Array<"owner" | "admin" | "member">; + acceptedStatuses: Array<"invited" | "accepted">; location?: req; }) => { return async (req: Request, res: Response, next: NextFunction) => { @@ -23,13 +23,13 @@ const requireServiceAccountWorkspacePermissionAuth = ({ const serviceAccountWorkspacePermission = await ServiceAccountWorkspacePermission.findById(serviceAccountWorkspacePermissionId); if (!serviceAccountWorkspacePermission) { - return next(ServiceAccountNotFoundError({ message: 'Failed to locate Service Account workspace permission' })); + return next(ServiceAccountNotFoundError({ message: "Failed to locate Service Account workspace permission" })); } const serviceAccount = await ServiceAccount.findById(serviceAccountWorkspacePermission.serviceAccount); if (!serviceAccount) { - return next(ServiceAccountNotFoundError({ message: 'Failed to locate Service Account' })); + return next(ServiceAccountNotFoundError({ message: "Failed to locate Service Account" })); } if (serviceAccount.user.toString() !== req.user.id.toString()) { @@ -39,7 +39,7 @@ const requireServiceAccountWorkspacePermissionAuth = ({ userId: req.user._id, organizationId: serviceAccount.organization, acceptedRoles, - acceptedStatuses + acceptedStatuses, }); } diff --git a/backend/src/middleware/requireServiceTokenAuth.ts b/backend/src/middleware/requireServiceTokenAuth.ts index 5db0dcda5..340f03cc0 100644 --- a/backend/src/middleware/requireServiceTokenAuth.ts +++ b/backend/src/middleware/requireServiceTokenAuth.ts @@ -1,11 +1,11 @@ -import jwt from 'jsonwebtoken'; -import { Request, Response, NextFunction } from 'express'; -import { ServiceToken } from '../models'; -import { BadRequestError, UnauthorizedRequestError } from '../utils/errors'; -import { getJwtServiceSecret } from '../config'; +import jwt from "jsonwebtoken"; +import { NextFunction, Request, Response } from "express"; +import { ServiceToken } from "../models"; +import { BadRequestError, UnauthorizedRequestError } from "../utils/errors"; +import { getJwtServiceSecret } from "../config"; // TODO: deprecate -declare module 'jsonwebtoken' { +declare module "jsonwebtoken" { export interface UserIDJwtPayload extends jwt.JwtPayload { userId: string; } @@ -26,23 +26,23 @@ const requireServiceTokenAuth = async ( ) => { // JWT service token middleware - const [ AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE ] = <[string, string]>req.headers['authorization']?.split(' ', 2) ?? [null, null] - if(AUTH_TOKEN_TYPE === null) return next(BadRequestError({message: `Missing Authorization Header in the request header.`})) + const [ AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE ] = <[string, string]>req.headers["authorization"]?.split(" ", 2) ?? [null, null] + if(AUTH_TOKEN_TYPE === null) return next(BadRequestError({message: "Missing Authorization Header in the request header."})) //TODO: Determine what is the actual Token Type for Service Token Authentication (ex. Bearer) //if(AUTH_TOKEN_TYPE.toLowerCase() !== 'bearer') return next(UnauthorizedRequestError({message: `The provided authentication type '${AUTH_TOKEN_TYPE}' is not supported.`})) - if(AUTH_TOKEN_VALUE === null) return next(BadRequestError({message: 'Missing Authorization Body in the request header'})) + if(AUTH_TOKEN_VALUE === null) return next(BadRequestError({message: "Missing Authorization Body in the request header"})) const decodedToken = ( jwt.verify(AUTH_TOKEN_VALUE, await getJwtServiceSecret()) ); const serviceToken = await ServiceToken.findOne({ - _id: decodedToken.serviceTokenId + _id: decodedToken.serviceTokenId, }) - .populate('user', '+publicKey') - .select('+encryptedKey +publicKey +nonce'); + .populate("user", "+publicKey") + .select("+encryptedKey +publicKey +nonce"); - if (!serviceToken) return next(UnauthorizedRequestError({message: 'The service token does not match the record in the database'})) + if (!serviceToken) return next(UnauthorizedRequestError({message: "The service token does not match the record in the database"})) req.serviceToken = serviceToken; return next(); diff --git a/backend/src/middleware/requireServiceTokenDataAuth.ts b/backend/src/middleware/requireServiceTokenDataAuth.ts index be93fd799..df5ca5ef1 100644 --- a/backend/src/middleware/requireServiceTokenDataAuth.ts +++ b/backend/src/middleware/requireServiceTokenDataAuth.ts @@ -1,14 +1,14 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForServiceTokenData } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForServiceTokenData } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; const requireServiceTokenDataAuth = ({ acceptedRoles, - location = 'params' + location = "params", }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; location?: req; }) => { return async (req: Request, res: Response, next: NextFunction) => { @@ -17,7 +17,7 @@ const requireServiceTokenDataAuth = ({ req.serviceTokenData = await validateClientForServiceTokenData({ authData: req.authData, serviceTokenDataId: new Types.ObjectId(serviceTokenDataId), - acceptedRoles + acceptedRoles, }); next(); diff --git a/backend/src/middleware/requireSignupAuth.ts b/backend/src/middleware/requireSignupAuth.ts index 6a0fd0b6e..3c5c48d12 100644 --- a/backend/src/middleware/requireSignupAuth.ts +++ b/backend/src/middleware/requireSignupAuth.ts @@ -1,10 +1,10 @@ -import jwt from 'jsonwebtoken'; -import { Request, Response, NextFunction } from 'express'; -import { User } from '../models'; -import { BadRequestError, UnauthorizedRequestError } from '../utils/errors'; -import { getJwtSignupSecret } from '../config'; +import jwt from "jsonwebtoken"; +import { NextFunction, Request, Response } from "express"; +import { User } from "../models"; +import { BadRequestError, UnauthorizedRequestError } from "../utils/errors"; +import { getJwtSignupSecret } from "../config"; -declare module 'jsonwebtoken' { +declare module "jsonwebtoken" { export interface UserIDJwtPayload extends jwt.JwtPayload { userId: string; } @@ -21,21 +21,21 @@ const requireSignupAuth = async ( ) => { // JWT (temporary) authentication middleware for complete signup - const [ AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE ] = <[string, string]>req.headers['authorization']?.split(' ', 2) ?? [null, null] - if(AUTH_TOKEN_TYPE === null) return next(BadRequestError({message: `Missing Authorization Header in the request header.`})) - if(AUTH_TOKEN_TYPE.toLowerCase() !== 'bearer') return next(BadRequestError({message: `The provided authentication type '${AUTH_TOKEN_TYPE}' is not supported.`})) - if(AUTH_TOKEN_VALUE === null) return next(BadRequestError({message: 'Missing Authorization Body in the request header'})) + const [ AUTH_TOKEN_TYPE, AUTH_TOKEN_VALUE ] = <[string, string]>req.headers["authorization"]?.split(" ", 2) ?? [null, null] + if(AUTH_TOKEN_TYPE === null) return next(BadRequestError({message: "Missing Authorization Header in the request header."})) + if(AUTH_TOKEN_TYPE.toLowerCase() !== "bearer") return next(BadRequestError({message: `The provided authentication type '${AUTH_TOKEN_TYPE}' is not supported.`})) + if(AUTH_TOKEN_VALUE === null) return next(BadRequestError({message: "Missing Authorization Body in the request header"})) const decodedToken = ( jwt.verify(AUTH_TOKEN_VALUE, await getJwtSignupSecret()) ); const user = await User.findOne({ - _id: decodedToken.userId - }).select('+publicKey'); + _id: decodedToken.userId, + }).select("+publicKey"); if (!user) - return next(UnauthorizedRequestError({message: 'Unable to authenticate for User account completion. Try logging in again'})) + return next(UnauthorizedRequestError({message: "Unable to authenticate for User account completion. Try logging in again"})) req.user = user; return next(); diff --git a/backend/src/middleware/requireWorkspaceAuth.ts b/backend/src/middleware/requireWorkspaceAuth.ts index 9833e6e56..197995a65 100644 --- a/backend/src/middleware/requireWorkspaceAuth.ts +++ b/backend/src/middleware/requireWorkspaceAuth.ts @@ -1,8 +1,8 @@ -import { Request, Response, NextFunction } from 'express'; -import { Types } from 'mongoose'; -import { validateClientForWorkspace } from '../validation'; +import { NextFunction, Request, Response } from "express"; +import { Types } from "mongoose"; +import { validateClientForWorkspace } from "../validation"; -type req = 'params' | 'body' | 'query'; +type req = "params" | "body" | "query"; /** * Validate if user on request is a member with proper roles for workspace @@ -17,9 +17,9 @@ const requireWorkspaceAuth = ({ locationEnvironment = undefined, requiredPermissions = [], requireBlindIndicesEnabled = false, - requireE2EEOff = false + requireE2EEOff = false, }: { - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; locationWorkspaceId: req; locationEnvironment?: req | undefined; requiredPermissions?: string[]; @@ -38,7 +38,7 @@ const requireWorkspaceAuth = ({ acceptedRoles, requiredPermissions, requireBlindIndicesEnabled, - requireE2EEOff + requireE2EEOff, }); if (membership) { diff --git a/backend/src/middleware/validateRequest.ts b/backend/src/middleware/validateRequest.ts index 1b0364766..56ea2653c 100644 --- a/backend/src/middleware/validateRequest.ts +++ b/backend/src/middleware/validateRequest.ts @@ -1,6 +1,6 @@ -import { Request, Response, NextFunction } from 'express'; -import { validationResult } from 'express-validator'; -import { BadRequestError, UnauthorizedRequestError, ValidationError } from '../utils/errors'; +import { NextFunction, Request, Response } from "express"; +import { validationResult } from "express-validator"; +import { UnauthorizedRequestError, ValidationError } from "../utils/errors"; /** * Validate intended inputs on [req] via express-validator @@ -20,7 +20,7 @@ const validate = (req: Request, res: Response, next: NextFunction) => { return next(); } catch (err) { - return next(UnauthorizedRequestError({ message: 'Unauthenticated requests are not allowed. Try logging in' })) + return next(UnauthorizedRequestError({ message: "Unauthenticated requests are not allowed. Try logging in" })) } }; diff --git a/backend/src/models/apiKeyData.ts b/backend/src/models/apiKeyData.ts index 1b6831730..622e62be1 100644 --- a/backend/src/models/apiKeyData.ts +++ b/backend/src/models/apiKeyData.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IAPIKeyData { name: string; @@ -12,30 +12,30 @@ const apiKeyDataSchema = new Schema( { name: { type: String, - required: true + required: true, }, user: { type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, lastUsed: { - type: Date + type: Date, }, expiresAt: { - type: Date + type: Date, }, secretHash: { type: String, required: true, - select: false - } + select: false, + }, }, { - timestamps: true + timestamps: true, } ); -const APIKeyData = model('APIKeyData', apiKeyDataSchema); +const APIKeyData = model("APIKeyData", apiKeyDataSchema); export default APIKeyData; diff --git a/backend/src/models/backupPrivateKey.ts b/backend/src/models/backupPrivateKey.ts index 09bcbb588..01f0dae21 100644 --- a/backend/src/models/backupPrivateKey.ts +++ b/backend/src/models/backupPrivateKey.ts @@ -1,9 +1,9 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; import { ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_BASE64, ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 -} from '../variables'; +} from "../variables"; export interface IBackupPrivateKey { _id: Types.ObjectId; @@ -13,7 +13,7 @@ export interface IBackupPrivateKey { tag: string; salt: string; algorithm: string; - keyEncoding: 'base64' | 'utf8'; + keyEncoding: "base64" | "utf8"; verifier: string; } @@ -21,55 +21,55 @@ const backupPrivateKeySchema = new Schema( { user: { type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, encryptedPrivateKey: { type: String, select: false, - required: true + required: true, }, iv: { type: String, select: false, - required: true + required: true, }, tag: { type: String, select: false, - required: true + required: true, }, algorithm: { // the encryption algorithm used type: String, enum: [ALGORITHM_AES_256_GCM], - required: true + required: true, }, keyEncoding: { type: String, enum: [ ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 + ENCODING_SCHEME_BASE64, ], - required: true + required: true, }, salt: { type: String, select: false, - required: true + required: true, }, verifier: { type: String, select: false, - required: true - } + required: true, + }, }, { - timestamps: true + timestamps: true, } ); const BackupPrivateKey = model( - 'BackupPrivateKey', + "BackupPrivateKey", backupPrivateKeySchema ); diff --git a/backend/src/models/bot.ts b/backend/src/models/bot.ts index 5755bfd8e..96107a231 100644 --- a/backend/src/models/bot.ts +++ b/backend/src/models/bot.ts @@ -1,10 +1,9 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; import { ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_BASE64, ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_HEX, - ENCODING_SCHEME_BASE64 -} from '../variables'; +} from "../variables"; export interface IBot { _id: Types.ObjectId; @@ -15,66 +14,66 @@ export interface IBot { encryptedPrivateKey: string; iv: string; tag: string; - algorithm: 'aes-256-gcm'; - keyEncoding: 'base64' | 'utf8'; + algorithm: "aes-256-gcm"; + keyEncoding: "base64" | "utf8"; } const botSchema = new Schema( { name: { type: String, - required: true + required: true, }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace', - required: true + ref: "Workspace", + required: true, }, isActive: { type: Boolean, required: true, - default: false + default: false, }, publicKey: { type: String, - required: true + required: true, }, encryptedPrivateKey: { type: String, required: true, - select: false + select: false, }, iv: { type: String, required: true, - select: false + select: false, }, tag: { type: String, required: true, - select: false + select: false, }, algorithm: { // the encryption algorithm used type: String, enum: [ALGORITHM_AES_256_GCM], required: true, - select: false + select: false, }, keyEncoding: { type: String, enum: [ ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 + ENCODING_SCHEME_BASE64, ], required: true, - select: false - } + select: false, + }, }, { - timestamps: true + timestamps: true, } ); -const Bot = model('Bot', botSchema); +const Bot = model("Bot", botSchema); export default Bot; diff --git a/backend/src/models/botKey.ts b/backend/src/models/botKey.ts index 79555cd53..b7be364dd 100644 --- a/backend/src/models/botKey.ts +++ b/backend/src/models/botKey.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IBotKey { _id: Types.ObjectId; @@ -13,33 +13,33 @@ const botKeySchema = new Schema( { encryptedKey: { type: String, - required: true + required: true, }, nonce: { type: String, - required: true + required: true, }, sender: { type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, bot: { type: Schema.Types.ObjectId, - ref: 'Bot', - required: true + ref: "Bot", + required: true, }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace', - required: true - } + ref: "Workspace", + required: true, + }, }, { - timestamps: true + timestamps: true, } ); -const BotKey = model('BotKey', botKeySchema); +const BotKey = model("BotKey", botKeySchema); export default BotKey; diff --git a/backend/src/models/folder.ts b/backend/src/models/folder.ts index ac0358287..46f532c7d 100644 --- a/backend/src/models/folder.ts +++ b/backend/src/models/folder.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from "mongoose"; +import { Schema, Types, model } from "mongoose"; export type TFolderRootSchema = { _id: Types.ObjectId; diff --git a/backend/src/models/incidentContactOrg.ts b/backend/src/models/incidentContactOrg.ts index e1a969e11..16e5e4f02 100644 --- a/backend/src/models/incidentContactOrg.ts +++ b/backend/src/models/incidentContactOrg.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IIncidentContactOrg { _id: Types.ObjectId; @@ -10,21 +10,21 @@ const incidentContactOrgSchema = new Schema( { email: { type: String, - required: true + required: true, }, organization: { type: Schema.Types.ObjectId, - ref: 'Organization', - required: true - } + ref: "Organization", + required: true, + }, }, { - timestamps: true + timestamps: true, } ); const IncidentContactOrg = model( - 'IncidentContactOrg', + "IncidentContactOrg", incidentContactOrgSchema ); diff --git a/backend/src/models/index.ts b/backend/src/models/index.ts index cb4ee672a..bf997811a 100644 --- a/backend/src/models/index.ts +++ b/backend/src/models/index.ts @@ -1,28 +1,28 @@ -import BackupPrivateKey, { IBackupPrivateKey } from './backupPrivateKey'; -import Bot, { IBot } from './bot'; -import BotKey, { IBotKey } from './botKey'; -import IncidentContactOrg, { IIncidentContactOrg } from './incidentContactOrg'; -import Integration, { IIntegration } from './integration'; -import IntegrationAuth, { IIntegrationAuth } from './integrationAuth'; -import Key, { IKey } from './key'; -import Membership, { IMembership } from './membership'; -import MembershipOrg, { IMembershipOrg } from './membershipOrg'; -import Organization, { IOrganization } from './organization'; -import Secret, { ISecret } from './secret'; -import SecretBlindIndexData, { ISecretBlindIndexData } from './secretBlindIndexData'; -import ServiceToken, { IServiceToken } from './serviceToken'; -import ServiceAccount, { IServiceAccount } from './serviceAccount'; // new -import ServiceAccountKey, { IServiceAccountKey } from './serviceAccountKey'; // new -import ServiceAccountOrganizationPermission, { IServiceAccountOrganizationPermission } from './serviceAccountOrganizationPermission'; // new -import ServiceAccountWorkspacePermission, { IServiceAccountWorkspacePermission } from './serviceAccountWorkspacePermission'; // new -import TokenData, { ITokenData } from './tokenData'; -import User,{ AuthProvider, IUser } from './user'; -import UserAction, { IUserAction } from './userAction'; -import Workspace, { IWorkspace } from './workspace'; -import ServiceTokenData, { IServiceTokenData } from './serviceTokenData'; -import APIKeyData, { IAPIKeyData } from './apiKeyData'; -import LoginSRPDetail, { ILoginSRPDetail } from './loginSRPDetail'; -import TokenVersion, { ITokenVersion } from './tokenVersion'; +import BackupPrivateKey, { IBackupPrivateKey } from "./backupPrivateKey"; +import Bot, { IBot } from "./bot"; +import BotKey, { IBotKey } from "./botKey"; +import IncidentContactOrg, { IIncidentContactOrg } from "./incidentContactOrg"; +import Integration, { IIntegration } from "./integration"; +import IntegrationAuth, { IIntegrationAuth } from "./integrationAuth"; +import Key, { IKey } from "./key"; +import Membership, { IMembership } from "./membership"; +import MembershipOrg, { IMembershipOrg } from "./membershipOrg"; +import Organization, { IOrganization } from "./organization"; +import Secret, { ISecret } from "./secret"; +import SecretBlindIndexData, { ISecretBlindIndexData } from "./secretBlindIndexData"; +import ServiceToken, { IServiceToken } from "./serviceToken"; +import ServiceAccount, { IServiceAccount } from "./serviceAccount"; // new +import ServiceAccountKey, { IServiceAccountKey } from "./serviceAccountKey"; // new +import ServiceAccountOrganizationPermission, { IServiceAccountOrganizationPermission } from "./serviceAccountOrganizationPermission"; // new +import ServiceAccountWorkspacePermission, { IServiceAccountWorkspacePermission } from "./serviceAccountWorkspacePermission"; // new +import TokenData, { ITokenData } from "./tokenData"; +import User,{ AuthProvider, IUser } from "./user"; +import UserAction, { IUserAction } from "./userAction"; +import Workspace, { IWorkspace } from "./workspace"; +import ServiceTokenData, { IServiceTokenData } from "./serviceTokenData"; +import APIKeyData, { IAPIKeyData } from "./apiKeyData"; +import LoginSRPDetail, { ILoginSRPDetail } from "./loginSRPDetail"; +import TokenVersion, { ITokenVersion } from "./tokenVersion"; export { AuthProvider, @@ -75,5 +75,5 @@ export { LoginSRPDetail, ILoginSRPDetail, TokenVersion, - ITokenVersion + ITokenVersion, }; diff --git a/backend/src/models/integration.ts b/backend/src/models/integration.ts index c23cf69f1..87281b5cc 100644 --- a/backend/src/models/integration.ts +++ b/backend/src/models/integration.ts @@ -1,21 +1,21 @@ -import { Schema, model, Types } from "mongoose"; +import { Schema, Types, model } from "mongoose"; import { - INTEGRATION_AZURE_KEY_VAULT, INTEGRATION_AWS_PARAMETER_STORE, INTEGRATION_AWS_SECRET_MANAGER, - INTEGRATION_HEROKU, - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, + INTEGRATION_AZURE_KEY_VAULT, + INTEGRATION_CHECKLY, + INTEGRATION_CIRCLECI, + INTEGRATION_FLYIO, INTEGRATION_GITHUB, INTEGRATION_GITLAB, - INTEGRATION_RENDER, - INTEGRATION_RAILWAY, - INTEGRATION_FLYIO, - INTEGRATION_CIRCLECI, - INTEGRATION_TRAVISCI, - INTEGRATION_SUPABASE, - INTEGRATION_CHECKLY, INTEGRATION_HASHICORP_VAULT, + INTEGRATION_HEROKU, + INTEGRATION_NETLIFY, + INTEGRATION_RAILWAY, + INTEGRATION_RENDER, + INTEGRATION_SUPABASE, + INTEGRATION_TRAVISCI, + INTEGRATION_VERCEL, } from "../variables"; export interface IIntegration { diff --git a/backend/src/models/integrationAuth.ts b/backend/src/models/integrationAuth.ts index cc28c9fd6..9f5293bb5 100644 --- a/backend/src/models/integrationAuth.ts +++ b/backend/src/models/integrationAuth.ts @@ -1,29 +1,29 @@ -import { Schema, model, Types, Document } from "mongoose"; +import { Document, Schema, Types, model } from "mongoose"; import { - INTEGRATION_AZURE_KEY_VAULT, + ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_BASE64, + ENCODING_SCHEME_UTF8, INTEGRATION_AWS_PARAMETER_STORE, INTEGRATION_AWS_SECRET_MANAGER, - INTEGRATION_HEROKU, - INTEGRATION_VERCEL, - INTEGRATION_NETLIFY, + INTEGRATION_AZURE_KEY_VAULT, + INTEGRATION_CIRCLECI, + INTEGRATION_FLYIO, INTEGRATION_GITHUB, INTEGRATION_GITLAB, - INTEGRATION_RENDER, - INTEGRATION_RAILWAY, - INTEGRATION_FLYIO, - INTEGRATION_CIRCLECI, - INTEGRATION_TRAVISCI, - INTEGRATION_SUPABASE, INTEGRATION_HASHICORP_VAULT, - ALGORITHM_AES_256_GCM, - ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 + INTEGRATION_HEROKU, + INTEGRATION_NETLIFY, + INTEGRATION_RAILWAY, + INTEGRATION_RENDER, + INTEGRATION_SUPABASE, + INTEGRATION_TRAVISCI, + INTEGRATION_VERCEL, } from "../variables"; export interface IIntegrationAuth extends Document { _id: Types.ObjectId; workspace: Types.ObjectId; - integration: 'heroku' | 'vercel' | 'netlify' | 'github' | 'gitlab' | 'render' | 'railway' | 'flyio' | 'azure-key-vault' | 'circleci' | 'travisci' | 'supabase' | 'aws-parameter-store' | 'aws-secret-manager' | 'checkly'; + integration: "heroku" | "vercel" | "netlify" | "github" | "gitlab" | "render" | "railway" | "flyio" | "azure-key-vault" | "circleci" | "travisci" | "supabase" | "aws-parameter-store" | "aws-secret-manager" | "checkly"; teamId: string; accountId: string; url: string; @@ -37,8 +37,8 @@ export interface IIntegrationAuth extends Document { accessCiphertext?: string; accessIV?: string; accessTag?: string; - algorithm?: 'aes-256-gcm'; - keyEncoding?: 'utf8' | 'base64'; + algorithm?: "aes-256-gcm"; + keyEncoding?: "utf8" | "base64"; accessExpiresAt?: Date; } @@ -66,7 +66,7 @@ const integrationAuthSchema = new Schema( INTEGRATION_CIRCLECI, INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_HASHICORP_VAULT, ], required: true, }, @@ -76,11 +76,11 @@ const integrationAuthSchema = new Schema( }, url: { // for any self-hosted integrations (e.g. self-hosted hashicorp-vault) - type: String + type: String, }, namespace: { // hashicorp-vault-specific integration param - type: String + type: String, }, accountId: { // netlify-specific integration param @@ -100,15 +100,15 @@ const integrationAuthSchema = new Schema( }, accessIdCiphertext: { type: String, - select: false + select: false, }, accessIdIV: { type: String, - select: false + select: false, }, accessIdTag: { type: String, - select: false + select: false, }, accessCiphertext: { type: String, @@ -129,16 +129,16 @@ const integrationAuthSchema = new Schema( algorithm: { // the encryption algorithm used type: String, enum: [ALGORITHM_AES_256_GCM], - required: true + required: true, }, keyEncoding: { type: String, enum: [ ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 + ENCODING_SCHEME_BASE64, ], - required: true - } + required: true, + }, }, { timestamps: true, diff --git a/backend/src/models/key.ts b/backend/src/models/key.ts index cd3d3fdd5..faa37cd86 100644 --- a/backend/src/models/key.ts +++ b/backend/src/models/key.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IKey { _id: Types.ObjectId; @@ -13,33 +13,33 @@ const keySchema = new Schema( { encryptedKey: { type: String, - required: true + required: true, }, nonce: { type: String, - required: true + required: true, }, sender: { type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, receiver: { type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace', - required: true - } + ref: "Workspace", + required: true, + }, }, { - timestamps: true + timestamps: true, } ); -const Key = model('Key', keySchema); +const Key = model("Key", keySchema); export default Key; diff --git a/backend/src/models/loginSRPDetail.ts b/backend/src/models/loginSRPDetail.ts index dde59233d..8e9e121c5 100644 --- a/backend/src/models/loginSRPDetail.ts +++ b/backend/src/models/loginSRPDetail.ts @@ -1,4 +1,4 @@ -import mongoose, { Schema, model, Types } from 'mongoose'; +import mongoose, { Schema, Types, model } from "mongoose"; export interface ILoginSRPDetail { _id: Types.ObjectId; @@ -13,17 +13,17 @@ const loginSRPDetailSchema = new Schema( { clientPublicKey: { type: String, - required: true + required: true, }, email: { type: String, - unique: true + unique: true, }, serverBInt: { type: mongoose.Schema.Types.Buffer }, - expireAt: { type: Date } + expireAt: { type: Date }, } ); -const LoginSRPDetail = model('LoginSRPDetail', loginSRPDetailSchema); +const LoginSRPDetail = model("LoginSRPDetail", loginSRPDetailSchema); export default LoginSRPDetail; diff --git a/backend/src/models/membership.ts b/backend/src/models/membership.ts index 55b8f2048..0fca743b4 100644 --- a/backend/src/models/membership.ts +++ b/backend/src/models/membership.ts @@ -1,5 +1,5 @@ -import { Schema, model, Types } from 'mongoose'; -import { ADMIN, MEMBER } from '../variables'; +import { Schema, Types, model } from "mongoose"; +import { ADMIN, MEMBER } from "../variables"; export interface IMembershipPermission { environmentSlug: string, @@ -11,7 +11,7 @@ export interface IMembership { user: Types.ObjectId; inviteEmail?: string; workspace: Types.ObjectId; - role: 'admin' | 'member'; + role: "admin" | "member"; deniedPermissions: IMembershipPermission[] } @@ -19,15 +19,15 @@ const membershipSchema = new Schema( { user: { type: Schema.Types.ObjectId, - ref: 'User' + ref: "User", }, inviteEmail: { - type: String + type: String, }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace', - required: true + ref: "Workspace", + required: true, }, deniedPermissions: { type: [ @@ -35,23 +35,23 @@ const membershipSchema = new Schema( environmentSlug: String, ability: { type: String, - enum: ['read', 'write'] + enum: ["read", "write"], }, }, ], - default: [] + default: [], }, role: { type: String, enum: [ADMIN, MEMBER], - required: true - } + required: true, + }, }, { - timestamps: true + timestamps: true, } ); -const Membership = model('Membership', membershipSchema); +const Membership = model("Membership", membershipSchema); export default Membership; diff --git a/backend/src/models/membershipOrg.ts b/backend/src/models/membershipOrg.ts index 540a4451b..74a09b805 100644 --- a/backend/src/models/membershipOrg.ts +++ b/backend/src/models/membershipOrg.ts @@ -1,46 +1,46 @@ -import { Schema, model, Types, Document } from 'mongoose'; -import { OWNER, ADMIN, MEMBER, INVITED, ACCEPTED } from '../variables'; +import { Document, Schema, Types, model } from "mongoose"; +import { ACCEPTED, ADMIN, INVITED, MEMBER, OWNER } from "../variables"; export interface IMembershipOrg extends Document { _id: Types.ObjectId; user: Types.ObjectId; inviteEmail: string; organization: Types.ObjectId; - role: 'owner' | 'admin' | 'member'; - status: 'invited' | 'accepted'; + role: "owner" | "admin" | "member"; + status: "invited" | "accepted"; } const membershipOrgSchema = new Schema( { user: { type: Schema.Types.ObjectId, - ref: 'User' + ref: "User", }, inviteEmail: { - type: String + type: String, }, organization: { type: Schema.Types.ObjectId, - ref: 'Organization' + ref: "Organization", }, role: { type: String, enum: [OWNER, ADMIN, MEMBER], - required: true + required: true, }, status: { type: String, enum: [INVITED, ACCEPTED], - required: true - } + required: true, + }, }, { - timestamps: true + timestamps: true, } ); const MembershipOrg = model( - 'MembershipOrg', + "MembershipOrg", membershipOrgSchema ); diff --git a/backend/src/models/organization.ts b/backend/src/models/organization.ts index a39d42cd0..bafcc05f8 100644 --- a/backend/src/models/organization.ts +++ b/backend/src/models/organization.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IOrganization { _id: Types.ObjectId; @@ -10,17 +10,17 @@ const organizationSchema = new Schema( { name: { type: String, - required: true + required: true, }, customerId: { - type: String - } + type: String, + }, }, { - timestamps: true + timestamps: true, } ); -const Organization = model('Organization', organizationSchema); +const Organization = model("Organization", organizationSchema); export default Organization; diff --git a/backend/src/models/secret.ts b/backend/src/models/secret.ts index ff34d99b1..34a4d7501 100644 --- a/backend/src/models/secret.ts +++ b/backend/src/models/secret.ts @@ -1,10 +1,10 @@ -import { Schema, model, Types } from "mongoose"; +import { Schema, Types, model } from "mongoose"; import { - SECRET_SHARED, - SECRET_PERSONAL, ALGORITHM_AES_256_GCM, - ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64, + ENCODING_SCHEME_UTF8, + SECRET_PERSONAL, + SECRET_SHARED, } from "../variables"; export interface ISecret { diff --git a/backend/src/models/secretApprovalRequest.ts b/backend/src/models/secretApprovalRequest.ts index 9fa897e25..008274dd9 100644 --- a/backend/src/models/secretApprovalRequest.ts +++ b/backend/src/models/secretApprovalRequest.ts @@ -1,5 +1,5 @@ -import mongoose, { Schema, model } from 'mongoose'; -import Secret, { ISecret } from './secret'; +import mongoose, { Schema, model } from "mongoose"; +import Secret, { ISecret } from "./secret"; interface ISecretApprovalRequest { secret: mongoose.Types.ObjectId; @@ -18,66 +18,66 @@ interface IApprover { } export enum ApprovalStatus { - PENDING = 'pending', - APPROVED = 'approved', - REJECTED = 'rejected' + PENDING = "pending", + APPROVED = "approved", + REJECTED = "rejected" } export enum RequestType { - UPDATE = 'update', - DELETE = 'delete', - CREATE = 'create' + UPDATE = "update", + DELETE = "delete", + CREATE = "create" } const approverSchema = new mongoose.Schema({ user: { type: mongoose.Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, status: { type: String, enum: [ApprovalStatus], - default: ApprovalStatus.PENDING - } + default: ApprovalStatus.PENDING, + }, }); const secretApprovalRequestSchema = new Schema( { secret: { type: mongoose.Schema.Types.ObjectId, - ref: 'Secret' + ref: "Secret", }, requestedChanges: Secret, requestedBy: { type: mongoose.Schema.Types.ObjectId, - ref: 'User' + ref: "User", }, approvers: [approverSchema], status: { type: String, enum: ApprovalStatus, - default: ApprovalStatus.PENDING + default: ApprovalStatus.PENDING, }, timestamp: { type: Date, - default: Date.now + default: Date.now, }, requestType: { type: String, enum: RequestType, - required: true + required: true, }, requestId: { type: String, - required: false - } + required: false, + }, }, { - timestamps: true + timestamps: true, } ); -const SecretApprovalRequest = model('SecretApprovalRequest', secretApprovalRequestSchema); +const SecretApprovalRequest = model("SecretApprovalRequest", secretApprovalRequestSchema); export default SecretApprovalRequest; diff --git a/backend/src/models/secretBlindIndexData.ts b/backend/src/models/secretBlindIndexData.ts index 885faaff6..ca277d19e 100644 --- a/backend/src/models/secretBlindIndexData.ts +++ b/backend/src/models/secretBlindIndexData.ts @@ -1,9 +1,9 @@ -import { Schema, model, Types, Document } from 'mongoose'; +import { Document, Schema, Types, model } from "mongoose"; import { ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_BASE64, ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 -} from '../variables'; +} from "../variables"; export interface ISecretBlindIndexData extends Document { _id: Types.ObjectId; @@ -11,48 +11,48 @@ export interface ISecretBlindIndexData extends Document { encryptedSaltCiphertext: string; saltIV: string; saltTag: string; - algorithm: 'aes-256-gcm'; - keyEncoding: 'base64' | 'utf8' + algorithm: "aes-256-gcm"; + keyEncoding: "base64" | "utf8" } const secretBlindIndexDataSchema = new Schema( { workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace', - required: true + ref: "Workspace", + required: true, }, encryptedSaltCiphertext: { // TODO: make these select: false type: String, - required: true + required: true, }, saltIV: { type: String, - required: true + required: true, }, saltTag: { type: String, - required: true + required: true, }, algorithm: { type: String, enum: [ALGORITHM_AES_256_GCM], required: true, - select: false + select: false, }, keyEncoding: { type: String, enum: [ ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 + ENCODING_SCHEME_BASE64, ], required: true, - select: false - } + select: false, + }, } ); -const SecretBlindIndexData = model('SecretBlindIndexData', secretBlindIndexDataSchema); +const SecretBlindIndexData = model("SecretBlindIndexData", secretBlindIndexDataSchema); export default SecretBlindIndexData; \ No newline at end of file diff --git a/backend/src/models/serviceAccount.ts b/backend/src/models/serviceAccount.ts index 9ff9dcb03..090d55c21 100644 --- a/backend/src/models/serviceAccount.ts +++ b/backend/src/models/serviceAccount.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types, Document } from 'mongoose'; +import { Document, Schema, Types, model } from "mongoose"; export interface IServiceAccount extends Document { _id: Types.ObjectId; @@ -15,39 +15,39 @@ const serviceAccountSchema = new Schema( { name: { type: String, - required: true + required: true, }, organization: { type: Schema.Types.ObjectId, - ref: 'Organization', - required: true + ref: "Organization", + required: true, }, user: { // user who created the service account type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, publicKey: { type: String, - required: true + required: true, }, lastUsed: { - type: Date + type: Date, }, expiresAt: { - type: Date + type: Date, }, secretHash: { type: String, required: true, - select: false - } + select: false, + }, }, { - timestamps: true + timestamps: true, } ); -const ServiceAccount = model('ServiceAccount', serviceAccountSchema); +const ServiceAccount = model("ServiceAccount", serviceAccountSchema); export default ServiceAccount; \ No newline at end of file diff --git a/backend/src/models/serviceAccountKey.ts b/backend/src/models/serviceAccountKey.ts index 637ac188b..d442dcb08 100644 --- a/backend/src/models/serviceAccountKey.ts +++ b/backend/src/models/serviceAccountKey.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IServiceAccountKey { _id: Types.ObjectId; @@ -13,32 +13,32 @@ const serviceAccountKeySchema = new Schema( { encryptedKey: { type: String, - required: true + required: true, }, nonce: { type: String, - required: true + required: true, }, sender: { type: Schema.Types.ObjectId, - required: true + required: true, }, serviceAccount: { type: Schema.Types.ObjectId, - ref: 'ServiceAccount', - required: true + ref: "ServiceAccount", + required: true, }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace', - required: true - } + ref: "Workspace", + required: true, + }, }, { - timestamps: true + timestamps: true, } ); -const ServiceAccountKey = model('ServiceAccountKey', serviceAccountKeySchema); +const ServiceAccountKey = model("ServiceAccountKey", serviceAccountKeySchema); export default ServiceAccountKey; diff --git a/backend/src/models/serviceAccountOrganizationPermission.ts b/backend/src/models/serviceAccountOrganizationPermission.ts index 6454bc6a0..4519bd832 100644 --- a/backend/src/models/serviceAccountOrganizationPermission.ts +++ b/backend/src/models/serviceAccountOrganizationPermission.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types, Document } from 'mongoose'; +import { Document, Schema, Types, model } from "mongoose"; export interface IServiceAccountOrganizationPermission extends Document { _id: Types.ObjectId; @@ -9,15 +9,15 @@ const serviceAccountOrganizationPermissionSchema = new Schema('ServiceAccountOrganizationPermission', serviceAccountOrganizationPermissionSchema); +const ServiceAccountOrganizationPermission = model("ServiceAccountOrganizationPermission", serviceAccountOrganizationPermissionSchema); export default ServiceAccountOrganizationPermission; \ No newline at end of file diff --git a/backend/src/models/serviceAccountWorkspacePermission.ts b/backend/src/models/serviceAccountWorkspacePermission.ts index 01e4c4ba6..5814923e5 100644 --- a/backend/src/models/serviceAccountWorkspacePermission.ts +++ b/backend/src/models/serviceAccountWorkspacePermission.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types, Document } from 'mongoose'; +import { Document, Schema, Types, model } from "mongoose"; export interface IServiceAccountWorkspacePermission extends Document { _id: Types.ObjectId; @@ -13,32 +13,32 @@ const serviceAccountWorkspacePermissionSchema = new Schema('ServiceAccountWorkspacePermission', serviceAccountWorkspacePermissionSchema); +const ServiceAccountWorkspacePermission = model("ServiceAccountWorkspacePermission", serviceAccountWorkspacePermissionSchema); export default ServiceAccountWorkspacePermission; \ No newline at end of file diff --git a/backend/src/models/serviceToken.ts b/backend/src/models/serviceToken.ts index 9d91b076e..ce5fa3c9b 100644 --- a/backend/src/models/serviceToken.ts +++ b/backend/src/models/serviceToken.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IServiceToken { _id: Types.ObjectId; name: string; @@ -15,47 +15,47 @@ const serviceTokenSchema = new Schema( { name: { type: String, - required: true + required: true, }, user: { // token issuer type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace', - required: true + ref: "Workspace", + required: true, }, environment: { type: String, - required: true + required: true, }, expiresAt: { - type: Date + type: Date, }, publicKey: { type: String, required: true, - select: true + select: true, }, encryptedKey: { type: String, required: true, - select: true + select: true, }, nonce: { type: String, required: true, - select: true - } + select: true, + }, }, { - timestamps: true + timestamps: true, } ); -const ServiceToken = model('ServiceToken', serviceTokenSchema); +const ServiceToken = model("ServiceToken", serviceTokenSchema); export default ServiceToken; diff --git a/backend/src/models/serviceTokenData.ts b/backend/src/models/serviceTokenData.ts index 3587a7ff4..57528a4e9 100644 --- a/backend/src/models/serviceTokenData.ts +++ b/backend/src/models/serviceTokenData.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types, Document } from "mongoose"; +import { Document, Schema, Types, model } from "mongoose"; export interface IServiceTokenData extends Document { _id: Types.ObjectId; diff --git a/backend/src/models/tag.ts b/backend/src/models/tag.ts index 6b02c8b1b..53bf085d3 100644 --- a/backend/src/models/tag.ts +++ b/backend/src/models/tag.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface ITag { _id: Types.ObjectId; @@ -22,28 +22,28 @@ const tagSchema = new Schema( lowercase: true, validate: [ function (value: any) { - return value.indexOf(' ') === -1; + return value.indexOf(" ") === -1; }, - 'slug cannot contain spaces' - ] + "slug cannot contain spaces", + ], }, user: { type: Schema.Types.ObjectId, - ref: 'User' + ref: "User", }, workspace: { type: Schema.Types.ObjectId, - ref: 'Workspace' + ref: "Workspace", }, }, { - timestamps: true + timestamps: true, } ); tagSchema.index({ slug: 1, workspace: 1 }, { unique: true }) tagSchema.index({ workspace: 1 }) -const Tag = model('Tag', tagSchema); +const Tag = model("Tag", tagSchema); export default Tag; diff --git a/backend/src/models/token.ts b/backend/src/models/token.ts index e6f485f55..ab0a69c9e 100644 --- a/backend/src/models/token.ts +++ b/backend/src/models/token.ts @@ -1,4 +1,4 @@ -import { Schema, model } from 'mongoose'; +import { Schema, model } from "mongoose"; export interface IToken { email: string; @@ -10,23 +10,23 @@ export interface IToken { const tokenSchema = new Schema({ email: { type: String, - required: true + required: true, }, token: { type: String, - required: true + required: true, }, createdAt: { type: Date, - default: Date.now + default: Date.now, }, ttl: { type: Number, - } + }, }); tokenSchema.index({ email: 1 }); -const Token = model('Token', tokenSchema); +const Token = model("Token", tokenSchema); export default Token; diff --git a/backend/src/models/tokenData.ts b/backend/src/models/tokenData.ts index 8856a3677..615c9019d 100644 --- a/backend/src/models/tokenData.ts +++ b/backend/src/models/tokenData.ts @@ -1,4 +1,4 @@ -import { Schema, Types, model } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface ITokenData { type: string; @@ -16,40 +16,40 @@ const tokenDataSchema = new Schema({ type: { type: String, enum: [ - 'emailConfirmation', - 'emailMfa', - 'organizationInvitation', - 'passwordReset' + "emailConfirmation", + "emailMfa", + "organizationInvitation", + "passwordReset", ], - required: true + required: true, }, email: { - type: String + type: String, }, phoneNumber: { - type: String + type: String, }, organization: { // organizationInvitation-specific field type: Schema.Types.ObjectId, - ref: 'Organization' + ref: "Organization", }, tokenHash: { type: String, select: false, - required: true + required: true, }, triesLeft: { - type: Number + type: Number, }, expiresAt: { type: Date, expires: 0, - required: true - } + required: true, + }, }, { - timestamps: true + timestamps: true, }); -const TokenData = model('TokenData', tokenDataSchema); +const TokenData = model("TokenData", tokenDataSchema); export default TokenData; diff --git a/backend/src/models/tokenVersion.ts b/backend/src/models/tokenVersion.ts index 890c0a272..1103fc316 100644 --- a/backend/src/models/tokenVersion.ts +++ b/backend/src/models/tokenVersion.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types, Document } from 'mongoose'; +import { Document, Schema, Types, model } from "mongoose"; export interface ITokenVersion extends Document { user: Types.ObjectId; @@ -13,35 +13,35 @@ const tokenVersionSchema = new Schema( { user: { type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, ip: { type: String, - required: true + required: true, }, userAgent: { type: String, - required: true + required: true, }, refreshVersion: { type: Number, - required: true + required: true, }, accessVersion: { type: Number, - required: true + required: true, }, lastUsed: { type: Date, - required: true - } + required: true, + }, }, { - timestamps: true + timestamps: true, } ); -const TokenVersion = model('TokenVersion', tokenVersionSchema); +const TokenVersion = model("TokenVersion", tokenVersionSchema); export default TokenVersion; \ No newline at end of file diff --git a/backend/src/models/user.ts b/backend/src/models/user.ts index 1c12720f8..b5f0027ca 100644 --- a/backend/src/models/user.ts +++ b/backend/src/models/user.ts @@ -1,7 +1,7 @@ -import { Schema, model, Types, Document } from 'mongoose'; +import { Document, Schema, Types, model } from "mongoose"; export enum AuthProvider { - GOOGLE = 'google', + GOOGLE = "google", } export interface IUser extends Document { @@ -44,73 +44,73 @@ const userSchema = new Schema( unique: true, }, firstName: { - type: String + type: String, }, lastName: { - type: String + type: String, }, encryptionVersion: { type: Number, select: false, - default: 1 // to resolve backward-compatibility issues + default: 1, // to resolve backward-compatibility issues }, protectedKey: { // introduced as part of encryption version 2 type: String, - select: false + select: false, }, protectedKeyIV: { // introduced as part of encryption version 2 type: String, - select: false + select: false, }, protectedKeyTag: { // introduced as part of encryption version 2 type: String, - select: false + select: false, }, publicKey: { type: String, - select: false + select: false, }, encryptedPrivateKey: { type: String, - select: false + select: false, }, iv: { // iv of [encryptedPrivateKey] type: String, - select: false + select: false, }, tag: { // tag of [encryptedPrivateKey] type: String, - select: false + select: false, }, salt: { type: String, - select: false + select: false, }, verifier: { type: String, - select: false + select: false, }, isMfaEnabled: { type: Boolean, - default: false + default: false, }, mfaMethods: [{ - type: String + type: String, }], devices: { type: [{ ip: String, - userAgent: String + userAgent: String, }], default: [], - select: false - } + select: false, + }, }, { - timestamps: true + timestamps: true, } ); -const User = model('User', userSchema); +const User = model("User", userSchema); export default User; diff --git a/backend/src/models/userAction.ts b/backend/src/models/userAction.ts index a2c69d46c..11eda05e8 100644 --- a/backend/src/models/userAction.ts +++ b/backend/src/models/userAction.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IUserAction { _id: Types.ObjectId; @@ -10,19 +10,19 @@ const userActionSchema = new Schema( { user: { type: Schema.Types.ObjectId, - ref: 'User', - required: true + ref: "User", + required: true, }, action: { type: String, - required: true - } + required: true, + }, }, { - timestamps: true + timestamps: true, } ); -const UserAction = model('UserAction', userActionSchema); +const UserAction = model("UserAction", userActionSchema); export default UserAction; diff --git a/backend/src/models/workspace.ts b/backend/src/models/workspace.ts index ebd55d802..b3dd28b00 100644 --- a/backend/src/models/workspace.ts +++ b/backend/src/models/workspace.ts @@ -1,4 +1,4 @@ -import { Schema, model, Types } from 'mongoose'; +import { Schema, Types, model } from "mongoose"; export interface IWorkspace { _id: Types.ObjectId; @@ -14,7 +14,7 @@ export interface IWorkspace { const workspaceSchema = new Schema({ name: { type: String, - required: true + required: true, }, autoCapitalization: { type: Boolean, @@ -22,8 +22,8 @@ const workspaceSchema = new Schema({ }, organization: { type: Schema.Types.ObjectId, - ref: 'Organization', - required: true + ref: "Organization", + required: true, }, environments: { type: [ @@ -35,20 +35,20 @@ const workspaceSchema = new Schema({ default: [ { name: "Development", - slug: "dev" + slug: "dev", }, { name: "Staging", - slug: "staging" + slug: "staging", }, { name: "Production", - slug: "prod" - } + slug: "prod", + }, ], }, }); -const Workspace = model('Workspace', workspaceSchema); +const Workspace = model("Workspace", workspaceSchema); export default Workspace; \ No newline at end of file diff --git a/backend/src/routes/status/index.ts b/backend/src/routes/status/index.ts index d3c694b92..6f3be6271 100644 --- a/backend/src/routes/status/index.ts +++ b/backend/src/routes/status/index.ts @@ -1,5 +1,5 @@ -import healthCheck from './status'; +import healthCheck from "./status"; export { - healthCheck + healthCheck, } \ No newline at end of file diff --git a/backend/src/routes/status/status.ts b/backend/src/routes/status/status.ts index 91d0c9e85..0af4bb5c2 100644 --- a/backend/src/routes/status/status.ts +++ b/backend/src/routes/status/status.ts @@ -1,15 +1,15 @@ -import express, { Request, Response } from 'express'; -import { getSmtpConfigured } from '../../config'; +import express, { Request, Response } from "express"; +import { getSmtpConfigured } from "../../config"; const router = express.Router(); router.get( - '/status', + "/status", async (req: Request, res: Response) => { res.status(200).json({ date: new Date(), - message: 'Ok', - emailConfigured: await getSmtpConfigured() + message: "Ok", + emailConfigured: await getSmtpConfigured(), }) } ); diff --git a/backend/src/routes/v1/auth.ts b/backend/src/routes/v1/auth.ts index ed86a236d..fcf9869cc 100644 --- a/backend/src/routes/v1/auth.ts +++ b/backend/src/routes/v1/auth.ts @@ -1,75 +1,75 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body } from 'express-validator'; -import passport from 'passport'; -import { requireAuth, validateRequest } from '../../middleware'; -import { authController } from '../../controllers/v1'; -import { authLimiter } from '../../helpers/rateLimiter'; -import { AUTH_MODE_JWT } from '../../variables'; +import { body } from "express-validator"; +import passport from "passport"; +import { requireAuth, validateRequest } from "../../middleware"; +import { authController } from "../../controllers/v1"; +import { authLimiter } from "../../helpers/rateLimiter"; +import { AUTH_MODE_JWT } from "../../variables"; -router.post('/token', validateRequest, authController.getNewToken); +router.post("/token", validateRequest, authController.getNewToken); router.post( // deprecated (moved to api/v2/auth/login1) - '/login1', + "/login1", authLimiter, - body('email').exists().trim().notEmpty(), - body('clientPublicKey').exists().trim().notEmpty(), + body("email").exists().trim().notEmpty(), + body("clientPublicKey").exists().trim().notEmpty(), validateRequest, authController.login1 ); router.post( // deprecated (moved to api/v2/auth/login2) - '/login2', + "/login2", authLimiter, - body('email').exists().trim().notEmpty(), - body('clientProof').exists().trim().notEmpty(), + body("email").exists().trim().notEmpty(), + body("clientProof").exists().trim().notEmpty(), validateRequest, authController.login2 ); router.post( - '/logout', + "/logout", authLimiter, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), authController.logout ); router.post( - '/checkAuth', + "/checkAuth", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), authController.checkAuth ); router.get( - '/redirect/google', + "/redirect/google", authLimiter, - passport.authenticate('google', { - scope: ['profile', 'email'], + passport.authenticate("google", { + scope: ["profile", "email"], session: false, }), ); router.get( - '/callback/google', - passport.authenticate('google', { failureRedirect: '/login/provider/error', session: false }), + "/callback/google", + passport.authenticate("google", { failureRedirect: "/login/provider/error", session: false }), authController.handleAuthProviderCallback, ); router.get( - '/common-passwords', + "/common-passwords", authLimiter, authController.getCommonPasswords ); router.delete( - '/sessions', + "/sessions", authLimiter, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), authController.revokeAllSessions ); diff --git a/backend/src/routes/v1/bot.ts b/backend/src/routes/v1/bot.ts index 83e126dc4..0eafecad0 100644 --- a/backend/src/routes/v1/bot.ts +++ b/backend/src/routes/v1/bot.ts @@ -1,39 +1,39 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body, param } from 'express-validator'; +import { body, param } from "express-validator"; import { requireAuth, requireBotAuth, requireWorkspaceAuth, - validateRequest -} from '../../middleware'; -import { botController } from '../../controllers/v1'; -import { ADMIN, MEMBER, AUTH_MODE_JWT } from '../../variables'; + validateRequest, +} from "../../middleware"; +import { botController } from "../../controllers/v1"; +import { ADMIN, AUTH_MODE_JWT, MEMBER } from "../../variables"; router.get( - '/:workspaceId', + "/:workspaceId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim().notEmpty(), + param("workspaceId").exists().trim().notEmpty(), validateRequest, botController.getBotByWorkspaceId ); router.patch( - '/:botId/active', + "/:botId/active", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireBotAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - body('isActive').exists().isBoolean(), - body('botKey'), + body("isActive").exists().isBoolean(), + body("botKey"), validateRequest, botController.setBotActiveState ); diff --git a/backend/src/routes/v1/index.ts b/backend/src/routes/v1/index.ts index 62ff08b14..7efc36a95 100644 --- a/backend/src/routes/v1/index.ts +++ b/backend/src/routes/v1/index.ts @@ -1,21 +1,21 @@ -import signup from './signup'; -import bot from './bot'; -import auth from './auth'; -import user from './user'; -import userAction from './userAction'; -import organization from './organization'; -import workspace from './workspace'; -import membershipOrg from './membershipOrg'; -import membership from './membership'; -import key from './key'; -import inviteOrg from './inviteOrg'; -import secret from './secret'; -import serviceToken from './serviceToken'; -import password from './password'; -import stripe from './stripe'; -import integration from './integration'; -import integrationAuth from './integrationAuth'; -import secretsFolder from './secretsFolder'; +import signup from "./signup"; +import bot from "./bot"; +import auth from "./auth"; +import user from "./user"; +import userAction from "./userAction"; +import organization from "./organization"; +import workspace from "./workspace"; +import membershipOrg from "./membershipOrg"; +import membership from "./membership"; +import key from "./key"; +import inviteOrg from "./inviteOrg"; +import secret from "./secret"; +import serviceToken from "./serviceToken"; +import password from "./password"; +import stripe from "./stripe"; +import integration from "./integration"; +import integrationAuth from "./integrationAuth"; +import secretsFolder from "./secretsFolder"; export { signup, @@ -35,5 +35,5 @@ export { stripe, integration, integrationAuth, - secretsFolder + secretsFolder, }; diff --git a/backend/src/routes/v1/integration.ts b/backend/src/routes/v1/integration.ts index c4ba329c0..1820f4bb8 100644 --- a/backend/src/routes/v1/integration.ts +++ b/backend/src/routes/v1/integration.ts @@ -8,9 +8,9 @@ import { } from "../../middleware"; import { ADMIN, - MEMBER, - AUTH_MODE_JWT, AUTH_MODE_API_KEY, + AUTH_MODE_JWT, + MEMBER, } from "../../variables"; import { body, param } from "express-validator"; import { integrationController } from "../../controllers/v1"; diff --git a/backend/src/routes/v1/integrationAuth.ts b/backend/src/routes/v1/integrationAuth.ts index f8fe15a4b..28fa65af8 100644 --- a/backend/src/routes/v1/integrationAuth.ts +++ b/backend/src/routes/v1/integrationAuth.ts @@ -1,156 +1,156 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body, param, query } from 'express-validator'; +import { body, param, query } from "express-validator"; import { requireAuth, - requireWorkspaceAuth, requireIntegrationAuthorizationAuth, - validateRequest -} from '../../middleware'; + requireWorkspaceAuth, + validateRequest, +} from "../../middleware"; import { ADMIN, - MEMBER, + AUTH_MODE_API_KEY, AUTH_MODE_JWT, - AUTH_MODE_API_KEY -} from '../../variables'; -import { integrationAuthController } from '../../controllers/v1'; + MEMBER, +} from "../../variables"; +import { integrationAuthController } from "../../controllers/v1"; router.get( - '/integration-options', + "/integration-options", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), integrationAuthController.getIntegrationOptions ); router.get( - '/:integrationAuthId', + "/:integrationAuthId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireIntegrationAuthorizationAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - param('integrationAuthId'), + param("integrationAuthId"), validateRequest, integrationAuthController.getIntegrationAuth ); router.post( - '/oauth-token', + "/oauth-token", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'body' + locationWorkspaceId: "body", }), - body('workspaceId').exists().trim().notEmpty(), - body('code').exists().trim().notEmpty(), - body('integration').exists().trim().notEmpty(), + body("workspaceId").exists().trim().notEmpty(), + body("code").exists().trim().notEmpty(), + body("integration").exists().trim().notEmpty(), validateRequest, integrationAuthController.oAuthExchange ); router.post( - '/access-token', - body('workspaceId').exists().trim().notEmpty(), - body('accessId').trim(), - body('accessToken').exists().trim().notEmpty(), - body('url').trim(), - body('namespace').trim(), - body('integration').exists().trim().notEmpty(), + "/access-token", + body("workspaceId").exists().trim().notEmpty(), + body("accessId").trim(), + body("accessToken").exists().trim().notEmpty(), + body("url").trim(), + body("namespace").trim(), + body("integration").exists().trim().notEmpty(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'body' + locationWorkspaceId: "body", }), integrationAuthController.saveIntegrationAccessToken ); router.get( - '/:integrationAuthId/apps', + "/:integrationAuthId/apps", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireIntegrationAuthorizationAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - param('integrationAuthId'), - query('teamId'), + param("integrationAuthId"), + query("teamId"), validateRequest, integrationAuthController.getIntegrationAuthApps ); router.get( - '/:integrationAuthId/teams', + "/:integrationAuthId/teams", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireIntegrationAuthorizationAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - param('integrationAuthId'), + param("integrationAuthId"), validateRequest, integrationAuthController.getIntegrationAuthTeams ); router.get( - '/:integrationAuthId/vercel/branches', + "/:integrationAuthId/vercel/branches", requireAuth({ - acceptedAuthModes: ['jwt'] + acceptedAuthModes: ["jwt"], }), requireIntegrationAuthorizationAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - param('integrationAuthId').exists().isString(), - query('appId').exists().isString(), - query('teamId').optional().isString(), + param("integrationAuthId").exists().isString(), + query("appId").exists().isString(), + query("teamId").optional().isString(), validateRequest, integrationAuthController.getIntegrationAuthVercelBranches ); router.get( - '/:integrationAuthId/railway/environments', + "/:integrationAuthId/railway/environments", requireAuth({ - acceptedAuthModes: ['jwt'] + acceptedAuthModes: ["jwt"], }), requireIntegrationAuthorizationAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - param('integrationAuthId').exists().isString(), - query('appId').exists().isString(), + param("integrationAuthId").exists().isString(), + query("appId").exists().isString(), validateRequest, integrationAuthController.getIntegrationAuthRailwayEnvironments ); router.get( - '/:integrationAuthId/railway/services', + "/:integrationAuthId/railway/services", requireAuth({ - acceptedAuthModes: ['jwt'] + acceptedAuthModes: ["jwt"], }), requireIntegrationAuthorizationAuth({ - acceptedRoles: [ADMIN, MEMBER] + acceptedRoles: [ADMIN, MEMBER], }), - param('integrationAuthId').exists().isString(), - query('appId').exists().isString(), + param("integrationAuthId").exists().isString(), + query("appId").exists().isString(), validateRequest, integrationAuthController.getIntegrationAuthRailwayServices ); router.delete( - '/:integrationAuthId', + "/:integrationAuthId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireIntegrationAuthorizationAuth({ acceptedRoles: [ADMIN, MEMBER], - attachAccessToken: false + attachAccessToken: false, }), - param('integrationAuthId'), + param("integrationAuthId"), validateRequest, integrationAuthController.deleteIntegrationAuth ); diff --git a/backend/src/routes/v1/inviteOrg.ts b/backend/src/routes/v1/inviteOrg.ts index 9b4889bc9..edcb34c87 100644 --- a/backend/src/routes/v1/inviteOrg.ts +++ b/backend/src/routes/v1/inviteOrg.ts @@ -1,26 +1,26 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body } from 'express-validator'; -import { requireAuth, validateRequest } from '../../middleware'; -import { membershipOrgController } from '../../controllers/v1'; -import { AUTH_MODE_JWT } from '../../variables'; +import { body } from "express-validator"; +import { requireAuth, validateRequest } from "../../middleware"; +import { membershipOrgController } from "../../controllers/v1"; +import { AUTH_MODE_JWT } from "../../variables"; router.post( - '/signup', + "/signup", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('inviteeEmail').exists().trim().notEmpty().isEmail(), - body('organizationId').exists().trim().notEmpty(), + body("inviteeEmail").exists().trim().notEmpty().isEmail(), + body("organizationId").exists().trim().notEmpty(), validateRequest, membershipOrgController.inviteUserToOrganization ); router.post( - '/verify', - body('email').exists().trim().notEmpty(), - body('organizationId').exists().trim().notEmpty(), - body('code').exists().trim().notEmpty(), + "/verify", + body("email").exists().trim().notEmpty(), + body("organizationId").exists().trim().notEmpty(), + body("code").exists().trim().notEmpty(), validateRequest, membershipOrgController.verifyUserToOrganization ); diff --git a/backend/src/routes/v1/key.ts b/backend/src/routes/v1/key.ts index be99c9c17..fbd6e3eca 100644 --- a/backend/src/routes/v1/key.ts +++ b/backend/src/routes/v1/key.ts @@ -1,39 +1,39 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, requireWorkspaceAuth, - validateRequest -} from '../../middleware'; -import { body, param } from 'express-validator'; -import { ADMIN, MEMBER, AUTH_MODE_JWT } from '../../variables'; -import { keyController } from '../../controllers/v1'; + validateRequest, +} from "../../middleware"; +import { body, param } from "express-validator"; +import { ADMIN, AUTH_MODE_JWT, MEMBER } from "../../variables"; +import { keyController } from "../../controllers/v1"; router.post( - '/:workspaceId', + "/:workspaceId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('key').exists(), + param("workspaceId").exists().trim(), + body("key").exists(), validateRequest, keyController.uploadKey ); router.get( - '/:workspaceId/latest', + "/:workspaceId/latest", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId'), + param("workspaceId"), validateRequest, keyController.getLatestKey ); diff --git a/backend/src/routes/v1/membership.ts b/backend/src/routes/v1/membership.ts index e830bd06d..428213768 100644 --- a/backend/src/routes/v1/membership.ts +++ b/backend/src/routes/v1/membership.ts @@ -1,50 +1,50 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body, param } from 'express-validator'; -import { requireAuth, validateRequest } from '../../middleware'; -import { membershipController } from '../../controllers/v1'; -import { membershipController as EEMembershipControllers } from '../../ee/controllers/v1'; -import { AUTH_MODE_JWT } from '../../variables'; +import { body, param } from "express-validator"; +import { requireAuth, validateRequest } from "../../middleware"; +import { membershipController } from "../../controllers/v1"; +import { membershipController as EEMembershipControllers } from "../../ee/controllers/v1"; +import { AUTH_MODE_JWT } from "../../variables"; // note: ALL DEPRECIATED (moved to api/v2/workspace/:workspaceId/memberships/:membershipId) router.get( // used for old CLI (deprecate) - '/:workspaceId/connect', + "/:workspaceId/connect", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, membershipController.validateMembership ); router.delete( - '/:membershipId', + "/:membershipId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - param('membershipId').exists().trim(), + param("membershipId").exists().trim(), validateRequest, membershipController.deleteMembership ); router.post( - '/:membershipId/change-role', + "/:membershipId/change-role", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('role').exists().trim(), + body("role").exists().trim(), validateRequest, membershipController.changeMembershipRole ); router.post( - '/:membershipId/deny-permissions', + "/:membershipId/deny-permissions", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - param('membershipId').isMongoId().exists().trim(), - body('permissions').isArray().exists(), + param("membershipId").isMongoId().exists().trim(), + body("permissions").isArray().exists(), validateRequest, EEMembershipControllers.denyMembershipPermissions ); diff --git a/backend/src/routes/v1/membershipOrg.ts b/backend/src/routes/v1/membershipOrg.ts index 2863c53fb..6b3c7d2e8 100644 --- a/backend/src/routes/v1/membershipOrg.ts +++ b/backend/src/routes/v1/membershipOrg.ts @@ -1,27 +1,27 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { param } from 'express-validator'; -import { requireAuth, validateRequest } from '../../middleware'; -import { membershipOrgController } from '../../controllers/v1'; -import { AUTH_MODE_JWT } from '../../variables'; +import { param } from "express-validator"; +import { requireAuth, validateRequest } from "../../middleware"; +import { membershipOrgController } from "../../controllers/v1"; +import { AUTH_MODE_JWT } from "../../variables"; router.post( // TODO - '/membershipOrg/:membershipOrgId/change-role', + "/membershipOrg/:membershipOrgId/change-role", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - param('membershipOrgId'), + param("membershipOrgId"), validateRequest, membershipOrgController.changeMembershipOrgRole ); router.delete( - '/:membershipOrgId', + "/:membershipOrgId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - param('membershipOrgId').exists().trim(), + param("membershipOrgId").exists().trim(), validateRequest, membershipOrgController.deleteMembershipOrg ); diff --git a/backend/src/routes/v1/organization.ts b/backend/src/routes/v1/organization.ts index dded53f3a..7cfd0e3fa 100644 --- a/backend/src/routes/v1/organization.ts +++ b/backend/src/routes/v1/organization.ts @@ -1,177 +1,177 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body, param } from 'express-validator'; +import { body, param } from "express-validator"; import { requireAuth, requireOrganizationAuth, - validateRequest -} from '../../middleware'; + validateRequest, +} from "../../middleware"; import { - OWNER, + ACCEPTED, ADMIN, - MEMBER, - ACCEPTED, - AUTH_MODE_JWT -} from '../../variables'; -import { organizationController } from '../../controllers/v1'; + AUTH_MODE_JWT, + MEMBER, + OWNER, +} from "../../variables"; +import { organizationController } from "../../controllers/v1"; router.get( // deprecated (moved to api/v2/users/me/organizations) - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), organizationController.getOrganizations ); router.post( // not used on frontend - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('organizationName').exists().trim().notEmpty(), + body("organizationName").exists().trim().notEmpty(), validateRequest, organizationController.createOrganization ); router.get( - '/:organizationId', + "/:organizationId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationController.getOrganization ); router.get( // deprecated (moved to api/v2/organizations/:organizationId/memberships) - '/:organizationId/users', + "/:organizationId/users", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationController.getOrganizationMembers ); router.get( - '/:organizationId/my-workspaces', // deprecated (moved to api/v2/organizations/:organizationId/workspaces) + "/:organizationId/my-workspaces", // deprecated (moved to api/v2/organizations/:organizationId/workspaces) requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationController.getOrganizationWorkspaces ); router.patch( - '/:organizationId/name', + "/:organizationId/name", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), - body('name').exists().trim().notEmpty(), + param("organizationId").exists().trim(), + body("name").exists().trim().notEmpty(), validateRequest, organizationController.changeOrganizationName ); router.get( - '/:organizationId/incidentContactOrg', + "/:organizationId/incidentContactOrg", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationController.getOrganizationIncidentContacts ); router.post( - '/:organizationId/incidentContactOrg', + "/:organizationId/incidentContactOrg", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), - body('email').exists().trim().notEmpty(), + param("organizationId").exists().trim(), + body("email").exists().trim().notEmpty(), validateRequest, organizationController.addOrganizationIncidentContact ); router.delete( - '/:organizationId/incidentContactOrg', + "/:organizationId/incidentContactOrg", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), - body('email').exists().trim().notEmpty(), + param("organizationId").exists().trim(), + body("email").exists().trim().notEmpty(), validateRequest, organizationController.deleteOrganizationIncidentContact ); router.post( - '/:organizationId/customer-portal-session', + "/:organizationId/customer-portal-session", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationController.createOrganizationPortalSession ); router.get( - '/:organizationId/subscriptions', + "/:organizationId/subscriptions", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationController.getOrganizationSubscriptions ); router.get( - '/:organizationId/workspace-memberships', + "/:organizationId/workspace-memberships", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), - param('organizationId').exists().trim(), + param("organizationId").exists().trim(), validateRequest, organizationController.getOrganizationMembersAndTheirWorkspaces ); diff --git a/backend/src/routes/v1/password.ts b/backend/src/routes/v1/password.ts index b04fa36af..7268b1a3c 100644 --- a/backend/src/routes/v1/password.ts +++ b/backend/src/routes/v1/password.ts @@ -1,93 +1,93 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body } from 'express-validator'; -import { requireAuth, requireSignupAuth, validateRequest } from '../../middleware'; -import { passwordController } from '../../controllers/v1'; -import { passwordLimiter } from '../../helpers/rateLimiter'; +import { body } from "express-validator"; +import { requireAuth, requireSignupAuth, validateRequest } from "../../middleware"; +import { passwordController } from "../../controllers/v1"; +import { passwordLimiter } from "../../helpers/rateLimiter"; import { - AUTH_MODE_JWT -} from '../../variables'; + AUTH_MODE_JWT, +} from "../../variables"; router.post( - '/srp1', + "/srp1", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('clientPublicKey').exists().isString().trim().notEmpty(), + body("clientPublicKey").exists().isString().trim().notEmpty(), validateRequest, passwordController.srp1 ); router.post( - '/change-password', + "/change-password", passwordLimiter, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('clientProof').exists().trim().notEmpty(), - body('protectedKey').exists().isString().trim().notEmpty(), - body('protectedKeyIV').exists().isString().trim().notEmpty(), - body('protectedKeyTag').exists().isString().trim().notEmpty(), - body('encryptedPrivateKey').exists().isString().trim().notEmpty(), // private key encrypted under new pwd - body('encryptedPrivateKeyIV').exists().isString().trim().notEmpty(), // new iv for private key - body('encryptedPrivateKeyTag').exists().isString().trim().notEmpty(), // new tag for private key - body('salt').exists().isString().trim().notEmpty(), // part of new pwd - body('verifier').exists().isString().trim().notEmpty(), // part of new pwd + body("clientProof").exists().trim().notEmpty(), + body("protectedKey").exists().isString().trim().notEmpty(), + body("protectedKeyIV").exists().isString().trim().notEmpty(), + body("protectedKeyTag").exists().isString().trim().notEmpty(), + body("encryptedPrivateKey").exists().isString().trim().notEmpty(), // private key encrypted under new pwd + body("encryptedPrivateKeyIV").exists().isString().trim().notEmpty(), // new iv for private key + body("encryptedPrivateKeyTag").exists().isString().trim().notEmpty(), // new tag for private key + body("salt").exists().isString().trim().notEmpty(), // part of new pwd + body("verifier").exists().isString().trim().notEmpty(), // part of new pwd validateRequest, passwordController.changePassword ); router.post( - '/email/password-reset', + "/email/password-reset", passwordLimiter, - body('email').exists().isString().trim().notEmpty().isEmail(), + body("email").exists().isString().trim().notEmpty().isEmail(), validateRequest, passwordController.emailPasswordReset ); router.post( - '/email/password-reset-verify', + "/email/password-reset-verify", passwordLimiter, - body('email').exists().isString().trim().notEmpty().isEmail(), - body('code').exists().isString().trim().notEmpty(), + body("email").exists().isString().trim().notEmpty().isEmail(), + body("code").exists().isString().trim().notEmpty(), validateRequest, passwordController.emailPasswordResetVerify ); router.get( - '/backup-private-key', + "/backup-private-key", passwordLimiter, requireSignupAuth, passwordController.getBackupPrivateKey ); router.post( - '/backup-private-key', + "/backup-private-key", passwordLimiter, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('clientProof').exists().isString().trim().notEmpty(), - body('encryptedPrivateKey').exists().isString().trim().notEmpty(), // (backup) private key encrypted under a strong key - body('iv').exists().isString().trim().notEmpty(), // new iv for (backup) private key - body('tag').exists().isString().trim().notEmpty(), // new tag for (backup) private key - body('salt').exists().isString().trim().notEmpty(), // salt generated from strong key - body('verifier').exists().isString().trim().notEmpty(), // salt generated from strong key + body("clientProof").exists().isString().trim().notEmpty(), + body("encryptedPrivateKey").exists().isString().trim().notEmpty(), // (backup) private key encrypted under a strong key + body("iv").exists().isString().trim().notEmpty(), // new iv for (backup) private key + body("tag").exists().isString().trim().notEmpty(), // new tag for (backup) private key + body("salt").exists().isString().trim().notEmpty(), // salt generated from strong key + body("verifier").exists().isString().trim().notEmpty(), // salt generated from strong key validateRequest, passwordController.createBackupPrivateKey ); router.post( - '/password-reset', + "/password-reset", requireSignupAuth, - body('protectedKey').exists().isString().trim().notEmpty(), - body('protectedKeyIV').exists().isString().trim().notEmpty(), - body('protectedKeyTag').exists().isString().trim().notEmpty(), - body('encryptedPrivateKey').exists().isString().trim().notEmpty(), // private key encrypted under new pwd - body('encryptedPrivateKeyIV').exists().isString().trim().notEmpty(), // new iv for private key - body('encryptedPrivateKeyTag').exists().isString().trim().notEmpty(), // new tag for private key - body('salt').exists().isString().trim().notEmpty(), // part of new pwd - body('verifier').exists().isString().trim().notEmpty(), // part of new pwd + body("protectedKey").exists().isString().trim().notEmpty(), + body("protectedKeyIV").exists().isString().trim().notEmpty(), + body("protectedKeyTag").exists().isString().trim().notEmpty(), + body("encryptedPrivateKey").exists().isString().trim().notEmpty(), // private key encrypted under new pwd + body("encryptedPrivateKeyIV").exists().isString().trim().notEmpty(), // new iv for private key + body("encryptedPrivateKeyTag").exists().isString().trim().notEmpty(), // new tag for private key + body("salt").exists().isString().trim().notEmpty(), // part of new pwd + body("verifier").exists().isString().trim().notEmpty(), // part of new pwd validateRequest, passwordController.resetPassword ); diff --git a/backend/src/routes/v1/secret.ts b/backend/src/routes/v1/secret.ts index e55dfaf43..89ed3c975 100644 --- a/backend/src/routes/v1/secret.ts +++ b/backend/src/routes/v1/secret.ts @@ -1,61 +1,61 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, - requireWorkspaceAuth, requireServiceTokenAuth, - validateRequest -} from '../../middleware'; -import { body, query, param } from 'express-validator'; -import { secretController } from '../../controllers/v1'; + requireWorkspaceAuth, + validateRequest, +} from "../../middleware"; +import { body, param, query } from "express-validator"; +import { secretController } from "../../controllers/v1"; import { ADMIN, + AUTH_MODE_JWT, MEMBER, - AUTH_MODE_JWT -} from '../../variables'; +} from "../../variables"; // note to devs: these endpoints will be deprecated in favor of v2 router.post( - '/:workspaceId', + "/:workspaceId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - body('secrets').exists(), - body('keys').exists(), - body('environment').exists().trim().notEmpty(), - body('channel'), - param('workspaceId').exists().trim(), + body("secrets").exists(), + body("keys").exists(), + body("environment").exists().trim().notEmpty(), + body("channel"), + param("workspaceId").exists().trim(), validateRequest, secretController.pushSecrets ); router.get( - '/:workspaceId', + "/:workspaceId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - query('environment').exists().trim(), - query('channel'), - param('workspaceId').exists().trim(), + query("environment").exists().trim(), + query("channel"), + param("workspaceId").exists().trim(), validateRequest, secretController.pullSecrets ); router.get( - '/:workspaceId/service-token', + "/:workspaceId/service-token", requireServiceTokenAuth, - query('environment').exists().trim(), - query('channel'), - param('workspaceId').exists().trim(), + query("environment").exists().trim(), + query("channel"), + param("workspaceId").exists().trim(), validateRequest, secretController.pullSecretsServiceToken ); diff --git a/backend/src/routes/v1/serviceToken.ts b/backend/src/routes/v1/serviceToken.ts index 2b75e7cbf..b3f3abb70 100644 --- a/backend/src/routes/v1/serviceToken.ts +++ b/backend/src/routes/v1/serviceToken.ts @@ -1,43 +1,43 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, - requireWorkspaceAuth, requireServiceTokenAuth, - validateRequest -} from '../../middleware'; -import { body } from 'express-validator'; + requireWorkspaceAuth, + validateRequest, +} from "../../middleware"; +import { body } from "express-validator"; import { ADMIN, + AUTH_MODE_JWT, MEMBER, - AUTH_MODE_JWT -} from '../../variables'; -import { serviceTokenController } from '../../controllers/v1'; +} from "../../variables"; +import { serviceTokenController } from "../../controllers/v1"; // note: deprecate service-token routes in favor of service-token data routes/structure router.get( - '/', + "/", requireServiceTokenAuth, serviceTokenController.getServiceToken ); router.post( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'body' + locationWorkspaceId: "body", }), - body('name').exists().trim().notEmpty(), - body('workspaceId').exists().trim().notEmpty(), - body('environment').exists().trim().notEmpty(), - body('expiresIn'), // measured in ms - body('publicKey').exists().trim().notEmpty(), - body('encryptedKey').exists().trim().notEmpty(), - body('nonce').exists().trim().notEmpty(), + body("name").exists().trim().notEmpty(), + body("workspaceId").exists().trim().notEmpty(), + body("environment").exists().trim().notEmpty(), + body("expiresIn"), // measured in ms + body("publicKey").exists().trim().notEmpty(), + body("encryptedKey").exists().trim().notEmpty(), + body("nonce").exists().trim().notEmpty(), validateRequest, serviceTokenController.createServiceToken ); diff --git a/backend/src/routes/v1/signup.ts b/backend/src/routes/v1/signup.ts index 35a043c8e..1b82edd3a 100644 --- a/backend/src/routes/v1/signup.ts +++ b/backend/src/routes/v1/signup.ts @@ -1,23 +1,23 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body } from 'express-validator'; -import { validateRequest } from '../../middleware'; -import { signupController } from '../../controllers/v1'; -import { authLimiter } from '../../helpers/rateLimiter'; +import { body } from "express-validator"; +import { validateRequest } from "../../middleware"; +import { signupController } from "../../controllers/v1"; +import { authLimiter } from "../../helpers/rateLimiter"; router.post( - '/email/signup', + "/email/signup", authLimiter, - body('email').exists().trim().notEmpty().isEmail(), + body("email").exists().trim().notEmpty().isEmail(), validateRequest, signupController.beginEmailSignup ); router.post( - '/email/verify', + "/email/verify", authLimiter, - body('email').exists().trim().notEmpty().isEmail(), - body('code').exists().trim().notEmpty(), + body("email").exists().trim().notEmpty().isEmail(), + body("code").exists().trim().notEmpty(), validateRequest, signupController.verifyEmailSignup ); diff --git a/backend/src/routes/v1/stripe.ts b/backend/src/routes/v1/stripe.ts index cfcca77cb..d4ba1255d 100644 --- a/backend/src/routes/v1/stripe.ts +++ b/backend/src/routes/v1/stripe.ts @@ -1,7 +1,7 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { stripeController } from '../../controllers/v1'; +import { stripeController } from "../../controllers/v1"; -router.post('/webhook', stripeController.handleWebhook); +router.post("/webhook", stripeController.handleWebhook); export default router; diff --git a/backend/src/routes/v1/user.ts b/backend/src/routes/v1/user.ts index b9d88dfb1..d499a2377 100644 --- a/backend/src/routes/v1/user.ts +++ b/backend/src/routes/v1/user.ts @@ -1,15 +1,15 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { requireAuth } from '../../middleware'; -import { userController } from '../../controllers/v1'; +import { requireAuth } from "../../middleware"; +import { userController } from "../../controllers/v1"; import { - AUTH_MODE_JWT -} from '../../variables'; + AUTH_MODE_JWT, +} from "../../variables"; router.get( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), userController.getUser ); diff --git a/backend/src/routes/v1/userAction.ts b/backend/src/routes/v1/userAction.ts index c8d21f918..29cc811bd 100644 --- a/backend/src/routes/v1/userAction.ts +++ b/backend/src/routes/v1/userAction.ts @@ -1,27 +1,27 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { requireAuth, validateRequest } from '../../middleware'; -import { body, query } from 'express-validator'; -import { userActionController } from '../../controllers/v1'; -import { AUTH_MODE_JWT } from '../../variables'; +import { requireAuth, validateRequest } from "../../middleware"; +import { body, query } from "express-validator"; +import { userActionController } from "../../controllers/v1"; +import { AUTH_MODE_JWT } from "../../variables"; // note: [userAction] will be deprecated in /v2 in favor of [action] router.post( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('action'), + body("action"), validateRequest, userActionController.addUserAction ); router.get( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - query('action'), + query("action"), validateRequest, userActionController.getUserAction ); diff --git a/backend/src/routes/v1/workspace.ts b/backend/src/routes/v1/workspace.ts index 431a2e4f9..8b696d4ac 100644 --- a/backend/src/routes/v1/workspace.ts +++ b/backend/src/routes/v1/workspace.ts @@ -1,161 +1,161 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body, param, query } from 'express-validator'; +import { body, param } from "express-validator"; import { requireAuth, requireWorkspaceAuth, - validateRequest -} from '../../middleware'; + validateRequest, +} from "../../middleware"; import { ADMIN, + AUTH_MODE_JWT, MEMBER, - AUTH_MODE_JWT -} from '../../variables'; -import { workspaceController, membershipController } from '../../controllers/v1'; +} from "../../variables"; +import { membershipController, workspaceController } from "../../controllers/v1"; router.get( - '/:workspaceId/keys', + "/:workspaceId/keys", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspacePublicKeys ); router.get( - '/:workspaceId/users', + "/:workspaceId/users", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspaceMemberships ); router.get( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), workspaceController.getWorkspaces ); router.get( - '/:workspaceId', + "/:workspaceId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspace ); router.post( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('workspaceName').exists().trim().notEmpty(), - body('organizationId').exists().trim().notEmpty(), + body("workspaceName").exists().trim().notEmpty(), + body("organizationId").exists().trim().notEmpty(), validateRequest, workspaceController.createWorkspace ); router.delete( - '/:workspaceId', + "/:workspaceId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.deleteWorkspace ); router.post( - '/:workspaceId/name', + "/:workspaceId/name", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('name').exists().trim().notEmpty(), + param("workspaceId").exists().trim(), + body("name").exists().trim().notEmpty(), validateRequest, workspaceController.changeWorkspaceName ); router.post( - '/:workspaceId/invite-signup', + "/:workspaceId/invite-signup", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('email').exists().trim().notEmpty(), + param("workspaceId").exists().trim(), + body("email").exists().trim().notEmpty(), validateRequest, membershipController.inviteUserToWorkspace ); router.get( - '/:workspaceId/integrations', + "/:workspaceId/integrations", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspaceIntegrations ); router.get( - '/:workspaceId/authorizations', + "/:workspaceId/authorizations", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspaceIntegrationAuthorizations ); router.get( - '/:workspaceId/service-tokens', // deprecate + "/:workspaceId/service-tokens", // deprecate requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspaceServiceTokens ); diff --git a/backend/src/routes/v2/apiKeyData.ts b/backend/src/routes/v2/apiKeyData.ts index 939bdbe1f..eae8d7ddd 100644 --- a/backend/src/routes/v2/apiKeyData.ts +++ b/backend/src/routes/v2/apiKeyData.ts @@ -1,40 +1,40 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { param, body } from 'express-validator'; +import { body, param } from "express-validator"; import { requireAuth, - validateRequest -} from '../../middleware'; -import { apiKeyDataController } from '../../controllers/v2'; + validateRequest, +} from "../../middleware"; +import { apiKeyDataController } from "../../controllers/v2"; import { - AUTH_MODE_JWT -} from '../../variables'; + AUTH_MODE_JWT, +} from "../../variables"; router.get( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), apiKeyDataController.getAPIKeyData ); router.post( - '/', + "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('name').exists().trim(), - body('expiresIn'), // measured in ms + body("name").exists().trim(), + body("expiresIn"), // measured in ms validateRequest, apiKeyDataController.createAPIKeyData ); router.delete( - '/:apiKeyDataId', + "/:apiKeyDataId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - param('apiKeyDataId').exists().trim(), + param("apiKeyDataId").exists().trim(), validateRequest, apiKeyDataController.deleteAPIKeyData ); diff --git a/backend/src/routes/v2/auth.ts b/backend/src/routes/v2/auth.ts index 288004e65..444819f27 100644 --- a/backend/src/routes/v2/auth.ts +++ b/backend/src/routes/v2/auth.ts @@ -1,42 +1,42 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body } from 'express-validator'; -import { requireMfaAuth, validateRequest } from '../../middleware'; -import { authController } from '../../controllers/v2'; -import { authLimiter } from '../../helpers/rateLimiter'; +import { body } from "express-validator"; +import { requireMfaAuth, validateRequest } from "../../middleware"; +import { authController } from "../../controllers/v2"; +import { authLimiter } from "../../helpers/rateLimiter"; router.post( - '/login1', + "/login1", authLimiter, - body('email').isString().trim().notEmpty(), - body('clientPublicKey').isString().trim().notEmpty(), + body("email").isString().trim().notEmpty(), + body("clientPublicKey").isString().trim().notEmpty(), validateRequest, authController.login1 ); router.post( - '/login2', + "/login2", authLimiter, - body('email').isString().trim().notEmpty(), - body('clientProof').isString().trim().notEmpty(), + body("email").isString().trim().notEmpty(), + body("clientProof").isString().trim().notEmpty(), validateRequest, authController.login2 ); router.post( - '/mfa/send', + "/mfa/send", authLimiter, - body('email').isString().trim().notEmpty().isEmail(), + body("email").isString().trim().notEmpty().isEmail(), validateRequest, authController.sendMfaToken ); router.post( - '/mfa/verify', + "/mfa/verify", authLimiter, requireMfaAuth, - body('email').isString().trim().notEmpty(), - body('mfaToken').isString().trim().notEmpty(), + body("email").isString().trim().notEmpty(), + body("mfaToken").isString().trim().notEmpty(), validateRequest, authController.verifyMfaToken ); diff --git a/backend/src/routes/v2/environment.ts b/backend/src/routes/v2/environment.ts index 0eb4b4a20..f9943f33d 100644 --- a/backend/src/routes/v2/environment.ts +++ b/backend/src/routes/v2/environment.ts @@ -1,76 +1,76 @@ -import express, { Response, Request } from 'express'; +import express from "express"; const router = express.Router(); -import { body, param } from 'express-validator'; -import { environmentController } from '../../controllers/v2'; +import { body, param } from "express-validator"; +import { environmentController } from "../../controllers/v2"; import { requireAuth, requireWorkspaceAuth, validateRequest, -} from '../../middleware'; +} from "../../middleware"; import { ADMIN, + AUTH_MODE_JWT, MEMBER, - AUTH_MODE_JWT -} from '../../variables'; +} from "../../variables"; router.post( - '/:workspaceId/environments', + "/:workspaceId/environments", requireAuth({ acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('environmentSlug').exists().trim(), - body('environmentName').exists().trim(), + param("workspaceId").exists().trim(), + body("environmentSlug").exists().trim(), + body("environmentName").exists().trim(), validateRequest, environmentController.createWorkspaceEnvironment ); router.put( - '/:workspaceId/environments', + "/:workspaceId/environments", requireAuth({ acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('environmentSlug').exists().trim(), - body('environmentName').exists().trim(), - body('oldEnvironmentSlug').exists().trim(), + param("workspaceId").exists().trim(), + body("environmentSlug").exists().trim(), + body("environmentName").exists().trim(), + body("oldEnvironmentSlug").exists().trim(), validateRequest, environmentController.renameWorkspaceEnvironment ); router.delete( - '/:workspaceId/environments', + "/:workspaceId/environments", requireAuth({ acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('environmentSlug').exists().trim(), + param("workspaceId").exists().trim(), + body("environmentSlug").exists().trim(), validateRequest, environmentController.deleteWorkspaceEnvironment ); router.get( - '/:workspaceId/environments', + "/:workspaceId/environments", requireAuth({ acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [MEMBER, ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, environmentController.getAllAccessibleEnvironmentsOfWorkspace ); diff --git a/backend/src/routes/v2/index.ts b/backend/src/routes/v2/index.ts index c088771eb..fc7353729 100644 --- a/backend/src/routes/v2/index.ts +++ b/backend/src/routes/v2/index.ts @@ -1,13 +1,13 @@ -import auth from './auth'; -import signup from './signup'; -import users from './users'; -import organizations from './organizations'; -import workspace from './workspace'; -import secret from './secret'; // deprecated -import secrets from './secrets'; -import serviceTokenData from './serviceTokenData'; -import serviceAccounts from './serviceAccounts'; -import apiKeyData from './apiKeyData'; +import auth from "./auth"; +import signup from "./signup"; +import users from "./users"; +import organizations from "./organizations"; +import workspace from "./workspace"; +import secret from "./secret"; // deprecated +import secrets from "./secrets"; +import serviceTokenData from "./serviceTokenData"; +import serviceAccounts from "./serviceAccounts"; +import apiKeyData from "./apiKeyData"; import environment from "./environment" import tags from "./tags" @@ -23,5 +23,5 @@ export { serviceAccounts, apiKeyData, environment, - tags + tags, } \ No newline at end of file diff --git a/backend/src/routes/v2/organizations.ts b/backend/src/routes/v2/organizations.ts index eb2cef8eb..46223cf93 100644 --- a/backend/src/routes/v2/organizations.ts +++ b/backend/src/routes/v2/organizations.ts @@ -1,101 +1,101 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, - requireOrganizationAuth, requireMembershipOrgAuth, - validateRequest -} from '../../middleware'; -import { body, param } from 'express-validator'; + requireOrganizationAuth, + validateRequest, +} from "../../middleware"; +import { body, param } from "express-validator"; import { - OWNER, + ACCEPTED, ADMIN, - MEMBER, - ACCEPTED, + AUTH_MODE_API_KEY, AUTH_MODE_JWT, - AUTH_MODE_API_KEY -} from '../../variables'; -import { organizationsController } from '../../controllers/v2'; + MEMBER, + OWNER, +} from "../../variables"; +import { organizationsController } from "../../controllers/v2"; // TODO: /POST to create membership router.get( - '/:organizationId/memberships', - param('organizationId').exists().trim(), + "/:organizationId/memberships", + param("organizationId").exists().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), organizationsController.getOrganizationMemberships ); router.patch( - '/:organizationId/memberships/:membershipId', - param('organizationId').exists().trim(), - param('membershipId').exists().trim(), - body('role').exists().isString().trim().isIn([OWNER, ADMIN, MEMBER]), + "/:organizationId/memberships/:membershipId", + param("organizationId").exists().trim(), + param("membershipId").exists().trim(), + body("role").exists().isString().trim().isIn([OWNER, ADMIN, MEMBER]), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), requireMembershipOrgAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), organizationsController.updateOrganizationMembership ); router.delete( - '/:organizationId/memberships/:membershipId', - param('organizationId').exists().trim(), - param('membershipId').exists().trim(), + "/:organizationId/memberships/:membershipId", + param("organizationId").exists().trim(), + param("membershipId").exists().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), requireMembershipOrgAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), organizationsController.deleteOrganizationMembership ); router.get( - '/:organizationId/workspaces', - param('organizationId').exists().trim(), + "/:organizationId/workspaces", + param("organizationId").exists().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), organizationsController.getOrganizationWorkspaces ); router.get( - '/:organizationId/service-accounts', - param('organizationId').exists().trim(), + "/:organizationId/service-accounts", + param("organizationId").exists().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), organizationsController.getOrganizationServiceAccounts ); diff --git a/backend/src/routes/v2/secret.ts b/backend/src/routes/v2/secret.ts index f2c825ba8..e577d2a47 100644 --- a/backend/src/routes/v2/secret.ts +++ b/backend/src/routes/v2/secret.ts @@ -1,146 +1,146 @@ -import express from 'express'; +import express from "express"; import { requireAuth, - requireWorkspaceAuth, requireSecretAuth, - validateRequest -} from '../../middleware'; -import { body, param, query } from 'express-validator'; + requireWorkspaceAuth, + validateRequest, +} from "../../middleware"; +import { body, param, query } from "express-validator"; import { ADMIN, - MEMBER, AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN, + MEMBER, PERMISSION_READ_SECRETS, - PERMISSION_WRITE_SECRETS -} from '../../variables'; -import { CreateSecretRequestBody, ModifySecretRequestBody } from '../../types/secret'; -import { secretController } from '../../controllers/v2'; + PERMISSION_WRITE_SECRETS, +} from "../../variables"; +import { CreateSecretRequestBody, ModifySecretRequestBody } from "../../types/secret"; +import { secretController } from "../../controllers/v2"; // note to devs: stop supporting these routes [deprecated] const router = express.Router(); router.post( - '/batch-create/workspace/:workspaceId/environment/:environment', + "/batch-create/workspace/:workspaceId/environment/:environment", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().isMongoId().trim(), - param('environment').exists().trim(), - body('secrets').exists().isArray().custom((value) => value.every((item: CreateSecretRequestBody) => typeof item === 'object')), - body('channel'), + param("workspaceId").exists().isMongoId().trim(), + param("environment").exists().trim(), + body("secrets").exists().isArray().custom((value) => value.every((item: CreateSecretRequestBody) => typeof item === "object")), + body("channel"), validateRequest, secretController.createSecrets ); router.post( - '/workspace/:workspaceId/environment/:environment', + "/workspace/:workspaceId/environment/:environment", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().isMongoId().trim(), - param('environment').exists().trim(), - body('secret').exists().isObject(), - body('channel'), + param("workspaceId").exists().isMongoId().trim(), + param("environment").exists().trim(), + body("secret").exists().isObject(), + body("channel"), validateRequest, secretController.createSecret ); router.get( - '/workspace/:workspaceId', - param('workspaceId').exists().trim(), + "/workspace/:workspaceId", + param("workspaceId").exists().trim(), query("environment").exists(), requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - query('channel'), + query("channel"), validateRequest, secretController.getSecrets ); router.get( - '/:secretId', + "/:secretId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN], }), requireSecretAuth({ acceptedRoles: [ADMIN, MEMBER], - requiredPermissions: [PERMISSION_READ_SECRETS] + requiredPermissions: [PERMISSION_READ_SECRETS], }), validateRequest, secretController.getSecret ); router.delete( - '/batch/workspace/:workspaceId/environment/:environmentName', + "/batch/workspace/:workspaceId/environment/:environmentName", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - param('workspaceId').exists().isMongoId().trim(), - param('environmentName').exists().trim(), - body('secretIds').exists().isArray().custom(array => array.length > 0), + param("workspaceId").exists().isMongoId().trim(), + param("environmentName").exists().trim(), + body("secretIds").exists().isArray().custom(array => array.length > 0), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), validateRequest, secretController.deleteSecrets ); router.delete( - '/:secretId', + "/:secretId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireSecretAuth({ acceptedRoles: [ADMIN, MEMBER], - requiredPermissions: [PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS] + requiredPermissions: [PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS], }), - param('secretId').isMongoId(), + param("secretId").isMongoId(), validateRequest, secretController.deleteSecret ); router.patch( - '/batch-modify/workspace/:workspaceId/environment/:environmentName', + "/batch-modify/workspace/:workspaceId/environment/:environmentName", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('secrets').exists().isArray().custom((secrets: ModifySecretRequestBody[]) => secrets.length > 0), - param('workspaceId').exists().isMongoId().trim(), - param('environmentName').exists().trim(), + body("secrets").exists().isArray().custom((secrets: ModifySecretRequestBody[]) => secrets.length > 0), + param("workspaceId").exists().isMongoId().trim(), + param("environmentName").exists().trim(), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), validateRequest, secretController.updateSecrets ); router.patch( - '/workspace/:workspaceId/environment/:environmentName', + "/workspace/:workspaceId/environment/:environmentName", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), - body('secret').isObject(), - param('workspaceId').exists().isMongoId().trim(), - param('environmentName').exists().trim(), + body("secret").isObject(), + param("workspaceId").exists().isMongoId().trim(), + param("environmentName").exists().trim(), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), validateRequest, secretController.updateSecret diff --git a/backend/src/routes/v2/secrets.ts b/backend/src/routes/v2/secrets.ts index 3cf7e83d5..cd550d99e 100644 --- a/backend/src/routes/v2/secrets.ts +++ b/backend/src/routes/v2/secrets.ts @@ -3,24 +3,24 @@ const router = express.Router(); import { Types } from "mongoose"; import { requireAuth, - requireWorkspaceAuth, requireSecretsAuth, + requireWorkspaceAuth, validateRequest, } from "../../middleware"; import { validateClientForSecrets } from "../../validation"; -import { query, body } from "express-validator"; +import { body, query } from "express-validator"; import { secretsController } from "../../controllers/v2"; import { ADMIN, - MEMBER, - SECRET_PERSONAL, - SECRET_SHARED, - PERMISSION_READ_SECRETS, - PERMISSION_WRITE_SECRETS, + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY, + MEMBER, + PERMISSION_READ_SECRETS, + PERMISSION_WRITE_SECRETS, + SECRET_PERSONAL, + SECRET_SHARED, } from "../../variables"; import { BatchSecretRequest } from "../../types/secret"; diff --git a/backend/src/routes/v2/serviceAccounts.ts b/backend/src/routes/v2/serviceAccounts.ts index 6f0db91b7..244739e72 100644 --- a/backend/src/routes/v2/serviceAccounts.ts +++ b/backend/src/routes/v2/serviceAccounts.ts @@ -1,157 +1,157 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, requireOrganizationAuth, - requireWorkspaceAuth, requireServiceAccountAuth, requireServiceAccountWorkspacePermissionAuth, - validateRequest -} from '../../middleware'; -import { param, query, body } from 'express-validator'; + requireWorkspaceAuth, + validateRequest, +} from "../../middleware"; +import { body, param, query } from "express-validator"; import { - OWNER, - ADMIN, - MEMBER, ACCEPTED, + ADMIN, AUTH_MODE_JWT, - AUTH_MODE_SERVICE_ACCOUNT -} from '../../variables'; -import { serviceAccountsController } from '../../controllers/v2'; + AUTH_MODE_SERVICE_ACCOUNT, + MEMBER, + OWNER, +} from "../../variables"; +import { serviceAccountsController } from "../../controllers/v2"; router.get( // TODO: check - '/me', + "/me", requireAuth({ - acceptedAuthModes: [AUTH_MODE_SERVICE_ACCOUNT] + acceptedAuthModes: [AUTH_MODE_SERVICE_ACCOUNT], }), serviceAccountsController.getCurrentServiceAccount ); router.get( - '/:serviceAccountId', - param('serviceAccountId').exists().isString().trim(), + "/:serviceAccountId", + param("serviceAccountId").exists().isString().trim(), requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireServiceAccountAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), serviceAccountsController.getServiceAccountById ); router.post( - '/', - body('organizationId').exists().isString().trim(), - body('name').exists().isString().trim(), - body('publicKey').exists().isString().trim(), - body('expiresIn').isNumeric(), // measured in ms + "/", + body("organizationId").exists().isString().trim(), + body("name").exists().isString().trim(), + body("publicKey").exists().isString().trim(), + body("expiresIn").isNumeric(), // measured in ms validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireOrganizationAuth({ acceptedRoles: [OWNER, ADMIN, MEMBER], acceptedStatuses: [ACCEPTED], - locationOrganizationId: 'body' + locationOrganizationId: "body", }), serviceAccountsController.createServiceAccount ); router.patch( - '/:serviceAccountId/name', - param('serviceAccountId').exists().isString().trim(), + "/:serviceAccountId/name", + param("serviceAccountId").exists().isString().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireServiceAccountAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), serviceAccountsController.changeServiceAccountName ); router.delete( - '/:serviceAccountId', - param('serviceAccountId').exists().isString().trim(), + "/:serviceAccountId", + param("serviceAccountId").exists().isString().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireServiceAccountAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), serviceAccountsController.deleteServiceAccount ); router.get( - '/:serviceAccountId/permissions/workspace', - param('serviceAccountId').exists().isString().trim(), + "/:serviceAccountId/permissions/workspace", + param("serviceAccountId").exists().isString().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireServiceAccountAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), serviceAccountsController.getServiceAccountWorkspacePermissions ); router.post( - '/:serviceAccountId/permissions/workspace', - param('serviceAccountId').exists().isString().trim(), - body('workspaceId').exists().isString().notEmpty(), - body('environment').exists().isString().notEmpty(), - body('read').isBoolean().optional(), - body('write').isBoolean().optional(), - body('encryptedKey').exists().isString().notEmpty(), - body('nonce').exists().isString().notEmpty(), + "/:serviceAccountId/permissions/workspace", + param("serviceAccountId").exists().isString().trim(), + body("workspaceId").exists().isString().notEmpty(), + body("environment").exists().isString().notEmpty(), + body("read").isBoolean().optional(), + body("write").isBoolean().optional(), + body("encryptedKey").exists().isString().notEmpty(), + body("nonce").exists().isString().notEmpty(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireServiceAccountAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'body' + locationWorkspaceId: "body", }), serviceAccountsController.addServiceAccountWorkspacePermission ); router.delete( - '/:serviceAccountId/permissions/workspace/:serviceAccountWorkspacePermissionId', - param('serviceAccountId').exists().isString().trim(), - param('serviceAccountWorkspacePermissionId').exists().isString().trim(), + "/:serviceAccountId/permissions/workspace/:serviceAccountWorkspacePermissionId", + param("serviceAccountId").exists().isString().trim(), + param("serviceAccountWorkspacePermissionId").exists().isString().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireServiceAccountAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), requireServiceAccountWorkspacePermissionAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), serviceAccountsController.deleteServiceAccountWorkspacePermission ); router.get( - '/:serviceAccountId/keys', - query('workspaceId').optional().isString(), + "/:serviceAccountId/keys", + query("workspaceId").optional().isString(), requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT], }), requireServiceAccountAuth({ acceptedRoles: [OWNER, ADMIN], - acceptedStatuses: [ACCEPTED] + acceptedStatuses: [ACCEPTED], }), serviceAccountsController.getServiceAccountKeys ); diff --git a/backend/src/routes/v2/serviceTokenData.ts b/backend/src/routes/v2/serviceTokenData.ts index e96064715..33ffad3cf 100644 --- a/backend/src/routes/v2/serviceTokenData.ts +++ b/backend/src/routes/v2/serviceTokenData.ts @@ -2,18 +2,18 @@ import express from "express"; const router = express.Router(); import { requireAuth, - requireWorkspaceAuth, requireServiceTokenDataAuth, + requireWorkspaceAuth, validateRequest, } from "../../middleware"; -import { param, body } from "express-validator"; +import { body, param } from "express-validator"; import { ADMIN, - MEMBER, - PERMISSION_WRITE_SECRETS, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, + MEMBER, + PERMISSION_WRITE_SECRETS, } from "../../variables"; import { serviceTokenDataController } from "../../controllers/v2"; diff --git a/backend/src/routes/v2/signup.ts b/backend/src/routes/v2/signup.ts index 138591879..cc701b034 100644 --- a/backend/src/routes/v2/signup.ts +++ b/backend/src/routes/v2/signup.ts @@ -1,47 +1,47 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body } from 'express-validator'; -import { requireSignupAuth, validateRequest } from '../../middleware'; -import { signupController } from '../../controllers/v2'; -import { authLimiter } from '../../helpers/rateLimiter'; +import { body } from "express-validator"; +import { requireSignupAuth, validateRequest } from "../../middleware"; +import { signupController } from "../../controllers/v2"; +import { authLimiter } from "../../helpers/rateLimiter"; router.post( - '/complete-account/signup', + "/complete-account/signup", authLimiter, requireSignupAuth, - body('email').exists().isString().trim().notEmpty().isEmail(), - body('firstName').exists().isString().trim().notEmpty(), - body('lastName').exists().isString().trim().notEmpty(), - body('protectedKey').exists().isString().trim().notEmpty(), - body('protectedKeyIV').exists().isString().trim().notEmpty(), - body('protectedKeyTag').exists().isString().trim().notEmpty(), - body('publicKey').exists().isString().trim().notEmpty(), - body('encryptedPrivateKey').exists().isString().trim().notEmpty(), - body('encryptedPrivateKeyIV').exists().isString().trim().notEmpty(), - body('encryptedPrivateKeyTag').exists().isString().trim().notEmpty(), - body('salt').exists().isString().trim().notEmpty(), - body('verifier').exists().isString().trim().notEmpty(), - body('organizationName').exists().isString().trim().notEmpty(), + body("email").exists().isString().trim().notEmpty().isEmail(), + body("firstName").exists().isString().trim().notEmpty(), + body("lastName").exists().isString().trim().notEmpty(), + body("protectedKey").exists().isString().trim().notEmpty(), + body("protectedKeyIV").exists().isString().trim().notEmpty(), + body("protectedKeyTag").exists().isString().trim().notEmpty(), + body("publicKey").exists().isString().trim().notEmpty(), + body("encryptedPrivateKey").exists().isString().trim().notEmpty(), + body("encryptedPrivateKeyIV").exists().isString().trim().notEmpty(), + body("encryptedPrivateKeyTag").exists().isString().trim().notEmpty(), + body("salt").exists().isString().trim().notEmpty(), + body("verifier").exists().isString().trim().notEmpty(), + body("organizationName").exists().isString().trim().notEmpty(), validateRequest, signupController.completeAccountSignup ); router.post( - '/complete-account/invite', + "/complete-account/invite", authLimiter, requireSignupAuth, - body('email').exists().isString().trim().notEmpty().isEmail(), - body('firstName').exists().isString().trim().notEmpty(), - body('lastName').exists().isString().trim().notEmpty(), - body('protectedKey').exists().isString().trim().notEmpty(), - body('protectedKeyIV').exists().isString().trim().notEmpty(), - body('protectedKeyTag').exists().isString().trim().notEmpty(), - body('publicKey').exists().trim().notEmpty(), - body('encryptedPrivateKey').exists().isString().trim().notEmpty(), - body('encryptedPrivateKeyIV').exists().isString().trim().notEmpty(), - body('encryptedPrivateKeyTag').exists().isString().trim().notEmpty(), - body('salt').exists().isString().trim().notEmpty(), - body('verifier').exists().isString().trim().notEmpty(), + body("email").exists().isString().trim().notEmpty().isEmail(), + body("firstName").exists().isString().trim().notEmpty(), + body("lastName").exists().isString().trim().notEmpty(), + body("protectedKey").exists().isString().trim().notEmpty(), + body("protectedKeyIV").exists().isString().trim().notEmpty(), + body("protectedKeyTag").exists().isString().trim().notEmpty(), + body("publicKey").exists().trim().notEmpty(), + body("encryptedPrivateKey").exists().isString().trim().notEmpty(), + body("encryptedPrivateKeyIV").exists().isString().trim().notEmpty(), + body("encryptedPrivateKeyTag").exists().isString().trim().notEmpty(), + body("salt").exists().isString().trim().notEmpty(), + body("verifier").exists().isString().trim().notEmpty(), validateRequest, signupController.completeAccountInvite ); diff --git a/backend/src/routes/v2/tags.ts b/backend/src/routes/v2/tags.ts index c9a11c1bc..8974bd9fd 100644 --- a/backend/src/routes/v2/tags.ts +++ b/backend/src/routes/v2/tags.ts @@ -1,54 +1,54 @@ -import express, { Response, Request } from 'express'; +import express from "express"; const router = express.Router(); -import { body, param } from 'express-validator'; -import { tagController } from '../../controllers/v2'; +import { body, param } from "express-validator"; +import { tagController } from "../../controllers/v2"; import { requireAuth, requireWorkspaceAuth, - validateRequest -} from '../../middleware'; + validateRequest, +} from "../../middleware"; import { ADMIN, + AUTH_MODE_JWT, MEMBER, - AUTH_MODE_JWT -} from '../../variables'; +} from "../../variables"; router.get( - '/:workspaceId/tags', + "/:workspaceId/tags", requireAuth({ acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [MEMBER, ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, tagController.getWorkspaceTags ); router.delete( - '/tags/:tagId', + "/tags/:tagId", requireAuth({ acceptedAuthModes: [AUTH_MODE_JWT], }), - param('tagId').exists().trim(), + param("tagId").exists().trim(), validateRequest, tagController.deleteWorkspaceTag ); router.post( - '/:workspaceId/tags', + "/:workspaceId/tags", requireAuth({ acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [MEMBER, ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('name').exists().trim(), - body('slug').exists().trim(), + param("workspaceId").exists().trim(), + body("name").exists().trim(), + body("slug").exists().trim(), validateRequest, tagController.createWorkspaceTag ); diff --git a/backend/src/routes/v2/users.ts b/backend/src/routes/v2/users.ts index 63ae5eee9..970824eaa 100644 --- a/backend/src/routes/v2/users.ts +++ b/backend/src/routes/v2/users.ts @@ -1,38 +1,38 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, - validateRequest -} from '../../middleware'; -import { body } from 'express-validator'; -import { usersController } from '../../controllers/v2'; + validateRequest, +} from "../../middleware"; +import { body } from "express-validator"; +import { usersController } from "../../controllers/v2"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, - AUTH_MODE_API_KEY -} from '../../variables'; +} from "../../variables"; router.get( - '/me', + "/me", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), usersController.getMe ); router.patch( - '/me/mfa', + "/me/mfa", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), - body('isMfaEnabled').exists().isBoolean(), + body("isMfaEnabled").exists().isBoolean(), validateRequest, usersController.updateMyMfaEnabled ); router.get( - '/me/organizations', + "/me/organizations", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), usersController.getMyOrganizations ); diff --git a/backend/src/routes/v2/workspace.ts b/backend/src/routes/v2/workspace.ts index e258636fb..c36a0b7f8 100644 --- a/backend/src/routes/v2/workspace.ts +++ b/backend/src/routes/v2/workspace.ts @@ -1,147 +1,147 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body, param, query } from 'express-validator'; +import { body, param, query } from "express-validator"; import { requireAuth, requireMembershipAuth, requireWorkspaceAuth, - validateRequest -} from '../../middleware'; + validateRequest, +} from "../../middleware"; import { ADMIN, - MEMBER, + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../../variables'; -import { workspaceController } from '../../controllers/v2'; + MEMBER, +} from "../../variables"; +import { workspaceController } from "../../controllers/v2"; router.post( - '/:workspaceId/secrets', + "/:workspaceId/secrets", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - body('secrets').exists(), - body('keys').exists(), - body('environment').exists().trim().notEmpty(), - body('channel'), - param('workspaceId').exists().trim(), + body("secrets").exists(), + body("keys").exists(), + body("environment").exists().trim().notEmpty(), + body("channel"), + param("workspaceId").exists().trim(), validateRequest, workspaceController.pushWorkspaceSecrets ); router.get( - '/:workspaceId/secrets', + "/:workspaceId/secrets", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - query('environment').exists().trim(), - query('channel'), - param('workspaceId').exists().trim(), + query("environment").exists().trim(), + query("channel"), + param("workspaceId").exists().trim(), validateRequest, workspaceController.pullSecrets ); router.get( - '/:workspaceId/encrypted-key', + "/:workspaceId/encrypted-key", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspaceKey ); router.get( - '/:workspaceId/service-token-data', + "/:workspaceId/service-token-data", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), + param("workspaceId").exists().trim(), validateRequest, workspaceController.getWorkspaceServiceTokenData ); router.get( // new - TODO: rewire dashboard to this route - '/:workspaceId/memberships', - param('workspaceId').exists().trim(), + "/:workspaceId/memberships", + param("workspaceId").exists().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), workspaceController.getWorkspaceMemberships ); router.patch( // TODO - rewire dashboard to this route - '/:workspaceId/memberships/:membershipId', - param('workspaceId').exists().trim(), - param('membershipId').exists().trim(), - body('role').exists().isString().trim().isIn([ADMIN, MEMBER]), + "/:workspaceId/memberships/:membershipId", + param("workspaceId").exists().trim(), + param("membershipId").exists().trim(), + body("role").exists().isString().trim().isIn([ADMIN, MEMBER]), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), requireMembershipAuth({ acceptedRoles: [ADMIN], - locationMembershipId: 'params' + locationMembershipId: "params", }), workspaceController.updateWorkspaceMembership ); router.delete( // TODO - rewire dashboard to this route - '/:workspaceId/memberships/:membershipId', - param('workspaceId').exists().trim(), - param('membershipId').exists().trim(), + "/:workspaceId/memberships/:membershipId", + param("workspaceId").exists().trim(), + param("membershipId").exists().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY] + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), requireMembershipAuth({ acceptedRoles: [ADMIN], - locationMembershipId: 'params' + locationMembershipId: "params", }), workspaceController.deleteWorkspaceMembership ); router.patch( - '/:workspaceId/auto-capitalization', + "/:workspaceId/auto-capitalization", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), - param('workspaceId').exists().trim(), - body('autoCapitalization').exists().trim().notEmpty(), + param("workspaceId").exists().trim(), + body("autoCapitalization").exists().trim().notEmpty(), validateRequest, workspaceController.toggleAutoCapitalization ); diff --git a/backend/src/routes/v3/auth.ts b/backend/src/routes/v3/auth.ts index 6539b5c0f..12afb5113 100644 --- a/backend/src/routes/v3/auth.ts +++ b/backend/src/routes/v3/auth.ts @@ -1,27 +1,27 @@ -import express from 'express'; -import { body } from 'express-validator'; -import { validateRequest } from '../../middleware'; -import { authController } from '../../controllers/v3'; -import { authLimiter } from '../../helpers/rateLimiter'; +import express from "express"; +import { body } from "express-validator"; +import { validateRequest } from "../../middleware"; +import { authController } from "../../controllers/v3"; +import { authLimiter } from "../../helpers/rateLimiter"; const router = express.Router(); router.post( - '/login1', + "/login1", authLimiter, - body('email').isString().trim(), - body('providerAuthToken').isString().trim().optional({nullable: true}), - body('clientPublicKey').isString().trim().notEmpty(), + body("email").isString().trim(), + body("providerAuthToken").isString().trim().optional({nullable: true}), + body("clientPublicKey").isString().trim().notEmpty(), validateRequest, authController.login1 ); router.post( - '/login2', + "/login2", authLimiter, - body('email').isString().trim(), - body('providerAuthToken').isString().trim().optional({nullable: true}), - body('clientProof').isString().trim().notEmpty(), + body("email").isString().trim(), + body("providerAuthToken").isString().trim().optional({nullable: true}), + body("clientProof").isString().trim().notEmpty(), validateRequest, authController.login2 ); diff --git a/backend/src/routes/v3/index.ts b/backend/src/routes/v3/index.ts index 2560a8f82..f4fcfe55b 100644 --- a/backend/src/routes/v3/index.ts +++ b/backend/src/routes/v3/index.ts @@ -1,7 +1,7 @@ -import auth from './auth'; -import secrets from './secrets'; -import workspaces from './workspaces'; -import signup from './signup'; +import auth from "./auth"; +import secrets from "./secrets"; +import workspaces from "./workspaces"; +import signup from "./signup"; export { auth, diff --git a/backend/src/routes/v3/secrets.ts b/backend/src/routes/v3/secrets.ts index 56573dd9f..c010151c6 100644 --- a/backend/src/routes/v3/secrets.ts +++ b/backend/src/routes/v3/secrets.ts @@ -8,16 +8,16 @@ import { import { body, param, query } from "express-validator"; import { secretsController } from "../../controllers/v3"; import { - AUTH_MODE_JWT, - AUTH_MODE_API_KEY, - AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_SERVICE_ACCOUNT, ADMIN, + AUTH_MODE_API_KEY, + AUTH_MODE_JWT, + AUTH_MODE_SERVICE_ACCOUNT, + AUTH_MODE_SERVICE_TOKEN, MEMBER, - PERMISSION_WRITE_SECRETS, - SECRET_SHARED, - SECRET_PERSONAL, PERMISSION_READ_SECRETS, + PERMISSION_WRITE_SECRETS, + SECRET_PERSONAL, + SECRET_SHARED, } from "../../variables"; router.get( @@ -40,7 +40,7 @@ router.get( locationEnvironment: "query", requiredPermissions: [PERMISSION_READ_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: true + requireE2EEOff: true, }), secretsController.getSecretsRaw ); @@ -67,7 +67,7 @@ router.get( locationEnvironment: "query", requiredPermissions: [PERMISSION_READ_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: true + requireE2EEOff: true, }), secretsController.getSecretByNameRaw ); @@ -95,7 +95,7 @@ router.post( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: true + requireE2EEOff: true, }), secretsController.createSecretRaw ); @@ -123,7 +123,7 @@ router.patch( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: true + requireE2EEOff: true, }), secretsController.updateSecretByNameRaw ); @@ -150,7 +150,7 @@ router.delete( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: true + requireE2EEOff: true, }), secretsController.deleteSecretByNameRaw ); @@ -175,7 +175,7 @@ router.get( locationEnvironment: "query", requiredPermissions: [PERMISSION_READ_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: false + requireE2EEOff: false, }), secretsController.getSecrets ); @@ -210,7 +210,7 @@ router.post( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: false + requireE2EEOff: false, }), secretsController.createSecret ); @@ -266,7 +266,7 @@ router.patch( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: false + requireE2EEOff: false, }), secretsController.updateSecretByName ); @@ -293,7 +293,7 @@ router.delete( locationEnvironment: "body", requiredPermissions: [PERMISSION_WRITE_SECRETS], requireBlindIndicesEnabled: true, - requireE2EEOff: false + requireE2EEOff: false, }), secretsController.deleteSecretByName ); diff --git a/backend/src/routes/v3/signup.ts b/backend/src/routes/v3/signup.ts index b2fb4af81..eb3ff9023 100644 --- a/backend/src/routes/v3/signup.ts +++ b/backend/src/routes/v3/signup.ts @@ -1,27 +1,27 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); -import { body } from 'express-validator'; -import { signupController } from '../../controllers/v3'; -import { authLimiter } from '../../helpers/rateLimiter'; -import { validateRequest } from '../../middleware'; +import { body } from "express-validator"; +import { signupController } from "../../controllers/v3"; +import { authLimiter } from "../../helpers/rateLimiter"; +import { validateRequest } from "../../middleware"; router.post( - '/complete-account/signup', + "/complete-account/signup", authLimiter, - body('email').exists().isString().trim().notEmpty().isEmail(), - body('firstName').exists().isString().trim().notEmpty(), - body('lastName').exists().isString().trim().optional({nullable: true}), - body('protectedKey').exists().isString().trim().notEmpty(), - body('protectedKeyIV').exists().isString().trim().notEmpty(), - body('protectedKeyTag').exists().isString().trim().notEmpty(), - body('publicKey').exists().isString().trim().notEmpty(), - body('encryptedPrivateKey').exists().isString().trim().notEmpty(), - body('encryptedPrivateKeyIV').exists().isString().trim().notEmpty(), - body('encryptedPrivateKeyTag').exists().isString().trim().notEmpty(), - body('salt').exists().isString().trim().notEmpty(), - body('verifier').exists().isString().trim().notEmpty(), - body('organizationName').exists().isString().trim().notEmpty(), - body('providerAuthToken').isString().trim().optional({nullable: true}), + body("email").exists().isString().trim().notEmpty().isEmail(), + body("firstName").exists().isString().trim().notEmpty(), + body("lastName").exists().isString().trim().optional({nullable: true}), + body("protectedKey").exists().isString().trim().notEmpty(), + body("protectedKeyIV").exists().isString().trim().notEmpty(), + body("protectedKeyTag").exists().isString().trim().notEmpty(), + body("publicKey").exists().isString().trim().notEmpty(), + body("encryptedPrivateKey").exists().isString().trim().notEmpty(), + body("encryptedPrivateKeyIV").exists().isString().trim().notEmpty(), + body("encryptedPrivateKeyTag").exists().isString().trim().notEmpty(), + body("salt").exists().isString().trim().notEmpty(), + body("verifier").exists().isString().trim().notEmpty(), + body("organizationName").exists().isString().trim().notEmpty(), + body("providerAuthToken").isString().trim().optional({nullable: true}), validateRequest, signupController.completeAccountSignup, ); diff --git a/backend/src/routes/v3/workspaces.ts b/backend/src/routes/v3/workspaces.ts index 5c4df39d8..7aa909693 100644 --- a/backend/src/routes/v3/workspaces.ts +++ b/backend/src/routes/v3/workspaces.ts @@ -1,75 +1,75 @@ -import express from 'express'; +import express from "express"; const router = express.Router(); import { requireAuth, requireWorkspaceAuth, - validateRequest -} from '../../middleware'; -import { workspacesController } from '../../controllers/v3'; + validateRequest, +} from "../../middleware"; +import { workspacesController } from "../../controllers/v3"; import { + ADMIN, AUTH_MODE_JWT, - ADMIN -} from '../../variables'; -import { param, body } from 'express-validator'; +} from "../../variables"; +import { body, param } from "express-validator"; // -- migration to blind indices endpoints router.get( - '/:workspaceId/secrets/blind-index-status', - param('workspaceId').exists().isString().trim(), + "/:workspaceId/secrets/blind-index-status", + param("workspaceId").exists().isString().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN], - locationWorkspaceId: 'params', + locationWorkspaceId: "params", }), workspacesController.getWorkspaceBlindIndexStatus ); router.get( // allow admins to get all workspace secrets (part of blind indices migration) - '/:workspaceId/secrets', - param('workspaceId').exists().isString().trim(), + "/:workspaceId/secrets", + param("workspaceId").exists().isString().trim(), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN], - locationWorkspaceId: 'params', + locationWorkspaceId: "params", }), workspacesController.getWorkspaceSecrets ); router.post( // allow admins to name all workspace secrets (part of blind indices migration) - '/:workspaceId/secrets/names', - param('workspaceId').exists().isString().trim(), - body('secretsToUpdate') + "/:workspaceId/secrets/names", + param("workspaceId").exists().isString().trim(), + body("secretsToUpdate") .exists() .isArray() - .withMessage('secretsToUpdate must be an array') + .withMessage("secretsToUpdate must be an array") .customSanitizer((value) => { return value.map((secret: any) => ({ secretName: secret.secretName, - _id: secret._id + _id: secret._id, })); }), - body('secretsToUpdate.*.secretName') + body("secretsToUpdate.*.secretName") .exists() .isString() - .withMessage('secretName must be a string'), - body('secretsToUpdate.*._id') + .withMessage("secretName must be a string"), + body("secretsToUpdate.*._id") .exists() .isString() - .withMessage('secretId must be a string'), + .withMessage("secretId must be a string"), validateRequest, requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT] + acceptedAuthModes: [AUTH_MODE_JWT], }), requireWorkspaceAuth({ acceptedRoles: [ADMIN], - locationWorkspaceId: 'params' + locationWorkspaceId: "params", }), workspacesController.nameWorkspaceSecrets ); diff --git a/backend/src/services/BotService.ts b/backend/src/services/BotService.ts index 0e3768a9c..ca31bf103 100644 --- a/backend/src/services/BotService.ts +++ b/backend/src/services/BotService.ts @@ -1,10 +1,10 @@ import { Types } from "mongoose"; import { - getSecretsBotHelper, - encryptSymmetricHelper, decryptSymmetricHelper, - getKey, + encryptSymmetricHelper, getIsWorkspaceE2EEHelper, + getKey, + getSecretsBotHelper, } from "../helpers/bot"; /** diff --git a/backend/src/services/DatabaseService.ts b/backend/src/services/DatabaseService.ts index 616f56c47..4b40863d0 100644 --- a/backend/src/services/DatabaseService.ts +++ b/backend/src/services/DatabaseService.ts @@ -1,7 +1,7 @@ import { + closeDatabaseHelper, initDatabaseHelper, - closeDatabaseHelper -} from '../helpers/database'; +} from "../helpers/database"; /** * Class to handle database actions @@ -15,7 +15,7 @@ class DatabaseService { */ static async initDatabase(MONGO_URL: string) { return await initDatabaseHelper({ - mongoURL: MONGO_URL + mongoURL: MONGO_URL, }); } diff --git a/backend/src/services/EventService.ts b/backend/src/services/EventService.ts index 160086be8..7abc7c1b1 100644 --- a/backend/src/services/EventService.ts +++ b/backend/src/services/EventService.ts @@ -1,5 +1,5 @@ -import { Types } from 'mongoose'; -import { handleEventHelper } from '../helpers/event'; +import { Types } from "mongoose"; +import { handleEventHelper } from "../helpers/event"; interface Event { name: string; @@ -22,7 +22,7 @@ class EventService { */ static async handleEvent({ event }: { event: Event }): Promise { await handleEventHelper({ - event + event, }); } } diff --git a/backend/src/services/IntegrationService.ts b/backend/src/services/IntegrationService.ts index 1e7409ad0..b5b8b1d3f 100644 --- a/backend/src/services/IntegrationService.ts +++ b/backend/src/services/IntegrationService.ts @@ -1,12 +1,12 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - handleOAuthExchangeHelper, - syncIntegrationsHelper, - getIntegrationAuthRefreshHelper, getIntegrationAuthAccessHelper, - setIntegrationAuthRefreshHelper, + getIntegrationAuthRefreshHelper, + handleOAuthExchangeHelper, setIntegrationAuthAccessHelper, -} from '../helpers/integration'; + setIntegrationAuthRefreshHelper, + syncIntegrationsHelper, +} from "../helpers/integration"; /** * Class to handle integrations @@ -30,7 +30,7 @@ class IntegrationService { workspaceId, integration, code, - environment + environment, }: { workspaceId: string; integration: string; @@ -41,7 +41,7 @@ class IntegrationService { workspaceId, integration, code, - environment + environment, }); } @@ -53,13 +53,13 @@ class IntegrationService { */ static async syncIntegrations({ workspaceId, - environment + environment, }: { workspaceId: Types.ObjectId; environment?: string; }) { return await syncIntegrationsHelper({ - workspaceId + workspaceId, }); } @@ -72,7 +72,7 @@ class IntegrationService { */ static async getIntegrationAuthRefresh({ integrationAuthId }: { integrationAuthId: Types.ObjectId}) { return await getIntegrationAuthRefreshHelper({ - integrationAuthId + integrationAuthId, }); } @@ -85,7 +85,7 @@ class IntegrationService { */ static async getIntegrationAuthAccess({ integrationAuthId }: { integrationAuthId: Types.ObjectId }) { return await getIntegrationAuthAccessHelper({ - integrationAuthId + integrationAuthId, }); } @@ -100,14 +100,14 @@ class IntegrationService { */ static async setIntegrationAuthRefresh({ integrationAuthId, - refreshToken + refreshToken, }: { integrationAuthId: string; refreshToken: string; }) { return await setIntegrationAuthRefreshHelper({ integrationAuthId, - refreshToken + refreshToken, }); } @@ -126,7 +126,7 @@ class IntegrationService { integrationAuthId, accessId, accessToken, - accessExpiresAt + accessExpiresAt, }: { integrationAuthId: string; accessId: string | null; @@ -137,7 +137,7 @@ class IntegrationService { integrationAuthId, accessId, accessToken, - accessExpiresAt + accessExpiresAt, }); } } diff --git a/backend/src/services/SecretService.ts b/backend/src/services/SecretService.ts index afd706dbd..ef372bddc 100644 --- a/backend/src/services/SecretService.ts +++ b/backend/src/services/SecretService.ts @@ -1,22 +1,22 @@ import { Types } from "mongoose"; import { CreateSecretParams, - GetSecretsParams, + DeleteSecretParams, GetSecretParams, + GetSecretsParams, UpdateSecretParams, - DeleteSecretParams -} from '../interfaces/services/SecretService'; +} from "../interfaces/services/SecretService"; import { createSecretBlindIndexDataHelper, - getSecretBlindIndexSaltHelper, - generateSecretBlindIndexWithSaltHelper, - generateSecretBlindIndexHelper, createSecretHelper, - getSecretsHelper, + deleteSecretHelper, + generateSecretBlindIndexHelper, + generateSecretBlindIndexWithSaltHelper, + getSecretBlindIndexSaltHelper, getSecretHelper, + getSecretsHelper, updateSecretHelper, - deleteSecretHelper -} from '../helpers/secrets'; +} from "../helpers/secrets"; class SecretService { /** diff --git a/backend/src/services/TelemetryService.ts b/backend/src/services/TelemetryService.ts index da90732eb..3db2fdb89 100644 --- a/backend/src/services/TelemetryService.ts +++ b/backend/src/services/TelemetryService.ts @@ -1,24 +1,21 @@ -import { PostHog } from 'posthog-node'; -import { getLogger } from '../utils/logger'; -import { AuthData } from '../interfaces/middleware'; +import { PostHog } from "posthog-node"; +import { getLogger } from "../utils/logger"; +import { AuthData } from "../interfaces/middleware"; import { getNodeEnv, - getTelemetryEnabled, + getPostHogHost, getPostHogProjectApiKey, - getPostHogHost -} from '../config'; + getTelemetryEnabled, +} from "../config"; import { - IUser, - User, - IServiceAccount, ServiceAccount, - IServiceTokenData, - ServiceTokenData -} from '../models'; + ServiceTokenData, + User, +} from "../models"; import { AccountNotFoundError, - BadRequestError -} from '../utils/errors'; + BadRequestError, +} from "../utils/errors"; class Telemetry { /** @@ -31,7 +28,7 @@ class Telemetry { "To improve, Infisical collects telemetry data about general usage.", "This helps us understand how the product is doing and guide our product development to create the best possible platform; it also helps us demonstrate growth as we support Infisical as open-source software.", "To opt into telemetry, you can set `TELEMETRY_ENABLED=true` within the environment variables.", - ].join('\n')) + ].join("\n")) } } @@ -41,10 +38,10 @@ class Telemetry { */ static getPostHogClient = async () => { let postHogClient: any; - if ((await getNodeEnv()) === 'production' && (await getTelemetryEnabled())) { + if ((await getNodeEnv()) === "production" && (await getTelemetryEnabled())) { // case: enable opt-out telemetry in production postHogClient = new PostHog(await getPostHogProjectApiKey(), { - host: await getPostHogHost() + host: await getPostHogHost(), }); } @@ -52,11 +49,11 @@ class Telemetry { } static getDistinctId = async ({ - authData + authData, }: { authData: AuthData; }) => { - let distinctId = ''; + let distinctId = ""; if (authData.authPayload instanceof User) { distinctId = authData.authPayload.email; } else if (authData.authPayload instanceof ServiceAccount) { @@ -64,7 +61,7 @@ class Telemetry { } else if (authData.authPayload instanceof ServiceTokenData) { if (authData.authPayload.user) { - const user = await User.findById(authData.authPayload.user, 'email'); + const user = await User.findById(authData.authPayload.user, "email"); if (!user) throw AccountNotFoundError(); distinctId = user.email; } else if (authData.authPayload.serviceAccount) { @@ -72,8 +69,8 @@ class Telemetry { } } - if (distinctId === '') throw BadRequestError({ - message: 'Failed to obtain distinct id for logging telemetry' + if (distinctId === "") throw BadRequestError({ + message: "Failed to obtain distinct id for logging telemetry", }); return distinctId; diff --git a/backend/src/services/TokenService.ts b/backend/src/services/TokenService.ts index 6299f1d54..7d0ff881d 100644 --- a/backend/src/services/TokenService.ts +++ b/backend/src/services/TokenService.ts @@ -1,5 +1,5 @@ -import { Types } from 'mongoose'; -import { createTokenHelper, validateTokenHelper } from '../helpers/token'; +import { Types } from "mongoose"; +import { createTokenHelper, validateTokenHelper } from "../helpers/token"; /** * Class to handle token actions @@ -19,9 +19,9 @@ class TokenService { type, email, phoneNumber, - organizationId + organizationId, }: { - type: 'emailConfirmation' | 'emailMfa' | 'organizationInvitation' | 'passwordReset'; + type: "emailConfirmation" | "emailMfa" | "organizationInvitation" | "passwordReset"; email?: string; phoneNumber?: string; organizationId?: Types.ObjectId; @@ -30,7 +30,7 @@ class TokenService { type, email, phoneNumber, - organizationId + organizationId, }); } @@ -48,9 +48,9 @@ class TokenService { email, phoneNumber, organizationId, - token + token, }: { - type: 'emailConfirmation' | 'emailMfa' | 'organizationInvitation' | 'passwordReset'; + type: "emailConfirmation" | "emailMfa" | "organizationInvitation" | "passwordReset"; email?: string; phoneNumber?: string; organizationId?: Types.ObjectId; @@ -61,7 +61,7 @@ class TokenService { email, phoneNumber, organizationId, - token + token, }); } } diff --git a/backend/src/services/health.ts b/backend/src/services/health.ts index daf3bf962..5ddfb8171 100644 --- a/backend/src/services/health.ts +++ b/backend/src/services/health.ts @@ -1,19 +1,19 @@ -import mongoose from 'mongoose'; -import { createTerminus } from '@godaddy/terminus'; -import { getLogger } from '../utils/logger'; +import mongoose from "mongoose"; +import { createTerminus } from "@godaddy/terminus"; +import { getLogger } from "../utils/logger"; export const setUpHealthEndpoint = (server: T) => { const onSignal = async () => { - (await getLogger('backend-main')).info('Server is starting clean-up'); + (await getLogger("backend-main")).info("Server is starting clean-up"); return Promise.all([ new Promise((resolve) => { if (mongoose.connection && mongoose.connection.readyState == 1) { mongoose.connection.close() - .then(() => resolve('Database connection closed')); + .then(() => resolve("Database connection closed")); } else { - resolve('Database connection already closed'); + resolve("Database connection already closed"); } - }) + }), ]); }; @@ -25,8 +25,8 @@ export const setUpHealthEndpoint = (server: T) => { createTerminus(server, { healthChecks: { - '/healthcheck': healthCheck, - onSignal - } + "/healthcheck": healthCheck, + onSignal, + }, }); }; diff --git a/backend/src/services/index.ts b/backend/src/services/index.ts index db0bd39a3..ad83bf510 100644 --- a/backend/src/services/index.ts +++ b/backend/src/services/index.ts @@ -1,11 +1,11 @@ -import DatabaseService from './DatabaseService'; +import DatabaseService from "./DatabaseService"; // import { logTelemetryMessage, getPostHogClient } from './TelemetryService'; -import TelemetryService from './TelemetryService'; -import BotService from './BotService'; -import EventService from './EventService'; -import IntegrationService from './IntegrationService'; -import TokenService from './TokenService'; -import SecretService from './SecretService'; +import TelemetryService from "./TelemetryService"; +import BotService from "./BotService"; +import EventService from "./EventService"; +import IntegrationService from "./IntegrationService"; +import TokenService from "./TokenService"; +import SecretService from "./SecretService"; export { TelemetryService, @@ -14,5 +14,5 @@ export { EventService, IntegrationService, TokenService, - SecretService + SecretService, } \ No newline at end of file diff --git a/backend/src/services/smtp.ts b/backend/src/services/smtp.ts index 0231e7f54..4bd58020b 100644 --- a/backend/src/services/smtp.ts +++ b/backend/src/services/smtp.ts @@ -1,31 +1,31 @@ -import nodemailer from 'nodemailer'; +import nodemailer from "nodemailer"; import { - SMTP_HOST_SENDGRID, + SMTP_HOST_GMAIL, SMTP_HOST_MAILGUN, + SMTP_HOST_SENDGRID, SMTP_HOST_SOCKETLABS, SMTP_HOST_ZOHOMAIL, - SMTP_HOST_GMAIL -} from '../variables'; -import SMTPConnection from 'nodemailer/lib/smtp-connection'; -import * as Sentry from '@sentry/node'; +} from "../variables"; +import SMTPConnection from "nodemailer/lib/smtp-connection"; +import * as Sentry from "@sentry/node"; import { getSmtpHost, - getSmtpUsername, getSmtpPassword, + getSmtpPort, getSmtpSecure, - getSmtpPort -} from '../config'; + getSmtpUsername, +} from "../config"; export const initSmtp = async () => { const mailOpts: SMTPConnection.Options = { host: await getSmtpHost(), - port: await getSmtpPort() + port: await getSmtpPort(), }; if ((await getSmtpUsername()) && (await getSmtpPassword())) { mailOpts.auth = { user: await getSmtpUsername(), - pass: await getSmtpPassword() + pass: await getSmtpPassword(), }; } @@ -37,31 +37,31 @@ export const initSmtp = async () => { case SMTP_HOST_MAILGUN: mailOpts.requireTLS = true; mailOpts.tls = { - ciphers: 'TLSv1.2' + ciphers: "TLSv1.2", } break; case SMTP_HOST_SOCKETLABS: mailOpts.requireTLS = true; mailOpts.tls = { - ciphers: 'TLSv1.2' + ciphers: "TLSv1.2", } break; case SMTP_HOST_ZOHOMAIL: mailOpts.requireTLS = true; mailOpts.tls = { - ciphers: 'TLSv1.2' + ciphers: "TLSv1.2", } break; case SMTP_HOST_GMAIL: mailOpts.requireTLS = true; mailOpts.tls = { - ciphers: 'TLSv1.2' + ciphers: "TLSv1.2", } break; default: - if ((await getSmtpHost()).includes('amazonaws.com')) { + if ((await getSmtpHost()).includes("amazonaws.com")) { mailOpts.tls = { - ciphers: 'TLSv1.2' + ciphers: "TLSv1.2", } } else { mailOpts.secure = true; @@ -75,7 +75,7 @@ export const initSmtp = async () => { .verify() .then((err) => { Sentry.setUser(null); - Sentry.captureMessage('SMTP - Successfully connected'); + Sentry.captureMessage("SMTP - Successfully connected"); console.log("SMTP - Successfully connected") }) .catch(async (err) => { diff --git a/backend/src/types/express/index.d.ts b/backend/src/types/express/index.d.ts index 471506d45..f3b2700da 100644 --- a/backend/src/types/express/index.d.ts +++ b/backend/src/types/express/index.d.ts @@ -1,16 +1,11 @@ -import * as express from 'express'; -import { Types } from 'mongoose'; -import { - IUser, - IServiceAccount, - IServiceTokenData, - ISecret -} from '../../models'; -import { - AuthData -} from '../../interfaces/middleware'; +import { Types } from "mongoose"; -declare module 'express' { + +import { + AuthData, +} from "../../interfaces/middleware"; + +declare module "express" { interface Request { user?: any; } diff --git a/backend/src/types/secret/index.d.ts b/backend/src/types/secret/index.d.ts index deab73e95..13391549e 100644 --- a/backend/src/types/secret/index.d.ts +++ b/backend/src/types/secret/index.d.ts @@ -1,7 +1,5 @@ -import { Types } from "mongoose"; import { Assign, Omit } from "utility-types"; import { ISecret } from "../../models"; -import { mongo } from "mongoose"; // Everything is required, except the omitted types export type CreateSecretRequestBody = Omit< diff --git a/backend/src/utils/addDevelopmentUser.ts b/backend/src/utils/addDevelopmentUser.ts index 2c7866229..d8b668909 100644 --- a/backend/src/utils/addDevelopmentUser.ts +++ b/backend/src/utils/addDevelopmentUser.ts @@ -6,8 +6,8 @@ import { Key, Membership, MembershipOrg, Organization, User, Workspace } from "../models"; import { SecretService } from "../services"; -import { Types } from 'mongoose'; -import { getNodeEnv } from '../config'; +import { Types } from "mongoose"; +import { getNodeEnv } from "../config"; export const testUserEmail = "test@localhost.local" export const testUserPassword = "testInfisical1" @@ -25,71 +25,71 @@ export const createTestUserForDevelopment = async () => { _id: testUserId, email: testUserEmail, refreshVersion: 0, - encryptedPrivateKey: 'ITMdDXtLoxib4+53U/qzvIV/T/UalRwimogFCXv/UsulzEoiKM+aK2aqOb0=', - firstName: 'Jake', - iv: '9fp0dZHI+UuHeKkWMDvD6w==', - lastName: 'Moni', - publicKey: 'cf44BhkybbBfsE0fZHe2jvqtCj6KLXvSq4hVjV0svzk=', - salt: 'd8099dc70958090346910fb9639262b83cf526fc9b4555a171b36a9e1bcd0240', - tag: 'bQ/UTghqcQHRoSMpLQD33g==', - verifier: '12271fcd50937ca4512e1e3166adaf9d9fc7a5cd0e4c4cb3eda89f35572ede4d9eef23f64aef9220367abff9437b0b6fa55792c442f177201d87051cf77dadade254ff667170440327355fb7d6ac4745d4db302f4843632c2ed5919ebdcff343287a4cd552255d9e3ce81177edefe089617b7616683901475d393405f554634b9bf9230c041ac85624f37a60401be20b78044932580ae0868323be3749fbf856df1518153ba375fec628275f0c445f237446ea4aa7f12c1aa1d6b5fd74b7f2e88d062845a19819ec63f2d2ed9e9f37c055149649461d997d2ae1482f53b04f9de7493efbb9686fb19b2d559b9aa2b502c22dec83f9fc43290dfea89a1dc6f03580b3642b3824513853e81a441be9a0b2fde2231bac60f3287872617a36884697805eeea673cf1a351697834484ada0f282e4745015c9c2928d61e6d092f1b9c3a27eda8413175d23bb2edae62f82ccaf52bf5a6a90344a766c7e4ebf65dae9ae90b2ad4ae65dbf16e3a6948e429771cc50307ae86d454f71a746939ed061f080dd3ae369c1a0739819aca17af46a085bac1f2a5d936d198e7951a8ac3bb38b893665fe7312835abd3f61811f81efa2a8761af5070085f9b6adcca80bf9b0d81899c3d41487fba90728bb24eceb98bd69770360a232624133700ceb4d153f2ad702e0a5b7dfaf97d20bc8aa71dc8c20024a58c06a8fecdad18cb5a2f89c51eaf7' + encryptedPrivateKey: "ITMdDXtLoxib4+53U/qzvIV/T/UalRwimogFCXv/UsulzEoiKM+aK2aqOb0=", + firstName: "Jake", + iv: "9fp0dZHI+UuHeKkWMDvD6w==", + lastName: "Moni", + publicKey: "cf44BhkybbBfsE0fZHe2jvqtCj6KLXvSq4hVjV0svzk=", + salt: "d8099dc70958090346910fb9639262b83cf526fc9b4555a171b36a9e1bcd0240", + tag: "bQ/UTghqcQHRoSMpLQD33g==", + verifier: "12271fcd50937ca4512e1e3166adaf9d9fc7a5cd0e4c4cb3eda89f35572ede4d9eef23f64aef9220367abff9437b0b6fa55792c442f177201d87051cf77dadade254ff667170440327355fb7d6ac4745d4db302f4843632c2ed5919ebdcff343287a4cd552255d9e3ce81177edefe089617b7616683901475d393405f554634b9bf9230c041ac85624f37a60401be20b78044932580ae0868323be3749fbf856df1518153ba375fec628275f0c445f237446ea4aa7f12c1aa1d6b5fd74b7f2e88d062845a19819ec63f2d2ed9e9f37c055149649461d997d2ae1482f53b04f9de7493efbb9686fb19b2d559b9aa2b502c22dec83f9fc43290dfea89a1dc6f03580b3642b3824513853e81a441be9a0b2fde2231bac60f3287872617a36884697805eeea673cf1a351697834484ada0f282e4745015c9c2928d61e6d092f1b9c3a27eda8413175d23bb2edae62f82ccaf52bf5a6a90344a766c7e4ebf65dae9ae90b2ad4ae65dbf16e3a6948e429771cc50307ae86d454f71a746939ed061f080dd3ae369c1a0739819aca17af46a085bac1f2a5d936d198e7951a8ac3bb38b893665fe7312835abd3f61811f81efa2a8761af5070085f9b6adcca80bf9b0d81899c3d41487fba90728bb24eceb98bd69770360a232624133700ceb4d153f2ad702e0a5b7dfaf97d20bc8aa71dc8c20024a58c06a8fecdad18cb5a2f89c51eaf7", } const testWorkspaceKey = { _id: new Types.ObjectId(testWorkspaceKeyId), workspace: testWorkspaceId, - encryptedKey: '96ZIRSU21CjVzIQ4Yp994FGWQvDdyK3gq+z+NCaJLK0ByTlvUePmf+AYGFJjkAdz', - nonce: '1jhCGqg9Wx3n0OtVxbDgiYYGq4S3EdgO', - sender: '63cefa6ec8d3175601cfa980', - receiver: '63cefa6ec8d3175601cfa980', + encryptedKey: "96ZIRSU21CjVzIQ4Yp994FGWQvDdyK3gq+z+NCaJLK0ByTlvUePmf+AYGFJjkAdz", + nonce: "1jhCGqg9Wx3n0OtVxbDgiYYGq4S3EdgO", + sender: "63cefa6ec8d3175601cfa980", + receiver: "63cefa6ec8d3175601cfa980", } const testWorkspace = { _id: new Types.ObjectId(testWorkspaceId), - name: 'Example Project', + name: "Example Project", organization: testOrgId, environments: [ { - _id: '63cefb15c8d3175601cfa98a', - name: 'Development', - slug: 'dev' + _id: "63cefb15c8d3175601cfa98a", + name: "Development", + slug: "dev", }, { - _id: '63cefb15c8d3175601cfa98b', - name: 'Test', - slug: 'test' + _id: "63cefb15c8d3175601cfa98b", + name: "Test", + slug: "test", }, { - _id: '63cefb15c8d3175601cfa98c', - name: 'Staging', - slug: 'staging' + _id: "63cefb15c8d3175601cfa98c", + name: "Staging", + slug: "staging", }, { - _id: '63cefb15c8d3175601cfa98d', - name: 'Production', - slug: 'prod' - } + _id: "63cefb15c8d3175601cfa98d", + name: "Production", + slug: "prod", + }, ], } const testOrg = { _id: testOrgId, - name: 'Jake\'s organization' + name: "Jake's organization", } const testMembershipOrg = { _id: testMembershipOrgId, organization: testOrgId, - role: 'owner', - status: 'accepted', + role: "owner", + status: "accepted", user: testUserId, } const testMembership = { _id: testMembershipId, - role: 'admin', + role: "admin", user: testUserId, - workspace: testWorkspaceId + workspace: testWorkspaceId, } try { @@ -124,7 +124,7 @@ export const createTestUserForDevelopment = async () => { // initialize blind index salt for workspace await SecretService.createSecretBlindIndexData({ - workspaceId: workspace._id + workspaceId: workspace._id, }); } diff --git a/backend/src/utils/aes-gcm.ts b/backend/src/utils/aes-gcm.ts index 20d0bb829..4457616a6 100644 --- a/backend/src/utils/aes-gcm.ts +++ b/backend/src/utils/aes-gcm.ts @@ -1,6 +1,6 @@ -import crypto = require('crypto'); +import crypto = require("crypto"); -const ALGORITHM = 'aes-256-gcm'; +const ALGORITHM = "aes-256-gcm"; const BLOCK_SIZE_BYTES = 16; export default class AesGCM { @@ -13,12 +13,12 @@ export default class AesGCM { const iv = crypto.randomBytes(BLOCK_SIZE_BYTES); const cipher = crypto.createCipheriv(ALGORITHM, secret, iv); - let ciphertext = cipher.update(text, 'utf8', 'base64'); - ciphertext += cipher.final('base64'); + let ciphertext = cipher.update(text, "utf8", "base64"); + ciphertext += cipher.final("base64"); return { ciphertext, - iv: iv.toString('base64'), - tag: cipher.getAuthTag().toString('base64') + iv: iv.toString("base64"), + tag: cipher.getAuthTag().toString("base64"), }; } @@ -31,12 +31,12 @@ export default class AesGCM { const decipher = crypto.createDecipheriv( ALGORITHM, secret, - Buffer.from(iv, 'base64') + Buffer.from(iv, "base64") ); - decipher.setAuthTag(Buffer.from(tag, 'base64')); + decipher.setAuthTag(Buffer.from(tag, "base64")); - let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); - cleartext += decipher.final('utf8'); + let cleartext = decipher.update(ciphertext, "base64", "utf8"); + cleartext += decipher.final("utf8"); return cleartext; } diff --git a/backend/src/utils/auth.ts b/backend/src/utils/auth.ts index 5144af16d..6970292c4 100644 --- a/backend/src/utils/auth.ts +++ b/backend/src/utils/auth.ts @@ -1,22 +1,22 @@ -import express from 'express'; -import passport from 'passport'; -import { AuthData } from '../interfaces/middleware'; +import express from "express"; +import passport from "passport"; +import { AuthData } from "../interfaces/middleware"; import { AuthProvider, - User, ServiceAccount, ServiceTokenData, -} from '../models'; -import { createToken } from '../helpers/auth'; + User, +} from "../models"; +import { createToken } from "../helpers/auth"; import { getClientIdGoogle, getClientSecretGoogle, getJwtProviderAuthLifetime, - getJwtProviderAuthSecret -} from '../config'; + getJwtProviderAuthSecret, +} from "../config"; // eslint-disable-next-line @typescript-eslint/no-var-requires -const GoogleStrategy = require('passport-google-oauth20').Strategy; +const GoogleStrategy = require("passport-google-oauth20").Strategy; // TODO: find a more optimal folder structure to store these types of functions @@ -68,8 +68,8 @@ const initializePassport = async () => { passReqToCallback: true, clientID: googleClientId, clientSecret: googleClientSecret, - callbackURL: '/api/v1/auth/callback/google', - scope: ['profile', ' email'], + callbackURL: "/api/v1/auth/callback/google", + scope: ["profile", " email"], }, async ( req: express.Request, accessToken: string, @@ -82,7 +82,7 @@ const initializePassport = async () => { let user = await User.findOne({ authProvider: AuthProvider.GOOGLE, authId: profile.id, - }).select('+publicKey') + }).select("+publicKey") if (!user) { user = await new User({ @@ -97,7 +97,7 @@ const initializePassport = async () => { userId: user._id.toString(), email: user.email, authProvider: user.authProvider, - isUserCompleted: !!user.publicKey + isUserCompleted: !!user.publicKey, }, expiresIn: await getJwtProviderAuthLifetime(), secret: await getJwtProviderAuthSecret(), diff --git a/backend/src/utils/crypto/index.ts b/backend/src/utils/crypto/index.ts index 9c3877717..9194bd7e8 100644 --- a/backend/src/utils/crypto/index.ts +++ b/backend/src/utils/crypto/index.ts @@ -1,20 +1,19 @@ -import crypto from 'crypto'; -import nacl from 'tweetnacl'; -import util from 'tweetnacl-util'; +import crypto from "crypto"; +import nacl from "tweetnacl"; +import util from "tweetnacl-util"; import { - IGenerateKeyPairOutput, + IDecryptAsymmetricInput, + IDecryptSymmetricInput, IEncryptAsymmetricInput, IEncryptAsymmetricOutput, - IDecryptAsymmetricInput, IEncryptSymmetricInput, - IDecryptSymmetricInput -} from '../../interfaces/utils'; -import { BadRequestError } from '../errors'; + IGenerateKeyPairOutput, +} from "../../interfaces/utils"; +import { BadRequestError } from "../errors"; import { - ALGORITHM_AES_256_GCM, - NONCE_BYTES_SIZE, - BLOCK_SIZE_BYTES_16 -} from '../../variables'; + ALGORITHM_AES_256_GCM, + BLOCK_SIZE_BYTES_16, +} from "../../variables"; /** * Return new base64, NaCl, public-private key pair. @@ -27,7 +26,7 @@ const generateKeyPair = (): IGenerateKeyPairOutput => { return ({ publicKey: util.encodeBase64(pair.publicKey), - privateKey: util.encodeBase64(pair.secretKey) + privateKey: util.encodeBase64(pair.secretKey), }); } @@ -45,7 +44,7 @@ const generateKeyPair = (): IGenerateKeyPairOutput => { const encryptAsymmetric = ({ plaintext, publicKey, - privateKey + privateKey, }: IEncryptAsymmetricInput): IEncryptAsymmetricOutput => { const nonce = nacl.randomBytes(24); const ciphertext = nacl.box( @@ -57,7 +56,7 @@ const encryptAsymmetric = ({ return { ciphertext: util.encodeBase64(ciphertext), - nonce: util.encodeBase64(nonce) + nonce: util.encodeBase64(nonce), }; }; @@ -75,7 +74,7 @@ const decryptAsymmetric = ({ ciphertext, nonce, publicKey, - privateKey + privateKey, }: IDecryptAsymmetricInput): string => { const plaintext: Uint8Array | null = nacl.box.open( util.decodeBase64(ciphertext), @@ -85,7 +84,7 @@ const decryptAsymmetric = ({ ); if (plaintext == null) throw BadRequestError({ - message: 'Invalid ciphertext or keys' + message: "Invalid ciphertext or keys", }); return util.encodeUTF8(plaintext); @@ -108,18 +107,18 @@ const decryptAsymmetric = ({ */ const encryptSymmetric128BitHexKeyUTF8 = ({ plaintext, - key + key, }: IEncryptSymmetricInput) => { const iv = crypto.randomBytes(BLOCK_SIZE_BYTES_16); const cipher = crypto.createCipheriv(ALGORITHM_AES_256_GCM, key, iv); - let ciphertext = cipher.update(plaintext, 'utf8', 'base64'); - ciphertext += cipher.final('base64'); + let ciphertext = cipher.update(plaintext, "utf8", "base64"); + ciphertext += cipher.final("base64"); return { ciphertext, - iv: iv.toString('base64'), - tag: cipher.getAuthTag().toString('base64') + iv: iv.toString("base64"), + tag: cipher.getAuthTag().toString("base64"), }; } /** @@ -141,18 +140,18 @@ const decryptSymmetric128BitHexKeyUTF8 = ({ ciphertext, iv, tag, - key + key, }: IDecryptSymmetricInput) => { const decipher = crypto.createDecipheriv( ALGORITHM_AES_256_GCM, key, - Buffer.from(iv, 'base64') + Buffer.from(iv, "base64") ); - decipher.setAuthTag(Buffer.from(tag, 'base64')); + decipher.setAuthTag(Buffer.from(tag, "base64")); - let cleartext = decipher.update(ciphertext, 'base64', 'utf8'); - cleartext += decipher.final('utf8'); + let cleartext = decipher.update(ciphertext, "base64", "utf8"); + cleartext += decipher.final("utf8"); return cleartext; } @@ -162,5 +161,5 @@ export { encryptAsymmetric, decryptAsymmetric, encryptSymmetric128BitHexKeyUTF8, - decryptSymmetric128BitHexKeyUTF8 + decryptSymmetric128BitHexKeyUTF8, }; diff --git a/backend/src/utils/errors.ts b/backend/src/utils/errors.ts index 4b698bee3..f99ef27b2 100644 --- a/backend/src/utils/errors.ts +++ b/backend/src/utils/errors.ts @@ -4,231 +4,231 @@ import RequestError, { LogLevel, RequestErrorContext } from "./requestError" export const RouteNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.INFO, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'route_not_found', - message: error?.message ?? 'The requested source was not found', + type: error?.type ?? "route_not_found", + message: error?.message ?? "The requested source was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const MethodNotAllowedError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.INFO, statusCode: error?.statusCode ?? 405, - type: error?.type ?? 'method_not_allowed', - message: error?.message ?? 'The requested method is not allowed for the resource', + type: error?.type ?? "method_not_allowed", + message: error?.message ?? "The requested method is not allowed for the resource", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const UnauthorizedRequestError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.INFO, statusCode: error?.statusCode ?? 401, - type: error?.type ?? 'unauthorized', - message: error?.message ?? 'You are not authorized to access this resource', + type: error?.type ?? "unauthorized", + message: error?.message ?? "You are not authorized to access this resource", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const ForbiddenRequestError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.INFO, statusCode: error?.statusCode ?? 403, - type: error?.type ?? 'forbidden', - message: error?.message ?? 'You are not allowed to access this resource', + type: error?.type ?? "forbidden", + message: error?.message ?? "You are not allowed to access this resource", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const BadRequestError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.INFO, statusCode: error?.statusCode ?? 400, - type: error?.type ?? 'bad_request', - message: error?.message ?? 'The request is invalid or cannot be served', + type: error?.type ?? "bad_request", + message: error?.message ?? "The request is invalid or cannot be served", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const InternalServerError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 500, - type: error?.type ?? 'internal_server_error', - message: error?.message ?? 'The server encountered an error while processing the request', + type: error?.type ?? "internal_server_error", + message: error?.message ?? "The server encountered an error while processing the request", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const ServiceUnavailableError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 503, - type: error?.type ?? 'service_unavailable', - message: error?.message ?? 'The service is currently unavailable. Please try again later.', + type: error?.type ?? "service_unavailable", + message: error?.message ?? "The service is currently unavailable. Please try again later.", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const ValidationError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 400, - type: error?.type ?? 'validation_error', - message: error?.message ?? 'The request failed validation', + type: error?.type ?? "validation_error", + message: error?.message ?? "The request failed validation", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[INTEGRATION AUTH ERRORS]<----- export const IntegrationAuthNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'integration_auth_not_found_error', - message: error?.message ?? 'The requested integration authorization was not found', + type: error?.type ?? "integration_auth_not_found_error", + message: error?.message ?? "The requested integration authorization was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[INTEGRATION ERRORS]<----- export const IntegrationNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'integration_not_found_error', - message: error?.message ?? 'The requested integration was not found', + type: error?.type ?? "integration_not_found_error", + message: error?.message ?? "The requested integration was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[WORKSPACE ERRORS]<----- export const WorkspaceNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'workspace_not_found_error', - message: error?.message ?? 'The requested workspace was not found', + type: error?.type ?? "workspace_not_found_error", + message: error?.message ?? "The requested workspace was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[WORKSPACE MEMBERSHIP ERRORS]<----- export const MembershipNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'workspace_membership_not_found_error', - message: error?.message ?? 'The requested membership was not found', + type: error?.type ?? "workspace_membership_not_found_error", + message: error?.message ?? "The requested membership was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[ORGANIZATION ERRORS]<----- export const OrganizationNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'organization_not_found_error', - message: error?.message ?? 'The requested organization was not found', + type: error?.type ?? "organization_not_found_error", + message: error?.message ?? "The requested organization was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[MEMBERSHIP ORGANIZATION ERRORS]<----- export const MembershipOrgNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'organization_membership_not_found_error', - message: error?.message ?? 'The requested organization membership was not found', + type: error?.type ?? "organization_membership_not_found_error", + message: error?.message ?? "The requested organization membership was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[ACCOUNT ERRORS]<----- export const AccountNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'account_not_found_error', - message: error?.message ?? 'The requested account was not found', + type: error?.type ?? "account_not_found_error", + message: error?.message ?? "The requested account was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[SECRET ERRORS]<----- export const SecretNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'secret_not_found_error', - message: error?.message ?? 'The requested secret was not found', + type: error?.type ?? "secret_not_found_error", + message: error?.message ?? "The requested secret was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[SECRET BLIND INDEX DATA ERRORS]<----- export const SecretBlindIndexDataNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'secret_blind_index_data_not_found_error', - message: error?.message ?? 'The requested secret was not found', + type: error?.type ?? "secret_blind_index_data_not_found_error", + message: error?.message ?? "The requested secret was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[SECRET SNAPSHOT ERRORS]<----- export const SecretSnapshotNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'secret_snapshot_not_found_error', - message: error?.message ?? 'The requested secret snapshot was not found', + type: error?.type ?? "secret_snapshot_not_found_error", + message: error?.message ?? "The requested secret snapshot was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[ACTION ERRORS]<----- export const ActionNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'action_not_found_error', - message: error?.message ?? 'The requested action was not found', + type: error?.type ?? "action_not_found_error", + message: error?.message ?? "The requested action was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[SERVICE TOKEN DATA ERRORS]<----- export const ServiceTokenDataNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'service_token_data_not_found_error', - message: error?.message ?? 'The requested service token data was not found', + type: error?.type ?? "service_token_data_not_found_error", + message: error?.message ?? "The requested service token data was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }) //* ----->[API KEY DATA ERRORS]<----- export const APIKeyDataNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'api_key_data_not_found_error', - message: error?.message ?? 'The requested service token data was not found', + type: error?.type ?? "api_key_data_not_found_error", + message: error?.message ?? "The requested service token data was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); //* ----->[SERVICE_ACCOUNT ERRORS]<----- export const ServiceAccountNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'service_account_not_found_error', - message: error?.message ?? 'The requested service account was not found', + type: error?.type ?? "service_account_not_found_error", + message: error?.message ?? "The requested service account was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }); export const ServiceAccountKeyNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'service_account_key_not_found_error', - message: error?.message ?? 'The requested service account key was not found', + type: error?.type ?? "service_account_key_not_found_error", + message: error?.message ?? "The requested service account key was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }) export const BotNotFoundError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 404, - type: error?.type ?? 'bot_not_found_error', - message: error?.message ?? 'The requested bot was not found', + type: error?.type ?? "bot_not_found_error", + message: error?.message ?? "The requested bot was not found", context: error?.context, - stack: error?.stack + stack: error?.stack, }) //* ----->[MISC ERRORS]<----- diff --git a/backend/src/utils/logger.ts b/backend/src/utils/logger.ts index 15335a619..9673f1115 100644 --- a/backend/src/utils/logger.ts +++ b/backend/src/utils/logger.ts @@ -1,7 +1,7 @@ /* eslint-disable no-console */ -import { createLogger, format, transports } from 'winston'; -import LokiTransport from 'winston-loki'; -import { getLokiHost, getNodeEnv } from '../config'; +import { createLogger, format, transports } from "winston"; +import LokiTransport from "winston-loki"; +import { getLokiHost, getNodeEnv } from "../config"; const { combine, colorize, label, printf, splat, timestamp } = format; @@ -13,7 +13,7 @@ const logFormat = (prefix: string) => combine( ); const createLoggerWithLabel = async (level: string, label: string) => { - const _level = level.toLowerCase() || 'info' + const _level = level.toLowerCase() || "info" //* Always add Console output to transports const _transports: any[] = [ new transports.Console({ @@ -21,8 +21,8 @@ const createLoggerWithLabel = async (level: string, label: string) => { colorize(), logFormat(label), // format.json() - ) - }) + ), + }), ] //* Add LokiTransport if it's enabled if((await getLokiHost()) !== undefined){ @@ -40,9 +40,9 @@ const createLoggerWithLabel = async (level: string, label: string) => { labels: { app: process.env.npm_package_name, version: process.env.npm_package_version, - environment: await getNodeEnv() + environment: await getNodeEnv(), }, - onConnectionError: (err: Error)=> console.error('Connection error while connecting to Loki Server.\n', err) + onConnectionError: (err: Error)=> console.error("Connection error while connecting to Loki Server.\n", err), }) ) } @@ -53,15 +53,15 @@ const createLoggerWithLabel = async (level: string, label: string) => { transports: _transports, format: format.combine( logFormat(label), - format.metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }) - ) + format.metadata({ fillExcept: ["message", "level", "timestamp", "label"] }) + ), }); } -export const getLogger = async (loggerName: 'backend-main' | 'database') => { +export const getLogger = async (loggerName: "backend-main" | "database") => { const logger = { - "backend-main": await createLoggerWithLabel('info', '[IFSC:backend-main]'), - "database": await createLoggerWithLabel('info', '[IFSC:database]'), + "backend-main": await createLoggerWithLabel("info", "[IFSC:backend-main]"), + "database": await createLoggerWithLabel("info", "[IFSC:database]"), } return logger[loggerName] } diff --git a/backend/src/utils/posthog.ts b/backend/src/utils/posthog.ts index 85a411ca7..06c404888 100644 --- a/backend/src/utils/posthog.ts +++ b/backend/src/utils/posthog.ts @@ -7,7 +7,7 @@ export const getChannelFromUserAgent = function (userAgent: string | undefined) return "cli" } else if (userAgent == K8_OPERATOR_AGENT_NAME) { return "k8-operator" - } else if (userAgent.toLowerCase().includes('mozilla')) { + } else if (userAgent.toLowerCase().includes("mozilla")) { return "web" } else { return "other" diff --git a/backend/src/utils/requestError.ts b/backend/src/utils/requestError.ts index 570ed132e..0c4e093b2 100644 --- a/backend/src/utils/requestError.ts +++ b/backend/src/utils/requestError.ts @@ -1,5 +1,5 @@ -import { Request } from 'express' -import { getVerboseErrorOutput } from '../config'; +import { Request } from "express" +import { getVerboseErrorOutput } from "../config"; export enum LogLevel { DEBUG = 100, @@ -44,7 +44,7 @@ export default class RequestError extends Error{ if(stack) this.stack = stack else Error.captureStackTrace(this, this.constructor) - this.stacktrace = this.stack?.split('\n') + this.stacktrace = this.stack?.split("\n") } static convertFrom(error: Error) { @@ -52,13 +52,13 @@ export default class RequestError extends Error{ return new RequestError({ logLevel: LogLevel.ERROR, statusCode: 500, - type: 'internal_server_error', - message: 'This error was not handled by error handler. Please report this incident to the staff', + type: "internal_server_error", + message: "This error was not handled by error handler. Please report this incident to the staff", context: { message: error.message, - name: error.name + name: error.name, }, - stack: error.stack + stack: error.stack, }) } @@ -66,7 +66,7 @@ export default class RequestError extends Error{ get levelName(){ return this._logName } withTags(...tags: string[]|number[]){ - this.context['tags'] = Object.assign(tags, this.context['tags']) + this.context["tags"] = Object.assign(tags, this.context["tags"]) return this } @@ -83,14 +83,14 @@ export default class RequestError extends Error{ public async format(req: Request){ let _context = Object.assign({ - stacktrace: this.stacktrace + stacktrace: this.stacktrace, }, this.context) //* Omit sensitive information from context that can leak internal workings of this program if user is not developer if(!(await getVerboseErrorOutput())){ _context = this._omit(_context, [ - 'stacktrace', - 'exception', + "stacktrace", + "exception", ]) } @@ -102,9 +102,9 @@ export default class RequestError extends Error{ level_name: this.levelName, status_code: this.statusCode, datetime_iso: new Date().toISOString(), - application: process.env.npm_package_name || 'unknown', + application: process.env.npm_package_name || "unknown", request_id: req.headers["Request-Id"], - extra: this.extra + extra: this.extra, } return formatObject diff --git a/backend/src/utils/setup/backfillData.ts b/backend/src/utils/setup/backfillData.ts index af05cfab7..a77d3ee27 100644 --- a/backend/src/utils/setup/backfillData.ts +++ b/backend/src/utils/setup/backfillData.ts @@ -5,22 +5,22 @@ import { encryptSymmetric128BitHexKeyUTF8 } from "../crypto"; import { EESecretService } from "../../ee/services"; import { ISecretVersion, SecretSnapshot, SecretVersion } from "../../ee/models"; import { - Secret, - ISecret, - SecretBlindIndexData, - Workspace, - Bot, BackupPrivateKey, - IntegrationAuth, - ServiceTokenData, + Bot, + ISecret, Integration, + IntegrationAuth, + Secret, + SecretBlindIndexData, + ServiceTokenData, + Workspace, } from "../../models"; import { generateKeyPair } from "../../utils/crypto"; import { client, getEncryptionKey, getRootEncryptionKey } from "../../config"; import { ALGORITHM_AES_256_GCM, - ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64, + ENCODING_SCHEME_UTF8, } from "../../variables"; import { InternalServerError } from "../errors"; diff --git a/backend/src/utils/setup/index.ts b/backend/src/utils/setup/index.ts index d7f333b17..16d9ee1ae 100644 --- a/backend/src/utils/setup/index.ts +++ b/backend/src/utils/setup/index.ts @@ -7,24 +7,24 @@ import { createTestUserForDevelopment } from "../addDevelopmentUser"; // eslint-disable-next-line @typescript-eslint/no-var-requires import { validateEncryptionKeysConfig } from "./validateConfig"; import { - backfillSecretVersions, backfillBots, - backfillSecretBlindIndexData, backfillEncryptionMetadata, - backfillSecretFolders, - backfillServiceToken, backfillIntegration, + backfillSecretBlindIndexData, + backfillSecretFolders, + backfillSecretVersions, + backfillServiceToken, } from "./backfillData"; import { reencryptBotPrivateKeys, reencryptSecretBlindIndexDataSalts, } from "./reencryptData"; import { - getNodeEnv, - getMongoURL, - getSentryDSN, - getClientSecretGoogle, getClientIdGoogle, + getClientSecretGoogle, + getMongoURL, + getNodeEnv, + getSentryDSN, } from "../../config"; import { initializePassport } from "../auth"; diff --git a/backend/src/utils/setup/reencryptData.ts b/backend/src/utils/setup/reencryptData.ts index 0741b44f4..7ea5db202 100644 --- a/backend/src/utils/setup/reencryptData.ts +++ b/backend/src/utils/setup/reencryptData.ts @@ -2,19 +2,19 @@ import { Bot, IBot, ISecretBlindIndexData, - SecretBlindIndexData -} from '../../models'; -import { decryptSymmetric128BitHexKeyUTF8 } from '../../utils/crypto'; + SecretBlindIndexData, +} from "../../models"; +import { decryptSymmetric128BitHexKeyUTF8 } from "../../utils/crypto"; import { client, getEncryptionKey, - getRootEncryptionKey -} from '../../config'; + getRootEncryptionKey, +} from "../../config"; import { ALGORITHM_AES_256_GCM, + ENCODING_SCHEME_BASE64, ENCODING_SCHEME_UTF8, - ENCODING_SCHEME_BASE64 -} from '../../variables'; +} from "../../variables"; /** * Re-encrypt bot private keys from hex 128-bit ENCRYPTION_KEY @@ -28,8 +28,8 @@ export const reencryptBotPrivateKeys = async () => { // 1: re-encrypt bot private keys under ROOT_ENCRYPTION_KEY const bots = await Bot.find({ algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 - }).select('+encryptedPrivateKey iv tag algorithm keyEncoding'); + keyEncoding: ENCODING_SCHEME_UTF8, + }).select("+encryptedPrivateKey iv tag algorithm keyEncoding"); if (bots.length === 0) return; @@ -40,28 +40,28 @@ export const reencryptBotPrivateKeys = async () => { ciphertext: bot.encryptedPrivateKey, iv: bot.iv, tag: bot.tag, - key: encryptionKey + key: encryptionKey, }); const { ciphertext: encryptedPrivateKey, iv, - tag + tag, } = client.encryptSymmetric(privateKey, rootEncryptionKey); return ({ updateOne: { filter: { - _id: bot._id + _id: bot._id, }, update: { encryptedPrivateKey, iv, tag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_BASE64 - } - } + keyEncoding: ENCODING_SCHEME_BASE64, + }, + }, }) }) ); @@ -81,8 +81,8 @@ export const reencryptSecretBlindIndexDataSalts = async () => { if (encryptionKey && rootEncryptionKey) { const secretBlindIndexData = await SecretBlindIndexData.find({ algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 - }).select('+encryptedSaltCiphertext +saltIV +saltTag +algorithm +keyEncoding'); + keyEncoding: ENCODING_SCHEME_UTF8, + }).select("+encryptedSaltCiphertext +saltIV +saltTag +algorithm +keyEncoding"); if (secretBlindIndexData.length == 0) return; @@ -93,28 +93,28 @@ export const reencryptSecretBlindIndexDataSalts = async () => { ciphertext: secretBlindIndexDatum.encryptedSaltCiphertext, iv: secretBlindIndexDatum.saltIV, tag: secretBlindIndexDatum.saltTag, - key: encryptionKey + key: encryptionKey, }); const { ciphertext: encryptedSaltCiphertext, iv: saltIV, - tag: saltTag + tag: saltTag, } = client.encryptSymmetric(salt, rootEncryptionKey); return ({ updateOne: { filter: { - _id: secretBlindIndexDatum._id + _id: secretBlindIndexDatum._id, }, update: { encryptedSaltCiphertext, saltIV, saltTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_BASE64 - } - } + keyEncoding: ENCODING_SCHEME_BASE64, + }, + }, }) }) ); diff --git a/backend/src/utils/setup/validateConfig.ts b/backend/src/utils/setup/validateConfig.ts index f8ebd3c17..3a3974791 100644 --- a/backend/src/utils/setup/validateConfig.ts +++ b/backend/src/utils/setup/validateConfig.ts @@ -1,10 +1,10 @@ import { getEncryptionKey, - getRootEncryptionKey -} from '../../config'; + getRootEncryptionKey, +} from "../../config"; import { - InternalServerError -} from '../../utils/errors'; + InternalServerError, +} from "../../utils/errors"; /** * Validate ENCRYPTION_KEY and ROOT_ENCRYPTION_KEY. Specifically: @@ -26,7 +26,7 @@ export const validateEncryptionKeysConfig = async () => { (encryptionKey === undefined || encryptionKey === "") && (rootEncryptionKey === undefined || rootEncryptionKey === "") ) throw InternalServerError({ - message: "Failed to find required root encryption key environment variable. Please make sure that you're passing in a ROOT_ENCRYPTION_KEY environment variable." + message: "Failed to find required root encryption key environment variable. Please make sure that you're passing in a ROOT_ENCRYPTION_KEY environment variable.", }); // if (encryptionKey && encryptionKey !== '') { @@ -44,18 +44,18 @@ export const validateEncryptionKeysConfig = async () => { // }); // } - if (rootEncryptionKey && rootEncryptionKey !== '') { + if (rootEncryptionKey && rootEncryptionKey !== "") { // validate [rootEncryptionKey] - const keyBuffer = Buffer.from(rootEncryptionKey, 'base64') - const decoded = keyBuffer.toString('base64'); + const keyBuffer = Buffer.from(rootEncryptionKey, "base64") + const decoded = keyBuffer.toString("base64"); if (decoded !== rootEncryptionKey) throw InternalServerError({ - message: 'Failed to validate that the root encryption key is correctly encoded in base64' + message: "Failed to validate that the root encryption key is correctly encoded in base64", }); if (keyBuffer.length !== 32) throw InternalServerError({ - message: 'Failed to validate that the encryption key is a 256-bit base64 string' + message: "Failed to validate that the encryption key is a 256-bit base64 string", }); } } \ No newline at end of file diff --git a/backend/src/validation/bot.ts b/backend/src/validation/bot.ts index 7104eec33..7e19ca770 100644 --- a/backend/src/validation/bot.ts +++ b/backend/src/validation/bot.ts @@ -1,25 +1,25 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IUser, + Bot, IServiceAccount, IServiceTokenData, - Bot, - User, + IUser, ServiceAccount, - ServiceTokenData -} from '../models'; -import { validateServiceAccountClientForWorkspace } from './serviceAccount'; -import { validateUserClientForWorkspace } from './user'; + ServiceTokenData, + User, +} from "../models"; +import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; +import { validateUserClientForWorkspace } from "./user"; import { + BotNotFoundError, UnauthorizedRequestError, - BotNotFoundError -} from '../utils/errors'; +} from "../utils/errors"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; /** * Validate authenticated clients for bot with id [botId] based diff --git a/backend/src/validation/index.ts b/backend/src/validation/index.ts index 177c716ea..4cc25450f 100644 --- a/backend/src/validation/index.ts +++ b/backend/src/validation/index.ts @@ -1,11 +1,11 @@ -export * from './user'; -export * from './workspace'; -export * from './bot'; -export * from './integration'; -export * from './integrationAuth'; -export * from './membership'; -export * from './membershipOrg'; -export * from './organization'; -export * from './secrets'; -export * from './serviceAccount'; -export * from './serviceTokenData'; \ No newline at end of file +export * from "./user"; +export * from "./workspace"; +export * from "./bot"; +export * from "./integration"; +export * from "./integrationAuth"; +export * from "./membership"; +export * from "./membershipOrg"; +export * from "./organization"; +export * from "./secrets"; +export * from "./serviceAccount"; +export * from "./serviceTokenData"; \ No newline at end of file diff --git a/backend/src/validation/integration.ts b/backend/src/validation/integration.ts index 5b2f4ad3c..3f39a87b6 100644 --- a/backend/src/validation/integration.ts +++ b/backend/src/validation/integration.ts @@ -1,28 +1,28 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IUser, IServiceAccount, IServiceTokenData, + IUser, Integration, IntegrationAuth, - User, ServiceAccount, - ServiceTokenData -} from '../models'; -import { validateServiceAccountClientForWorkspace } from './serviceAccount'; -import { validateUserClientForWorkspace } from './user'; -import { IntegrationService } from '../services'; + ServiceTokenData, + User, +} from "../models"; +import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; +import { validateUserClientForWorkspace } from "./user"; +import { IntegrationService } from "../services"; import { - IntegrationNotFoundError, IntegrationAuthNotFoundError, - UnauthorizedRequestError -} from '../utils/errors'; + IntegrationNotFoundError, + UnauthorizedRequestError, +} from "../utils/errors"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; /** * Validate authenticated clients for integration with id [integrationId] based @@ -37,14 +37,14 @@ import { export const validateClientForIntegration = async ({ authData, integrationId, - acceptedRoles + acceptedRoles, }: { authData: { authMode: string; authPayload: IUser | IServiceAccount | IServiceTokenData; }; integrationId: Types.ObjectId; - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; }) => { const integration = await Integration.findById(integrationId); @@ -53,20 +53,20 @@ export const validateClientForIntegration = async ({ const integrationAuth = await IntegrationAuth .findById(integration.integrationAuth) .select( - '+refreshCiphertext +refreshIV +refreshTag +accessCiphertext +accessIV +accessTag +accessExpiresAt' + "+refreshCiphertext +refreshIV +refreshTag +accessCiphertext +accessIV +accessTag +accessExpiresAt" ); if (!integrationAuth) throw IntegrationAuthNotFoundError(); const accessToken = (await IntegrationService.getIntegrationAuthAccess({ - integrationAuthId: integrationAuth._id + integrationAuthId: integrationAuth._id, })).accessToken; if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: integration.workspace, - acceptedRoles + acceptedRoles, }); return ({ integration, accessToken }); @@ -75,7 +75,7 @@ export const validateClientForIntegration = async ({ if (authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && authData.authPayload instanceof ServiceAccount) { await validateServiceAccountClientForWorkspace({ serviceAccount: authData.authPayload, - workspaceId: integration.workspace + workspaceId: integration.workspace, }); return ({ integration, accessToken }); @@ -83,7 +83,7 @@ export const validateClientForIntegration = async ({ if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) { throw UnauthorizedRequestError({ - message: 'Failed service token authorization for integration' + message: "Failed service token authorization for integration", }); } @@ -91,13 +91,13 @@ export const validateClientForIntegration = async ({ await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: integration.workspace, - acceptedRoles + acceptedRoles, }); return ({ integration, accessToken }); } throw UnauthorizedRequestError({ - message: 'Failed client authorization for integration' + message: "Failed client authorization for integration", }); } \ No newline at end of file diff --git a/backend/src/validation/integrationAuth.ts b/backend/src/validation/integrationAuth.ts index e93af154d..fa77f3d62 100644 --- a/backend/src/validation/integrationAuth.ts +++ b/backend/src/validation/integrationAuth.ts @@ -1,27 +1,27 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IntegrationAuth, - IUser, - User, IServiceAccount, - ServiceAccount, IServiceTokenData, + IUser, + IWorkspace, + IntegrationAuth, + ServiceAccount, ServiceTokenData, - IWorkspace -} from '../models'; + User, +} from "../models"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; import { IntegrationAuthNotFoundError, - UnauthorizedRequestError -} from '../utils/errors'; -import { IntegrationService } from '../services'; -import { validateUserClientForWorkspace } from './user'; -import { validateServiceAccountClientForWorkspace } from './serviceAccount'; + UnauthorizedRequestError, +} from "../utils/errors"; +import { IntegrationService } from "../services"; +import { validateUserClientForWorkspace } from "./user"; +import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; /** * Validate authenticated clients for integration authorization with id [integrationAuthId] based @@ -36,22 +36,22 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; authData, integrationAuthId, acceptedRoles, - attachAccessToken + attachAccessToken, }: { authData: { authMode: string; authPayload: IUser | IServiceAccount | IServiceTokenData; }; integrationAuthId: Types.ObjectId; - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; attachAccessToken?: boolean; }) => { const integrationAuth = await IntegrationAuth .findById(integrationAuthId) - .populate<{ workspace: IWorkspace }>('workspace') + .populate<{ workspace: IWorkspace }>("workspace") .select( - '+refreshCiphertext +refreshIV +refreshTag +accessCiphertext +accessIV +accessTag +accessExpiresAt' + "+refreshCiphertext +refreshIV +refreshTag +accessCiphertext +accessIV +accessTag +accessExpiresAt" ); if (!integrationAuth) throw IntegrationAuthNotFoundError(); @@ -59,7 +59,7 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; let accessToken, accessId; if (attachAccessToken) { const access = (await IntegrationService.getIntegrationAuthAccess({ - integrationAuthId: integrationAuth._id + integrationAuthId: integrationAuth._id, })); accessToken = access.accessToken; @@ -70,7 +70,7 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: integrationAuth.workspace._id, - acceptedRoles + acceptedRoles, }); return ({ integrationAuth, accessToken, accessId }); @@ -79,7 +79,7 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; if (authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && authData.authPayload instanceof ServiceAccount) { await validateServiceAccountClientForWorkspace({ serviceAccount: authData.authPayload, - workspaceId: integrationAuth.workspace._id + workspaceId: integrationAuth.workspace._id, }); return ({ integrationAuth, accessToken, accessId }); @@ -87,7 +87,7 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) { throw UnauthorizedRequestError({ - message: 'Failed service token authorization for integration authorization' + message: "Failed service token authorization for integration authorization", }); } @@ -95,17 +95,17 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: integrationAuth.workspace._id, - acceptedRoles + acceptedRoles, }); return ({ integrationAuth, accessToken, accessId }); } throw UnauthorizedRequestError({ - message: 'Failed client authorization for integration authorization' + message: "Failed client authorization for integration authorization", }); } export { - validateClientForIntegrationAuth + validateClientForIntegrationAuth, }; \ No newline at end of file diff --git a/backend/src/validation/membership.ts b/backend/src/validation/membership.ts index ab4f8dc76..aee5f8bca 100644 --- a/backend/src/validation/membership.ts +++ b/backend/src/validation/membership.ts @@ -1,26 +1,26 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IUser, IServiceAccount, IServiceTokenData, + IUser, Membership, - User, ServiceAccount, - ServiceTokenData -} from '../models'; -import { validateServiceAccountClientForWorkspace } from './serviceAccount'; -import { validateUserClientForWorkspace } from './user'; -import { validateServiceTokenDataClientForWorkspace } from './serviceTokenData'; + ServiceTokenData, + User, +} from "../models"; +import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; +import { validateUserClientForWorkspace } from "./user"; +import { validateServiceTokenDataClientForWorkspace } from "./serviceTokenData"; import { MembershipNotFoundError, - UnauthorizedRequestError -} from '../utils/errors'; + UnauthorizedRequestError, +} from "../utils/errors"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; /** * Validate authenticated clients for membership with id [membershipId] based @@ -34,27 +34,27 @@ import { export const validateClientForMembership = async ({ authData, membershipId, - acceptedRoles + acceptedRoles, }: { authData: { authMode: string; authPayload: IUser | IServiceAccount | IServiceTokenData; }; membershipId: Types.ObjectId; - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; }) => { const membership = await Membership.findById(membershipId); if (!membership) throw MembershipNotFoundError({ - message: 'Failed to find membership' + message: "Failed to find membership", }); if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: membership.workspace, - acceptedRoles + acceptedRoles, }); return membership; @@ -63,7 +63,7 @@ export const validateClientForMembership = async ({ if (authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && authData.authPayload instanceof ServiceAccount) { await validateServiceAccountClientForWorkspace({ serviceAccount: authData.authPayload, - workspaceId: membership.workspace + workspaceId: membership.workspace, }); return membership; @@ -72,7 +72,7 @@ export const validateClientForMembership = async ({ if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) { await validateServiceTokenDataClientForWorkspace({ serviceTokenData: authData.authPayload, - workspaceId: new Types.ObjectId(membership.workspace) + workspaceId: new Types.ObjectId(membership.workspace), }); return membership; @@ -82,13 +82,13 @@ export const validateClientForMembership = async ({ await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: membership.workspace, - acceptedRoles + acceptedRoles, }); return membership; } throw UnauthorizedRequestError({ - message: 'Failed client authorization for membership' + message: "Failed client authorization for membership", }); } \ No newline at end of file diff --git a/backend/src/validation/membershipOrg.ts b/backend/src/validation/membershipOrg.ts index 7fd86a374..444f2aa2a 100644 --- a/backend/src/validation/membershipOrg.ts +++ b/backend/src/validation/membershipOrg.ts @@ -1,26 +1,26 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IUser, IServiceAccount, IServiceTokenData, + IUser, MembershipOrg, - User, ServiceAccount, - ServiceTokenData -} from '../models'; + ServiceTokenData, + User, +} from "../models"; import { - validateMembershipOrg -} from '../helpers/membershipOrg'; + validateMembershipOrg, +} from "../helpers/membershipOrg"; import { MembershipOrgNotFoundError, - UnauthorizedRequestError -} from '../utils/errors'; + UnauthorizedRequestError, +} from "../utils/errors"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; /** * Validate authenticated clients for organization membership with id [membershipOrgId] based @@ -35,20 +35,20 @@ export const validateClientForMembershipOrg = async ({ authData, membershipOrgId, acceptedRoles, - acceptedStatuses + acceptedStatuses, }: { authData: { authMode: string; authPayload: IUser | IServiceAccount | IServiceTokenData; }; membershipOrgId: Types.ObjectId; - acceptedRoles: Array<'owner' | 'admin' | 'member'>; - acceptedStatuses: Array<'invited' | 'accepted'>; + acceptedRoles: Array<"owner" | "admin" | "member">; + acceptedStatuses: Array<"invited" | "accepted">; }) => { const membershipOrg = await MembershipOrg.findById(membershipOrgId); if (!membershipOrg) throw MembershipOrgNotFoundError({ - message: 'Failed to find organization membership ' + message: "Failed to find organization membership ", }); if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { @@ -56,7 +56,7 @@ export const validateClientForMembershipOrg = async ({ userId: authData.authPayload._id, organizationId: membershipOrg.organization, acceptedRoles, - acceptedStatuses + acceptedStatuses, }); return membershipOrg; @@ -64,7 +64,7 @@ export const validateClientForMembershipOrg = async ({ if (authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && authData.authPayload instanceof ServiceAccount) { if (!authData.authPayload.organization.equals(membershipOrg.organization)) throw UnauthorizedRequestError({ - message: 'Failed service account client authorization for organization membership' + message: "Failed service account client authorization for organization membership", }); return membershipOrg; @@ -72,7 +72,7 @@ export const validateClientForMembershipOrg = async ({ if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) { throw UnauthorizedRequestError({ - message: 'Failed service account client authorization for organization membership' + message: "Failed service account client authorization for organization membership", }); } @@ -81,13 +81,13 @@ export const validateClientForMembershipOrg = async ({ userId: authData.authPayload._id, organizationId: membershipOrg.organization, acceptedRoles, - acceptedStatuses + acceptedStatuses, }); return membershipOrg; } throw UnauthorizedRequestError({ - message: 'Failed client authorization for organization membership' + message: "Failed client authorization for organization membership", }); } \ No newline at end of file diff --git a/backend/src/validation/organization.ts b/backend/src/validation/organization.ts index 239517b75..35e0aab04 100644 --- a/backend/src/validation/organization.ts +++ b/backend/src/validation/organization.ts @@ -1,25 +1,25 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IUser, IServiceAccount, IServiceTokenData, + IUser, Organization, - User, ServiceAccount, - ServiceTokenData -} from '../models'; + ServiceTokenData, + User, +} from "../models"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; import { OrganizationNotFoundError, - UnauthorizedRequestError -} from '../utils/errors'; -import { validateUserClientForOrganization } from './user'; -import { validateServiceAccountClientForOrganization } from './serviceAccount'; + UnauthorizedRequestError, +} from "../utils/errors"; +import { validateUserClientForOrganization } from "./user"; +import { validateServiceAccountClientForOrganization } from "./serviceAccount"; /** * Validate accepted clients for organization with id [organizationId] diff --git a/backend/src/validation/secrets.ts b/backend/src/validation/secrets.ts index 272fe4545..0de983dbe 100644 --- a/backend/src/validation/secrets.ts +++ b/backend/src/validation/secrets.ts @@ -1,26 +1,26 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { ISecret, Secret, - User, ServiceAccount, - ServiceTokenData -} from '../models'; -import { validateServiceAccountClientForWorkspace, validateServiceAccountClientForSecrets } from './serviceAccount'; -import { validateUserClientForSecret, validateUserClientForSecrets } from './user'; -import { validateServiceTokenDataClientForWorkspace, validateServiceTokenDataClientForSecrets } from './serviceTokenData'; -import { AuthData } from '../interfaces/middleware'; + ServiceTokenData, + User, +} from "../models"; +import { validateServiceAccountClientForSecrets, validateServiceAccountClientForWorkspace } from "./serviceAccount"; +import { validateUserClientForSecret, validateUserClientForSecrets } from "./user"; +import { validateServiceTokenDataClientForSecrets, validateServiceTokenDataClientForWorkspace } from "./serviceTokenData"; +import { AuthData } from "../interfaces/middleware"; import { + BadRequestError, SecretNotFoundError, UnauthorizedRequestError, - BadRequestError -} from '../utils/errors'; +} from "../utils/errors"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; +} from "../variables"; /** * Validate authenticated clients for secrets with id [secretId] based @@ -35,17 +35,17 @@ export const validateClientForSecret = async ({ authData, secretId, acceptedRoles, - requiredPermissions + requiredPermissions, }: { authData: AuthData; secretId: Types.ObjectId; - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; requiredPermissions: string[]; }) => { const secret = await Secret.findById(secretId); if (!secret) throw SecretNotFoundError({ - message: 'Failed to find secret' + message: "Failed to find secret", }); if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { @@ -53,7 +53,7 @@ export const validateClientForSecret = async ({ user: authData.authPayload, secret, acceptedRoles, - requiredPermissions + requiredPermissions, }); return secret; @@ -64,7 +64,7 @@ export const validateClientForSecret = async ({ serviceAccount: authData.authPayload, workspaceId: secret.workspace, environment: secret.environment, - requiredPermissions + requiredPermissions, }); return secret; @@ -74,7 +74,7 @@ export const validateClientForSecret = async ({ await validateServiceTokenDataClientForWorkspace({ serviceTokenData: authData.authPayload, workspaceId: secret.workspace, - environment: secret.environment + environment: secret.environment, }); return secret; @@ -85,14 +85,14 @@ export const validateClientForSecret = async ({ user: authData.authPayload, secret, acceptedRoles, - requiredPermissions + requiredPermissions, }); return secret; } throw UnauthorizedRequestError({ - message: 'Failed client authorization for secret' + message: "Failed client authorization for secret", }); } @@ -109,7 +109,7 @@ export const validateClientForSecret = async ({ export const validateClientForSecrets = async ({ authData, secretIds, - requiredPermissions + requiredPermissions, }: { authData: AuthData; secretIds: Types.ObjectId[]; @@ -120,19 +120,19 @@ export const validateClientForSecrets = async ({ secrets = await Secret.find({ _id: { - $in: secretIds - } + $in: secretIds, + }, }); if (secrets.length != secretIds.length) { - throw BadRequestError({ message: 'Failed to validate non-existent secrets' }) + throw BadRequestError({ message: "Failed to validate non-existent secrets" }) } if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { await validateUserClientForSecrets({ user: authData.authPayload, secrets, - requiredPermissions + requiredPermissions, }); return secrets; @@ -142,7 +142,7 @@ export const validateClientForSecrets = async ({ await validateServiceAccountClientForSecrets({ serviceAccount: authData.authPayload, secrets, - requiredPermissions + requiredPermissions, }); return secrets; @@ -152,7 +152,7 @@ export const validateClientForSecrets = async ({ await validateServiceTokenDataClientForSecrets({ serviceTokenData: authData.authPayload, secrets, - requiredPermissions + requiredPermissions, }); return secrets; @@ -162,13 +162,13 @@ export const validateClientForSecrets = async ({ await validateUserClientForSecrets({ user: authData.authPayload, secrets, - requiredPermissions + requiredPermissions, }); return secrets; } throw UnauthorizedRequestError({ - message: 'Failed client authorization for secrets resource' + message: "Failed client authorization for secrets resource", }); } \ No newline at end of file diff --git a/backend/src/validation/serviceAccount.ts b/backend/src/validation/serviceAccount.ts index 11997763c..78f2c9e69 100644 --- a/backend/src/validation/serviceAccount.ts +++ b/backend/src/validation/serviceAccount.ts @@ -1,35 +1,35 @@ -import _ from 'lodash'; -import { Types } from 'mongoose'; +import _ from "lodash"; +import { Types } from "mongoose"; import { - User, + IOrganization, + ISecret, + IServiceAccount, + IServiceTokenData, IUser, ServiceAccount, - IServiceAccount, + ServiceAccountWorkspacePermission, ServiceTokenData, - IServiceTokenData, - ISecret, - IOrganization, - ServiceAccountWorkspacePermission -} from '../models'; -import { validateUserClientForServiceAccount } from './user'; + User, +} from "../models"; +import { validateUserClientForServiceAccount } from "./user"; import { BadRequestError, + ServiceAccountNotFoundError, UnauthorizedRequestError, - ServiceAccountNotFoundError -} from '../utils/errors'; +} from "../utils/errors"; import { - PERMISSION_READ_SECRETS, - PERMISSION_WRITE_SECRETS, + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; + PERMISSION_READ_SECRETS, + PERMISSION_WRITE_SECRETS, +} from "../variables"; export const validateClientForServiceAccount = async ({ authData, serviceAccountId, - requiredPermissions + requiredPermissions, }: { authData: { authMode: string; @@ -42,7 +42,7 @@ export const validateClientForServiceAccount = async ({ if (!serviceAccount) { throw ServiceAccountNotFoundError({ - message: 'Failed to find service account' + message: "Failed to find service account", }); } @@ -50,7 +50,7 @@ export const validateClientForServiceAccount = async ({ await validateUserClientForServiceAccount({ user: authData.authPayload, serviceAccount, - requiredPermissions + requiredPermissions, }); return serviceAccount; @@ -60,7 +60,7 @@ export const validateClientForServiceAccount = async ({ await validateServiceAccountClientForServiceAccount({ serviceAccount: authData.authPayload, targetServiceAccount: serviceAccount, - requiredPermissions + requiredPermissions, }); return serviceAccount; @@ -68,7 +68,7 @@ export const validateClientForServiceAccount = async ({ if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) { throw UnauthorizedRequestError({ - message: 'Failed service token authorization for service account resource' + message: "Failed service token authorization for service account resource", }); } @@ -76,14 +76,14 @@ export const validateClientForServiceAccount = async ({ await validateUserClientForServiceAccount({ user: authData.authPayload, serviceAccount, - requiredPermissions + requiredPermissions, }); return serviceAccount; } throw UnauthorizedRequestError({ - message: 'Failed client authorization for service account resource' + message: "Failed client authorization for service account resource", }); } @@ -101,7 +101,7 @@ export const validateServiceAccountClientForWorkspace = async ({ serviceAccount, workspaceId, environment, - requiredPermissions + requiredPermissions, }: { serviceAccount: IServiceAccount; workspaceId: Types.ObjectId; @@ -115,11 +115,11 @@ export const validateServiceAccountClientForWorkspace = async ({ const permission = await ServiceAccountWorkspacePermission.findOne({ serviceAccount, workspace: new Types.ObjectId(workspaceId), - environment + environment, }); if (!permission) throw UnauthorizedRequestError({ - message: 'Failed service account authorization for the given workspace environment' + message: "Failed service account authorization for the given workspace environment", }); let runningIsDisallowed = false; @@ -137,7 +137,7 @@ export const validateServiceAccountClientForWorkspace = async ({ if (runningIsDisallowed) { throw UnauthorizedRequestError({ - message: `Failed permissions authorization for workspace environment action : ${requiredPermission}` + message: `Failed permissions authorization for workspace environment action : ${requiredPermission}`, }); } }); @@ -149,11 +149,11 @@ export const validateServiceAccountClientForWorkspace = async ({ const permission = await ServiceAccountWorkspacePermission.findOne({ serviceAccount, - workspace: new Types.ObjectId(workspaceId) + workspace: new Types.ObjectId(workspaceId), }); if (!permission) throw UnauthorizedRequestError({ - message: 'Failed service account authorization for the given workspace' + message: "Failed service account authorization for the given workspace", }); } } @@ -169,7 +169,7 @@ export const validateServiceAccountClientForWorkspace = async ({ export const validateServiceAccountClientForSecrets = async ({ serviceAccount, secrets, - requiredPermissions + requiredPermissions, }: { serviceAccount: IServiceAccount; secrets: ISecret[]; @@ -177,7 +177,7 @@ export const validateServiceAccountClientForSecrets = async ({ }) => { const permissions = await ServiceAccountWorkspacePermission.find({ - serviceAccount: serviceAccount._id + serviceAccount: serviceAccount._id, }); const permissionsObj = _.keyBy(permissions, (p) => { @@ -188,7 +188,7 @@ export const validateServiceAccountClientForSecrets = async ({ const permission = permissionsObj[`${secret.workspace.toString()}-${secret.environment}`]; if (!permission) throw BadRequestError({ - message: 'Failed to find any permission for the secret workspace and environment' + message: "Failed to find any permission for the secret workspace and environment", }); requiredPermissions?.forEach((requiredPermission: string) => { @@ -207,7 +207,7 @@ export const validateServiceAccountClientForSecrets = async ({ if (runningIsDisallowed) { throw UnauthorizedRequestError({ - message: `Failed permissions authorization for workspace environment action : ${requiredPermission}` + message: `Failed permissions authorization for workspace environment action : ${requiredPermission}`, }); } }); @@ -226,7 +226,7 @@ export const validateServiceAccountClientForSecrets = async ({ export const validateServiceAccountClientForServiceAccount = ({ serviceAccount, targetServiceAccount, - requiredPermissions + requiredPermissions, }: { serviceAccount: IServiceAccount; targetServiceAccount: IServiceAccount; @@ -234,7 +234,7 @@ export const validateServiceAccountClientForServiceAccount = ({ }) => { if (!serviceAccount.organization.equals(targetServiceAccount.organization)) { throw UnauthorizedRequestError({ - message: 'Failed service account authorization for the given service account' + message: "Failed service account authorization for the given service account", }); } } @@ -247,14 +247,14 @@ export const validateServiceAccountClientForServiceAccount = ({ */ export const validateServiceAccountClientForOrganization = async ({ serviceAccount, - organization + organization, }: { serviceAccount: IServiceAccount; organization: IOrganization; }) => { if (!serviceAccount.organization.equals(organization._id)) { throw UnauthorizedRequestError({ - message: 'Failed service account authorization for the given organization' + message: "Failed service account authorization for the given organization", }); } } \ No newline at end of file diff --git a/backend/src/validation/serviceTokenData.ts b/backend/src/validation/serviceTokenData.ts index 8713e000f..0ade7f96e 100644 --- a/backend/src/validation/serviceTokenData.ts +++ b/backend/src/validation/serviceTokenData.ts @@ -1,25 +1,25 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { ISecret, - IServiceTokenData, - ServiceTokenData, - IUser, - User, IServiceAccount, + IServiceTokenData, + IUser, ServiceAccount, -} from '../models'; + ServiceTokenData, + User, +} from "../models"; import { + ServiceTokenDataNotFoundError, UnauthorizedRequestError, - ServiceTokenDataNotFoundError -} from '../utils/errors'; +} from "../utils/errors"; import { - AUTH_MODE_JWT, + AUTH_MODE_API_KEY, + AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; -import { validateUserClientForWorkspace } from './user'; -import { validateServiceAccountClientForWorkspace } from './serviceAccount'; +} from "../variables"; +import { validateUserClientForWorkspace } from "./user"; +import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; /** * Validate authenticated clients for service token with id [serviceTokenId] based @@ -32,29 +32,29 @@ import { validateServiceAccountClientForWorkspace } from './serviceAccount'; export const validateClientForServiceTokenData = async ({ authData, serviceTokenDataId, - acceptedRoles + acceptedRoles, }: { authData: { authMode: string; authPayload: IUser | IServiceAccount | IServiceTokenData; }; serviceTokenDataId: Types.ObjectId; - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; }) => { const serviceTokenData = await ServiceTokenData .findById(serviceTokenDataId) - .select('+encryptedKey +iv +tag') - .populate<{ user: IUser }>('user'); + .select("+encryptedKey +iv +tag") + .populate<{ user: IUser }>("user"); if (!serviceTokenData) throw ServiceTokenDataNotFoundError({ - message: 'Failed to find service token data' + message: "Failed to find service token data", }); if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: serviceTokenData.workspace, - acceptedRoles + acceptedRoles, }); return serviceTokenData; @@ -63,7 +63,7 @@ export const validateClientForServiceTokenData = async ({ if (authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && authData.authPayload instanceof ServiceAccount) { await validateServiceAccountClientForWorkspace({ serviceAccount: authData.authPayload, - workspaceId: serviceTokenData.workspace + workspaceId: serviceTokenData.workspace, }); return serviceTokenData; @@ -71,7 +71,7 @@ export const validateClientForServiceTokenData = async ({ if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) { throw UnauthorizedRequestError({ - message: 'Failed service token authorization for service token data' + message: "Failed service token authorization for service token data", }); } @@ -79,14 +79,14 @@ export const validateClientForServiceTokenData = async ({ await validateUserClientForWorkspace({ user: authData.authPayload, workspaceId: serviceTokenData.workspace, - acceptedRoles + acceptedRoles, }); return serviceTokenData; } throw UnauthorizedRequestError({ - message: 'Failed client authorization for service token data' + message: "Failed client authorization for service token data", }); } @@ -104,7 +104,7 @@ export const validateServiceTokenDataClientForWorkspace = async ({ serviceTokenData, workspaceId, environment, - requiredPermissions + requiredPermissions, }: { serviceTokenData: IServiceTokenData; workspaceId: Types.ObjectId; @@ -114,7 +114,7 @@ export const validateServiceTokenDataClientForWorkspace = async ({ if (!serviceTokenData.workspace.equals(workspaceId)) { // case: invalid workspaceId passed throw UnauthorizedRequestError({ - message: 'Failed service token authorization for the given workspace' + message: "Failed service token authorization for the given workspace", }); } @@ -124,14 +124,14 @@ export const validateServiceTokenDataClientForWorkspace = async ({ if (serviceTokenData.environment !== environment) { // case: invalid environment passed throw UnauthorizedRequestError({ - message: 'Failed service token authorization for the given workspace environment' + message: "Failed service token authorization for the given workspace environment", }); } requiredPermissions?.forEach((permission) => { if (!serviceTokenData.permissions.includes(permission)) { throw UnauthorizedRequestError({ - message: `Failed service token authorization for the given workspace environment action: ${permission}` + message: `Failed service token authorization for the given workspace environment action: ${permission}`, }); } }); @@ -149,7 +149,7 @@ export const validateServiceTokenDataClientForWorkspace = async ({ export const validateServiceTokenDataClientForSecrets = async ({ serviceTokenData, secrets, - requiredPermissions + requiredPermissions, }: { serviceTokenData: IServiceTokenData; secrets: ISecret[]; @@ -160,21 +160,21 @@ export const validateServiceTokenDataClientForSecrets = async ({ if (!serviceTokenData.workspace.equals(secret.workspace)) { // case: invalid workspaceId passed throw UnauthorizedRequestError({ - message: 'Failed service token authorization for the given workspace' + message: "Failed service token authorization for the given workspace", }); } if (serviceTokenData.environment !== secret.environment) { // case: invalid environment passed throw UnauthorizedRequestError({ - message: 'Failed service token authorization for the given workspace environment' + message: "Failed service token authorization for the given workspace environment", }); } requiredPermissions?.forEach((permission) => { if (!serviceTokenData.permissions.includes(permission)) { throw UnauthorizedRequestError({ - message: `Failed service token authorization for the given workspace environment action: ${permission}` + message: `Failed service token authorization for the given workspace environment action: ${permission}`, }); } }); diff --git a/backend/src/validation/user.ts b/backend/src/validation/user.ts index 4c412e52f..f1edad3bf 100644 --- a/backend/src/validation/user.ts +++ b/backend/src/validation/user.ts @@ -1,37 +1,37 @@ -import fs from 'fs'; -import path from 'path'; -import { Types } from 'mongoose'; +import fs from "fs"; +import path from "path"; +import { Types } from "mongoose"; import { - IUser, + IOrganization, ISecret, IServiceAccount, + IUser, Membership, - IOrganization, -} from '../models'; -import { validateMembership } from '../helpers/membership'; -import _ from 'lodash'; -import { BadRequestError, UnauthorizedRequestError, ValidationError } from '../utils/errors'; +} from "../models"; +import { validateMembership } from "../helpers/membership"; +import _ from "lodash"; +import { BadRequestError, UnauthorizedRequestError, ValidationError } from "../utils/errors"; import { - validateMembershipOrg -} from '../helpers/membershipOrg'; + validateMembershipOrg, +} from "../helpers/membershipOrg"; import { PERMISSION_READ_SECRETS, - PERMISSION_WRITE_SECRETS -} from '../variables'; + PERMISSION_WRITE_SECRETS, +} from "../variables"; /** * Validate that email [email] is not disposable * @param email - email to validate */ export const validateUserEmail = (email: string) => { - const emailDomain = email.split('@')[1]; + const emailDomain = email.split("@")[1]; const disposableEmails = fs.readFileSync( - path.resolve(__dirname, '../data/' + 'disposable_emails.txt'), - 'utf8' - ).split('\n'); + path.resolve(__dirname, "../data/" + "disposable_emails.txt"), + "utf8" + ).split("\n"); if (disposableEmails.includes(emailDomain)) throw ValidationError({ - message: 'Failed to validate email as non-disposable' + message: "Failed to validate email as non-disposable", }); } @@ -50,12 +50,12 @@ export const validateUserClientForWorkspace = async ({ workspaceId, environment, acceptedRoles, - requiredPermissions + requiredPermissions, }: { user: IUser; workspaceId: Types.ObjectId; environment?: string; - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; requiredPermissions?: string[]; }) => { @@ -63,7 +63,7 @@ export const validateUserClientForWorkspace = async ({ const membership = await validateMembership({ userId: user._id, workspaceId, - acceptedRoles + acceptedRoles, }); let runningIsDisallowed = false; @@ -81,7 +81,7 @@ export const validateUserClientForWorkspace = async ({ if (runningIsDisallowed) { throw UnauthorizedRequestError({ - message: `Failed permissions authorization for workspace environment action : ${requiredPermission}` + message: `Failed permissions authorization for workspace environment action : ${requiredPermission}`, }); } }); @@ -101,17 +101,17 @@ export const validateUserClientForSecret = async ({ user, secret, acceptedRoles, - requiredPermissions + requiredPermissions, }: { user: IUser; secret: ISecret; - acceptedRoles?: Array<'admin' | 'member'>; + acceptedRoles?: Array<"admin" | "member">; requiredPermissions?: string[]; }) => { const membership = await validateMembership({ userId: user._id, workspaceId: secret.workspace, - acceptedRoles + acceptedRoles, }); if (requiredPermissions?.includes(PERMISSION_WRITE_SECRETS)) { @@ -119,7 +119,7 @@ export const validateUserClientForSecret = async ({ if (isDisallowed) { throw UnauthorizedRequestError({ - message: 'You do not have the required permissions to perform this action' + message: "You do not have the required permissions to perform this action", }); } } @@ -136,7 +136,7 @@ export const validateUserClientForSecret = async ({ export const validateUserClientForSecrets = async ({ user, secrets, - requiredPermissions + requiredPermissions, }: { user: IUser; secrets: ISecret[]; @@ -146,14 +146,14 @@ export const validateUserClientForSecrets = async ({ // TODO: add acceptedRoles? const userMemberships = await Membership.find({ user: user._id }) - const userMembershipById = _.keyBy(userMemberships, 'workspace'); + const userMembershipById = _.keyBy(userMemberships, "workspace"); const workspaceIdsSet = new Set(userMemberships.map((m) => m.workspace.toString())); // for each secret check if the secret belongs to a workspace the user is a member of secrets.forEach((secret: ISecret) => { if (!workspaceIdsSet.has(secret.workspace.toString())) { throw BadRequestError({ - message: 'Failed authorization for the secret' + message: "Failed authorization for the secret", }); } @@ -163,7 +163,7 @@ export const validateUserClientForSecrets = async ({ if (isDisallowed) { throw UnauthorizedRequestError({ - message: 'You do not have the required permissions to perform this action' + message: "You do not have the required permissions to perform this action", }); } } @@ -181,7 +181,7 @@ export const validateUserClientForSecrets = async ({ export const validateUserClientForServiceAccount = async ({ user, serviceAccount, - requiredPermissions + requiredPermissions, }: { user: IUser; serviceAccount: IServiceAccount; @@ -194,7 +194,7 @@ export const validateUserClientForServiceAccount = async ({ userId: user._id, organizationId: serviceAccount.organization, acceptedRoles: [], - acceptedStatuses: [] + acceptedStatuses: [], }); } } @@ -209,18 +209,18 @@ export const validateUserClientForOrganization = async ({ user, organization, acceptedRoles, - acceptedStatuses + acceptedStatuses, }: { user: IUser; organization: IOrganization; - acceptedRoles: Array<'owner' | 'admin' | 'member'>; - acceptedStatuses: Array<'invited' | 'accepted'>; + acceptedRoles: Array<"owner" | "admin" | "member">; + acceptedStatuses: Array<"invited" | "accepted">; }) => { const membershipOrg = await validateMembershipOrg({ userId: user._id, organizationId: organization._id, acceptedRoles, - acceptedStatuses + acceptedStatuses, }); return membershipOrg; diff --git a/backend/src/validation/workspace.ts b/backend/src/validation/workspace.ts index 28c4a20ea..cdc2771f4 100644 --- a/backend/src/validation/workspace.ts +++ b/backend/src/validation/workspace.ts @@ -1,29 +1,29 @@ -import { Types } from 'mongoose'; +import { Types } from "mongoose"; import { - IUser, IServiceAccount, IServiceTokenData, - Workspace, - User, + IUser, + SecretBlindIndexData, ServiceAccount, ServiceTokenData, - SecretBlindIndexData -} from '../models'; -import { validateServiceAccountClientForWorkspace } from './serviceAccount'; -import { validateUserClientForWorkspace } from './user'; -import { validateServiceTokenDataClientForWorkspace } from './serviceTokenData'; + User, + Workspace, +} from "../models"; +import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; +import { validateUserClientForWorkspace } from "./user"; +import { validateServiceTokenDataClientForWorkspace } from "./serviceTokenData"; import { BadRequestError, UnauthorizedRequestError, - WorkspaceNotFoundError -} from '../utils/errors'; + WorkspaceNotFoundError, +} from "../utils/errors"; import { + AUTH_MODE_API_KEY, AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, - AUTH_MODE_API_KEY -} from '../variables'; -import { BotService } from '../services'; +} from "../variables"; +import { BotService } from "../services"; /** * Validate authenticated clients for workspace with id [workspaceId] based @@ -42,7 +42,7 @@ export const validateClientForWorkspace = async ({ acceptedRoles, requiredPermissions, requireBlindIndicesEnabled, - requireE2EEOff + requireE2EEOff, }: { authData: { authMode: string; @@ -50,7 +50,7 @@ export const validateClientForWorkspace = async ({ }; workspaceId: Types.ObjectId; environment?: string; - acceptedRoles: Array<'admin' | 'member'>; + acceptedRoles: Array<"admin" | "member">; requiredPermissions?: string[]; requireBlindIndicesEnabled: boolean; requireE2EEOff: boolean; @@ -58,7 +58,7 @@ export const validateClientForWorkspace = async ({ const workspace = await Workspace.findById(workspaceId); if (!workspace) throw WorkspaceNotFoundError({ - message: 'Failed to find workspace' + message: "Failed to find workspace", }); if (requireBlindIndicesEnabled) { @@ -67,11 +67,11 @@ export const validateClientForWorkspace = async ({ // and no admin has enabled it) const secretBlindIndexData = await SecretBlindIndexData.exists({ - workspace: new Types.ObjectId(workspaceId) + workspace: new Types.ObjectId(workspaceId), }); if (!secretBlindIndexData) throw UnauthorizedRequestError({ - message: 'Failed workspace authorization due to blind indices not being enabled' + message: "Failed workspace authorization due to blind indices not being enabled", }); } @@ -79,7 +79,7 @@ export const validateClientForWorkspace = async ({ const isWorkspaceE2EE = await BotService.getIsWorkspaceE2EE(workspaceId); if (isWorkspaceE2EE) throw BadRequestError({ - message: 'Failed workspace authorization due to end-to-end encryption not being disabled' + message: "Failed workspace authorization due to end-to-end encryption not being disabled", }); } @@ -89,7 +89,7 @@ export const validateClientForWorkspace = async ({ workspaceId, environment, acceptedRoles, - requiredPermissions + requiredPermissions, }); return ({ membership, workspace }); @@ -100,7 +100,7 @@ export const validateClientForWorkspace = async ({ serviceAccount: authData.authPayload, workspaceId, environment, - requiredPermissions + requiredPermissions, }); return {}; @@ -111,7 +111,7 @@ export const validateClientForWorkspace = async ({ serviceTokenData: authData.authPayload, workspaceId, environment, - requiredPermissions + requiredPermissions, }); return {}; @@ -123,13 +123,13 @@ export const validateClientForWorkspace = async ({ workspaceId, environment, acceptedRoles, - requiredPermissions + requiredPermissions, }); return ({ membership, workspace }); } throw UnauthorizedRequestError({ - message: 'Failed client authorization for workspace' + message: "Failed client authorization for workspace", }); } diff --git a/backend/src/variables/action.ts b/backend/src/variables/action.ts index 9d4fb18d9..033be15b0 100644 --- a/backend/src/variables/action.ts +++ b/backend/src/variables/action.ts @@ -1,6 +1,6 @@ -export const ACTION_LOGIN = 'login'; -export const ACTION_LOGOUT = 'logout'; -export const ACTION_ADD_SECRETS = 'addSecrets'; -export const ACTION_DELETE_SECRETS = 'deleteSecrets'; -export const ACTION_UPDATE_SECRETS = 'updateSecrets'; -export const ACTION_READ_SECRETS = 'readSecrets'; \ No newline at end of file +export const ACTION_LOGIN = "login"; +export const ACTION_LOGOUT = "logout"; +export const ACTION_ADD_SECRETS = "addSecrets"; +export const ACTION_DELETE_SECRETS = "deleteSecrets"; +export const ACTION_UPDATE_SECRETS = "updateSecrets"; +export const ACTION_READ_SECRETS = "readSecrets"; \ No newline at end of file diff --git a/backend/src/variables/authentication.ts b/backend/src/variables/authentication.ts index ac19d2756..38bfdfc2c 100644 --- a/backend/src/variables/authentication.ts +++ b/backend/src/variables/authentication.ts @@ -1,4 +1,4 @@ -export const AUTH_MODE_JWT = 'jwt'; -export const AUTH_MODE_SERVICE_ACCOUNT = 'serviceAccount'; -export const AUTH_MODE_SERVICE_TOKEN = 'serviceToken'; -export const AUTH_MODE_API_KEY = 'apiKey'; // TODO: deprecate \ No newline at end of file +export const AUTH_MODE_JWT = "jwt"; +export const AUTH_MODE_SERVICE_ACCOUNT = "serviceAccount"; +export const AUTH_MODE_SERVICE_TOKEN = "serviceToken"; +export const AUTH_MODE_API_KEY = "apiKey"; // TODO: deprecate \ No newline at end of file diff --git a/backend/src/variables/crypto.ts b/backend/src/variables/crypto.ts index bd2ae110c..64dde2c22 100644 --- a/backend/src/variables/crypto.ts +++ b/backend/src/variables/crypto.ts @@ -1,7 +1,7 @@ -export const ALGORITHM_AES_256_GCM = 'aes-256-gcm'; +export const ALGORITHM_AES_256_GCM = "aes-256-gcm"; export const NONCE_BYTES_SIZE = 12; export const BLOCK_SIZE_BYTES_16 = 16; -export const ENCODING_SCHEME_UTF8 = 'utf8'; -export const ENCODING_SCHEME_HEX = 'hex'; -export const ENCODING_SCHEME_BASE64 = 'base64'; \ No newline at end of file +export const ENCODING_SCHEME_UTF8 = "utf8"; +export const ENCODING_SCHEME_HEX = "hex"; +export const ENCODING_SCHEME_BASE64 = "base64"; \ No newline at end of file diff --git a/backend/src/variables/environment.ts b/backend/src/variables/environment.ts index b068b3d36..d0c8220ef 100644 --- a/backend/src/variables/environment.ts +++ b/backend/src/variables/environment.ts @@ -1,6 +1,6 @@ // environments -export const ENV_DEV = 'dev'; -export const ENV_TESTING = 'test'; -export const ENV_STAGING = 'staging'; -export const ENV_PROD = 'prod'; +export const ENV_DEV = "dev"; +export const ENV_TESTING = "test"; +export const ENV_STAGING = "staging"; +export const ENV_PROD = "prod"; export const ENV_SET = new Set([ENV_DEV, ENV_TESTING, ENV_STAGING, ENV_PROD]); \ No newline at end of file diff --git a/backend/src/variables/event.ts b/backend/src/variables/event.ts index 1c55eb3ec..c5de005d1 100644 --- a/backend/src/variables/event.ts +++ b/backend/src/variables/event.ts @@ -1,2 +1,2 @@ -export const EVENT_PUSH_SECRETS = 'pushSecrets'; -export const EVENT_PULL_SECRETS = 'pullSecrets'; \ No newline at end of file +export const EVENT_PUSH_SECRETS = "pushSecrets"; +export const EVENT_PULL_SECRETS = "pullSecrets"; \ No newline at end of file diff --git a/backend/src/variables/index.ts b/backend/src/variables/index.ts index 281145a99..24e86b8fe 100644 --- a/backend/src/variables/index.ts +++ b/backend/src/variables/index.ts @@ -1,13 +1,13 @@ -export * from './action'; -export * from './authentication'; -export * from './crypto'; -export * from './environment'; -export * from './event'; -export * from './integration'; -export * from './organization'; -export * from './permission'; -export * from './secret'; -export * from './smtp'; -export * from './stripe'; -export * from './token'; -export * from './user'; +export * from "./action"; +export * from "./authentication"; +export * from "./crypto"; +export * from "./environment"; +export * from "./event"; +export * from "./integration"; +export * from "./organization"; +export * from "./permission"; +export * from "./secret"; +export * from "./smtp"; +export * from "./stripe"; +export * from "./token"; +export * from "./user"; diff --git a/backend/src/variables/integration.ts b/backend/src/variables/integration.ts index 26e9f2544..5da38c71b 100644 --- a/backend/src/variables/integration.ts +++ b/backend/src/variables/integration.ts @@ -1,16 +1,16 @@ import { - getClientIdHeroku, - getClientSlugVercel, - getClientIdNetlify, getClientIdAzure, + getClientIdGitHub, getClientIdGitLab, - getClientIdGitHub -} from '../config'; + getClientIdHeroku, + getClientIdNetlify, + getClientSlugVercel, +} from "../config"; // integrations -export const INTEGRATION_AZURE_KEY_VAULT = 'azure-key-vault'; -export const INTEGRATION_AWS_PARAMETER_STORE = 'aws-parameter-store'; -export const INTEGRATION_AWS_SECRET_MANAGER = 'aws-secret-manager'; +export const INTEGRATION_AZURE_KEY_VAULT = "azure-key-vault"; +export const INTEGRATION_AWS_PARAMETER_STORE = "aws-parameter-store"; +export const INTEGRATION_AWS_SECRET_MANAGER = "aws-secret-manager"; export const INTEGRATION_HEROKU = "heroku"; export const INTEGRATION_VERCEL = "vercel"; export const INTEGRATION_NETLIFY = "netlify"; @@ -21,9 +21,9 @@ export const INTEGRATION_RAILWAY = "railway"; export const INTEGRATION_FLYIO = "flyio"; export const INTEGRATION_CIRCLECI = "circleci"; export const INTEGRATION_TRAVISCI = "travisci"; -export const INTEGRATION_SUPABASE = 'supabase'; -export const INTEGRATION_CHECKLY = 'checkly'; -export const INTEGRATION_HASHICORP_VAULT = 'hashicorp-vault'; +export const INTEGRATION_SUPABASE = "supabase"; +export const INTEGRATION_CHECKLY = "checkly"; +export const INTEGRATION_HASHICORP_VAULT = "hashicorp-vault"; export const INTEGRATION_SET = new Set([ INTEGRATION_AZURE_KEY_VAULT, INTEGRATION_HEROKU, @@ -37,15 +37,15 @@ export const INTEGRATION_SET = new Set([ INTEGRATION_TRAVISCI, INTEGRATION_SUPABASE, INTEGRATION_CHECKLY, - INTEGRATION_HASHICORP_VAULT + INTEGRATION_HASHICORP_VAULT, ]); // integration types export const INTEGRATION_OAUTH2 = "oauth2"; // integration oauth endpoints -export const INTEGRATION_AZURE_TOKEN_URL = `https://login.microsoftonline.com/common/oauth2/v2.0/token`; -export const INTEGRATION_HEROKU_TOKEN_URL = 'https://id.heroku.com/oauth/token'; +export const INTEGRATION_AZURE_TOKEN_URL = "https://login.microsoftonline.com/common/oauth2/v2.0/token"; +export const INTEGRATION_HEROKU_TOKEN_URL = "https://id.heroku.com/oauth/token"; export const INTEGRATION_VERCEL_TOKEN_URL = "https://api.vercel.com/v2/oauth/access_token"; export const INTEGRATION_NETLIFY_TOKEN_URL = "https://api.netlify.com/oauth/token"; @@ -63,165 +63,165 @@ export const INTEGRATION_RAILWAY_API_URL = "https://backboard.railway.app/graphq export const INTEGRATION_FLYIO_API_URL = "https://api.fly.io/graphql"; export const INTEGRATION_CIRCLECI_API_URL = "https://circleci.com/api"; export const INTEGRATION_TRAVISCI_API_URL = "https://api.travis-ci.com"; -export const INTEGRATION_SUPABASE_API_URL = 'https://api.supabase.com'; -export const INTEGRATION_CHECKLY_API_URL = 'https://api.checklyhq.com'; +export const INTEGRATION_SUPABASE_API_URL = "https://api.supabase.com"; +export const INTEGRATION_CHECKLY_API_URL = "https://api.checklyhq.com"; export const getIntegrationOptions = async () => { const INTEGRATION_OPTIONS = [ { - name: 'Heroku', - slug: 'heroku', - image: 'Heroku.png', + name: "Heroku", + slug: "heroku", + image: "Heroku.png", isAvailable: true, - type: 'oauth', + type: "oauth", clientId: await getClientIdHeroku(), - docsLink: '' + docsLink: "", }, { - name: 'Vercel', - slug: 'vercel', - image: 'Vercel.png', + name: "Vercel", + slug: "vercel", + image: "Vercel.png", isAvailable: true, - type: 'oauth', - clientId: '', + type: "oauth", + clientId: "", clientSlug: await getClientSlugVercel(), - docsLink: '' + docsLink: "", }, { - name: 'Netlify', - slug: 'netlify', - image: 'Netlify.png', + name: "Netlify", + slug: "netlify", + image: "Netlify.png", isAvailable: true, - type: 'oauth', + type: "oauth", clientId: await getClientIdNetlify(), - docsLink: '' + docsLink: "", }, { - name: 'GitHub', - slug: 'github', - image: 'GitHub.png', + name: "GitHub", + slug: "github", + image: "GitHub.png", isAvailable: true, - type: 'oauth', + type: "oauth", clientId: await getClientIdGitHub(), - docsLink: '' + docsLink: "", }, { - name: 'Render', - slug: 'render', - image: 'Render.png', + name: "Render", + slug: "render", + image: "Render.png", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'Railway', - slug: 'railway', - image: 'Railway.png', + name: "Railway", + slug: "railway", + image: "Railway.png", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'Fly.io', - slug: 'flyio', - image: 'Flyio.svg', + name: "Fly.io", + slug: "flyio", + image: "Flyio.svg", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'AWS Parameter Store', - slug: 'aws-parameter-store', - image: 'Amazon Web Services.png', + name: "AWS Parameter Store", + slug: "aws-parameter-store", + image: "Amazon Web Services.png", isAvailable: true, - type: 'custom', - clientId: '', - docsLink: '' + type: "custom", + clientId: "", + docsLink: "", }, { - name: 'AWS Secret Manager', - slug: 'aws-secret-manager', - image: 'Amazon Web Services.png', + name: "AWS Secret Manager", + slug: "aws-secret-manager", + image: "Amazon Web Services.png", isAvailable: true, - type: 'custom', - clientId: '', - docsLink: '' + type: "custom", + clientId: "", + docsLink: "", }, { - name: 'Azure Key Vault', - slug: 'azure-key-vault', - image: 'Microsoft Azure.png', + name: "Azure Key Vault", + slug: "azure-key-vault", + image: "Microsoft Azure.png", isAvailable: true, - type: 'oauth', + type: "oauth", clientId: await getClientIdAzure(), - docsLink: '' + docsLink: "", }, { - name: 'Circle CI', - slug: 'circleci', - image: 'Circle CI.png', + name: "Circle CI", + slug: "circleci", + image: "Circle CI.png", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'GitLab', - slug: 'gitlab', - image: 'GitLab.png', + name: "GitLab", + slug: "gitlab", + image: "GitLab.png", isAvailable: true, - type: 'custom', + type: "custom", clientId: await getClientIdGitLab(), - docsLink: '' + docsLink: "", }, { - name: 'Travis CI', - slug: 'travisci', - image: 'Travis CI.png', + name: "Travis CI", + slug: "travisci", + image: "Travis CI.png", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'Supabase', - slug: 'supabase', - image: 'Supabase.png', + name: "Supabase", + slug: "supabase", + image: "Supabase.png", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'Checkly', - slug: 'checkly', - image: 'Checkly.png', + name: "Checkly", + slug: "checkly", + image: "Checkly.png", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'HashiCorp Vault', - slug: 'hashicorp-vault', - image: 'Vault.png', + name: "HashiCorp Vault", + slug: "hashicorp-vault", + image: "Vault.png", isAvailable: true, - type: 'pat', - clientId: '', - docsLink: '' + type: "pat", + clientId: "", + docsLink: "", }, { - name: 'Google Cloud Platform', - slug: 'gcp', - image: 'Google Cloud Platform.png', + name: "Google Cloud Platform", + slug: "gcp", + image: "Google Cloud Platform.png", isAvailable: false, - type: '', - clientId: '', - docsLink: '' - } + type: "", + clientId: "", + docsLink: "", + }, ] return INTEGRATION_OPTIONS; diff --git a/backend/src/variables/permission.ts b/backend/src/variables/permission.ts index 98c9ef538..9dc4c61a3 100644 --- a/backend/src/variables/permission.ts +++ b/backend/src/variables/permission.ts @@ -1,2 +1,2 @@ -export const PERMISSION_READ_SECRETS = 'read'; -export const PERMISSION_WRITE_SECRETS = 'write'; \ No newline at end of file +export const PERMISSION_READ_SECRETS = "read"; +export const PERMISSION_WRITE_SECRETS = "write"; \ No newline at end of file diff --git a/backend/src/variables/secret.ts b/backend/src/variables/secret.ts index 571e66b9d..74be3a1e9 100644 --- a/backend/src/variables/secret.ts +++ b/backend/src/variables/secret.ts @@ -1,3 +1,3 @@ // secrets -export const SECRET_SHARED = 'shared'; -export const SECRET_PERSONAL = 'personal'; \ No newline at end of file +export const SECRET_SHARED = "shared"; +export const SECRET_PERSONAL = "personal"; \ No newline at end of file diff --git a/backend/src/variables/smtp.ts b/backend/src/variables/smtp.ts index f5dd05d0b..8a0e752eb 100644 --- a/backend/src/variables/smtp.ts +++ b/backend/src/variables/smtp.ts @@ -1,5 +1,5 @@ -export const SMTP_HOST_SENDGRID = 'smtp.sendgrid.net'; -export const SMTP_HOST_MAILGUN = 'smtp.mailgun.org'; -export const SMTP_HOST_SOCKETLABS = 'smtp.socketlabs.com'; -export const SMTP_HOST_ZOHOMAIL = 'smtp.zoho.com'; -export const SMTP_HOST_GMAIL = 'smtp.gmail.com'; +export const SMTP_HOST_SENDGRID = "smtp.sendgrid.net"; +export const SMTP_HOST_MAILGUN = "smtp.mailgun.org"; +export const SMTP_HOST_SOCKETLABS = "smtp.socketlabs.com"; +export const SMTP_HOST_ZOHOMAIL = "smtp.zoho.com"; +export const SMTP_HOST_GMAIL = "smtp.gmail.com"; diff --git a/backend/src/variables/stripe.ts b/backend/src/variables/stripe.ts index 7b6ae8fa1..fa0fdae07 100644 --- a/backend/src/variables/stripe.ts +++ b/backend/src/variables/stripe.ts @@ -1,2 +1,2 @@ -export const PLAN_STARTER = 'starter'; -export const PLAN_PRO = 'pro'; \ No newline at end of file +export const PLAN_STARTER = "starter"; +export const PLAN_PRO = "pro"; \ No newline at end of file diff --git a/backend/src/variables/token.ts b/backend/src/variables/token.ts index 2ced95d9c..187e2534b 100644 --- a/backend/src/variables/token.ts +++ b/backend/src/variables/token.ts @@ -1,4 +1,4 @@ -export const TOKEN_EMAIL_CONFIRMATION = 'emailConfirmation'; -export const TOKEN_EMAIL_MFA = 'emailMfa'; -export const TOKEN_EMAIL_ORG_INVITATION = 'organizationInvitation'; -export const TOKEN_EMAIL_PASSWORD_RESET = 'passwordReset'; \ No newline at end of file +export const TOKEN_EMAIL_CONFIRMATION = "emailConfirmation"; +export const TOKEN_EMAIL_MFA = "emailMfa"; +export const TOKEN_EMAIL_ORG_INVITATION = "organizationInvitation"; +export const TOKEN_EMAIL_PASSWORD_RESET = "passwordReset"; \ No newline at end of file diff --git a/backend/src/variables/user.ts b/backend/src/variables/user.ts index 7e5b53c4b..a688b115d 100644 --- a/backend/src/variables/user.ts +++ b/backend/src/variables/user.ts @@ -1 +1 @@ -export const MFA_METHOD_EMAIL = 'email'; \ No newline at end of file +export const MFA_METHOD_EMAIL = "email"; \ No newline at end of file diff --git a/backend/swagger/index.ts b/backend/swagger/index.ts index 051f9d64f..35ed20790 100644 --- a/backend/swagger/index.ts +++ b/backend/swagger/index.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const swaggerAutogen = require('swagger-autogen')({ openapi: '3.0.0' }); -const fs = require('fs').promises; -const yaml = require('js-yaml'); +const swaggerAutogen = require("swagger-autogen")({ openapi: "3.0.0" }); +const fs = require("fs").promises; +const yaml = require("js-yaml"); /** * Generates OpenAPI specs for all Infisical API endpoints: @@ -11,216 +11,216 @@ const yaml = require('js-yaml'); const generateOpenAPISpec = async () => { const doc = { info: { - title: 'Infisical API', - description: 'List of all available APIs that can be consumed', + title: "Infisical API", + description: "List of all available APIs that can be consumed", }, - host: ['https://infisical.com'], + host: ["https://infisical.com"], servers: [ { - url: 'https://infisical.com', - description: 'Production server' + url: "https://infisical.com", + description: "Production server", }, { - url: 'http://localhost:8080', - description: 'Local server' - } + url: "http://localhost:8080", + description: "Local server", + }, ], securityDefinitions: { bearerAuth: { - type: 'http', - scheme: 'bearer', - bearerFormat: 'JWT', - description: "This security definition uses the HTTP 'bearer' scheme, which allows the client to authenticate using a JSON Web Token (JWT) that is passed in the Authorization header of the request." + type: "http", + scheme: "bearer", + bearerFormat: "JWT", + description: "This security definition uses the HTTP 'bearer' scheme, which allows the client to authenticate using a JSON Web Token (JWT) that is passed in the Authorization header of the request.", }, apiKeyAuth: { - type: 'apiKey', - in: 'header', - name: 'X-API-Key', - description: 'This security definition uses an API key, which is passed in the header of the request as the value of the "X-API-Key" header. The client must provide a valid key in order to access the API.' - } + type: "apiKey", + in: "header", + name: "X-API-Key", + description: 'This security definition uses an API key, which is passed in the header of the request as the value of the "X-API-Key" header. The client must provide a valid key in order to access the API.', + }, }, definitions: { CurrentUser: { - _id: '', - email: 'johndoe@gmail.com', - firstName: 'John', - lastName: 'Doe', - publicKey: 'johns_nacl_public_key', - encryptedPrivateKey: 'johns_enc_nacl_private_key', - iv: 'iv_of_enc_nacl_private_key', - tag: 'tag_of_enc_nacl_private_key', - updatedAt: '2023-01-13T14:16:12.210Z', - createdAt: '2023-01-13T14:16:12.210Z' + _id: "", + email: "johndoe@gmail.com", + firstName: "John", + lastName: "Doe", + publicKey: "johns_nacl_public_key", + encryptedPrivateKey: "johns_enc_nacl_private_key", + iv: "iv_of_enc_nacl_private_key", + tag: "tag_of_enc_nacl_private_key", + updatedAt: "2023-01-13T14:16:12.210Z", + createdAt: "2023-01-13T14:16:12.210Z", }, Membership: { user: { - _id: '', - email: 'johndoe@gmail.com', - firstName: 'John', - lastName: 'Doe', - publicKey: 'johns_nacl_public_key', - updatedAt: '2023-01-13T14:16:12.210Z', - createdAt: '2023-01-13T14:16:12.210Z' + _id: "", + email: "johndoe@gmail.com", + firstName: "John", + lastName: "Doe", + publicKey: "johns_nacl_public_key", + updatedAt: "2023-01-13T14:16:12.210Z", + createdAt: "2023-01-13T14:16:12.210Z", }, - workspace: '', - role: 'admin' + workspace: "", + role: "admin", }, MembershipOrg: { user: { - _id: '', - email: 'johndoe@gmail.com', - firstName: 'John', - lastName: 'Doe', - publicKey: 'johns_nacl_public_key', - updatedAt: '2023-01-13T14:16:12.210Z', - createdAt: '2023-01-13T14:16:12.210Z' + _id: "", + email: "johndoe@gmail.com", + firstName: "John", + lastName: "Doe", + publicKey: "johns_nacl_public_key", + updatedAt: "2023-01-13T14:16:12.210Z", + createdAt: "2023-01-13T14:16:12.210Z", }, - organization: '', - role: 'owner', - status: 'accepted' + organization: "", + role: "owner", + status: "accepted", }, Organization: { - _id: '', - name: 'Acme Corp.', - customerId: '' + _id: "", + name: "Acme Corp.", + customerId: "", }, Project: { - name: 'My Project', - organization: '', + name: "My Project", + organization: "", environments: [{ - name: 'development', - slug: 'dev' - }] + name: "development", + slug: "dev", + }], }, ProjectKey: { - encryptedkey: '', - nonce: '', + encryptedkey: "", + nonce: "", sender: { - publicKey: 'senders_nacl_public_key' + publicKey: "senders_nacl_public_key", }, - receiver: '', - workspace: '' + receiver: "", + workspace: "", }, CreateSecret: { - type: 'shared', - secretKeyCiphertext: '', - secretKeyIV: '', - secretKeyTag: '', - secretValueCiphertext: '', - secretValueIV: '', - secretValueTag: '', - secretCommentCiphertext: '', - secretCommentIV: '', - secretCommentTag: '' + type: "shared", + secretKeyCiphertext: "", + secretKeyIV: "", + secretKeyTag: "", + secretValueCiphertext: "", + secretValueIV: "", + secretValueTag: "", + secretCommentCiphertext: "", + secretCommentIV: "", + secretCommentTag: "", }, UpdateSecret: { - id: '', - secretKeyCiphertext: '', - secretKeyIV: '', - secretKeyTag: '', - secretValueCiphertext: '', - secretValueIV: '', - secretValueTag: '', - secretCommentCiphertext: '', - secretCommentIV: '', - secretCommentTag: '' + id: "", + secretKeyCiphertext: "", + secretKeyIV: "", + secretKeyTag: "", + secretValueCiphertext: "", + secretValueIV: "", + secretValueTag: "", + secretCommentCiphertext: "", + secretCommentIV: "", + secretCommentTag: "", }, Secret: { - _id: '', + _id: "", version: 1, - workspace : '', - type: 'shared', + workspace : "", + type: "shared", user: null, - secretKeyCiphertext: '', - secretKeyIV: '', - secretKeyTag: '', - secretValueCiphertext: '', - secretValueIV: '', - secretValueTag: '', - secretCommentCiphertext: '', - secretCommentIV: '', - secretCommentTag: '', - updatedAt: '2023-01-13T14:16:12.210Z', - createdAt: '2023-01-13T14:16:12.210Z' + secretKeyCiphertext: "", + secretKeyIV: "", + secretKeyTag: "", + secretValueCiphertext: "", + secretValueIV: "", + secretValueTag: "", + secretCommentCiphertext: "", + secretCommentIV: "", + secretCommentTag: "", + updatedAt: "2023-01-13T14:16:12.210Z", + createdAt: "2023-01-13T14:16:12.210Z", }, Log: { - _id: '', + _id: "", user: { - _id: '', - email: 'johndoe@gmail.com', - firstName: 'John', - lastName: 'Doe' + _id: "", + email: "johndoe@gmail.com", + firstName: "John", + lastName: "Doe", }, - workspace: '', + workspace: "", actionNames: [ - 'addSecrets' + "addSecrets", ], actions: [ { - name: 'addSecrets', - user: '', - workspace: '', + name: "addSecrets", + user: "", + workspace: "", payload: [ { - oldSecretVersion: '', - newSecretVersion: '' - } - ] - } + oldSecretVersion: "", + newSecretVersion: "", + }, + ], + }, ], - channel: 'cli', - ipAddress: '192.168.0.1', - updatedAt: '2023-01-13T14:16:12.210Z', - createdAt: '2023-01-13T14:16:12.210Z' + channel: "cli", + ipAddress: "192.168.0.1", + updatedAt: "2023-01-13T14:16:12.210Z", + createdAt: "2023-01-13T14:16:12.210Z", }, SecretSnapshot: { - workspace: '', + workspace: "", version: 1, secretVersions: [ { - _id: '' - } - ] + _id: "", + }, + ], }, SecretVersion: { - _id: '', - secret: '', + _id: "", + secret: "", version: 1, - workspace: '', - type: 'shared', - user: '', - environment: 'dev', - isDeleted: '', - secretKeyCiphertext: '', - secretKeyIV: '', - secretKeyTag: '', - secretValueCiphertext: '', - secretValueIV: '', - secretValueTag: '', + workspace: "", + type: "shared", + user: "", + environment: "dev", + isDeleted: "", + secretKeyCiphertext: "", + secretKeyIV: "", + secretKeyTag: "", + secretValueCiphertext: "", + secretValueIV: "", + secretValueTag: "", }, ServiceTokenData: { - _id: '', - name: '', - workspace: '', - environment: '', + _id: "", + name: "", + workspace: "", + environment: "", user: { - _id: '', - firstName: '', - lastName: '' + _id: "", + firstName: "", + lastName: "", }, - expiresAt: '2023-01-13T14:16:12.210Z', - encryptedKey: '', - iv: '', - tag: '', - updatedAt: '2023-01-13T14:16:12.210Z', - createdAt: '2023-01-13T14:16:12.210Z' - } - } + expiresAt: "2023-01-13T14:16:12.210Z", + encryptedKey: "", + iv: "", + tag: "", + updatedAt: "2023-01-13T14:16:12.210Z", + createdAt: "2023-01-13T14:16:12.210Z", + }, + }, }; - const outputJSONFile = '../spec.json'; - const outputYAMLFile = '../docs/spec.yaml'; - const endpointsFiles = ['../src/index.ts']; + const outputJSONFile = "../spec.json"; + const outputYAMLFile = "../docs/spec.yaml"; + const endpointsFiles = ["../src/index.ts"]; const spec = await swaggerAutogen(outputJSONFile, endpointsFiles, doc); await fs.writeFile(outputYAMLFile, yaml.dump(spec.data)); diff --git a/backend/tests/helper/helper.ts b/backend/tests/helper/helper.ts index d72a101c1..510f5f353 100644 --- a/backend/tests/helper/helper.ts +++ b/backend/tests/helper/helper.ts @@ -4,15 +4,15 @@ import axiosInstance from "../../src/config/request"; import { Secret } from "../../src/models"; import { testUserEmail, testUserPassword } from "../../src/utils/addDevelopmentUser"; // eslint-disable-next-line @typescript-eslint/no-var-requires -const crypto = require('crypto') +const crypto = require("crypto") // eslint-disable-next-line @typescript-eslint/no-var-requires -const jsrp = require('jsrp'); +const jsrp = require("jsrp"); // eslint-disable-next-line @typescript-eslint/no-var-requires -const axios = require('axios'); +const axios = require("axios"); import { plainTextWorkspaceKey, testWorkspaceId } from "../../src/utils/addDevelopmentUser"; import { - encryptSymmetric128BitHexKeyUTF8 -} from '../../src/utils/crypto'; + encryptSymmetric128BitHexKeyUTF8, +} from "../../src/utils/crypto"; interface TokenData { token: string; @@ -37,11 +37,11 @@ export const getJWTFromTestUser = (): Promise => { // POST: /login1 const reqBody = { email: EMAIL, - clientPublicKey + clientPublicKey, } - const loginOneRes = await axiosInstance.post('http://localhost:4000/api/v1/auth/login1', reqBody); + const loginOneRes = await axiosInstance.post("http://localhost:4000/api/v1/auth/login1", reqBody); const serverPublicKey = loginOneRes.data.serverPublicKey; const salt = loginOneRes.data.salt; @@ -53,10 +53,10 @@ export const getJWTFromTestUser = (): Promise => { // POST: /login2 const reqBody2 = { email: EMAIL, - clientProof + clientProof, } - const response2 = await axiosInstance.post('http://localhost:4000/api/v1/auth/login2', reqBody2); + const response2 = await axiosInstance.post("http://localhost:4000/api/v1/auth/login2", reqBody2); resolve(response2.data) }) @@ -65,25 +65,25 @@ export const getJWTFromTestUser = (): Promise => { export const getServiceTokenFromTestUser = async () => { const loggedInUserDetails = await getJWTFromTestUser() - const randomBytes = crypto.randomBytes(16).toString('hex'); + const randomBytes = crypto.randomBytes(16).toString("hex"); const { ciphertext, iv, tag } = encryptSymmetric128BitHexKeyUTF8({ plaintext: plainTextWorkspaceKey, key: randomBytes, }); - const newServiceToken = await axiosInstance.post('http://localhost:4000/api/v2/service-token/', { - 'name': "test service token", - 'workspaceId': testWorkspaceId, - 'environment': "dev", - 'encryptedKey': ciphertext, - 'iv': iv, - 'tag': tag, - 'expiresIn': Date.now() + 90000, - 'permissions': ["read"] + const newServiceToken = await axiosInstance.post("http://localhost:4000/api/v2/service-token/", { + "name": "test service token", + "workspaceId": testWorkspaceId, + "environment": "dev", + "encryptedKey": ciphertext, + "iv": iv, + "tag": tag, + "expiresIn": Date.now() + 90000, + "permissions": ["read"], }, { headers: { - 'Authorization': `Bearer ${loggedInUserDetails.token}` - } + "Authorization": `Bearer ${loggedInUserDetails.token}`, + }, }); return `${newServiceToken.data.serviceToken}.${randomBytes}` diff --git a/backend/tests/integration-tests/routes/v2/service-tokens.ts b/backend/tests/integration-tests/routes/v2/service-tokens.ts index b011db36f..15d776bdd 100644 --- a/backend/tests/integration-tests/routes/v2/service-tokens.ts +++ b/backend/tests/integration-tests/routes/v2/service-tokens.ts @@ -1,6 +1,6 @@ -import request from 'supertest' -import main from '../../../../src/index' -import { getServiceTokenFromTestUser } from '../../../helper/helper'; +import request from "supertest" +import main from "../../../../src/index" +import { getServiceTokenFromTestUser } from "../../../helper/helper"; let server: any; beforeAll(async () => { @@ -20,18 +20,18 @@ describe("GET /api/v2/service-token", () => { // get the service token details const serviceTokenDetails = await request(server) .get("/api/v2/service-token") - .set('Authorization', `Bearer ${serviceToken}`) + .set("Authorization", `Bearer ${serviceToken}`) expect(serviceTokenDetails.body).toMatchObject({ _id: expect.any(String), - name: 'test service token', - workspace: '63cefb15c8d3175601cfa989', - environment: 'dev', + name: "test service token", + workspace: "63cefb15c8d3175601cfa989", + environment: "dev", user: { - _id: '63cefa6ec8d3175601cfa980', - email: 'test@localhost.local', - firstName: 'Jake', - lastName: 'Moni', + _id: "63cefa6ec8d3175601cfa980", + email: "test@localhost.local", + firstName: "Jake", + lastName: "Moni", isMfaEnabled: false, mfaMethods: expect.any(Array), devices: [ @@ -49,7 +49,7 @@ describe("GET /api/v2/service-token", () => { encryptedKey: expect.any(String), iv: expect.any(String), tag: expect.any(String), - permissions: ['read'], + permissions: ["read"], createdAt: expect.any(String), updatedAt: expect.any(String), }); diff --git a/backend/tests/setupTests.ts b/backend/tests/setupTests.ts index 903347a2a..ef30ce85a 100644 --- a/backend/tests/setupTests.ts +++ b/backend/tests/setupTests.ts @@ -1,7 +1,7 @@ -import { Server } from 'http'; -import main from '../src'; -import { describe, expect, it, beforeAll, afterAll } from '@jest/globals'; -import request from 'supertest'; +import { Server } from "http"; +import main from "../src"; +import { afterAll, beforeAll, describe, expect, it } from "@jest/globals"; +import request from "supertest"; let server: Server; @@ -13,9 +13,9 @@ afterAll(async () => { server.close(); }); -describe('Healthcheck endpoint', () => { - it('GET /healthcheck should return OK', async () => { - const res = await request(server).get('/healthcheck'); +describe("Healthcheck endpoint", () => { + it("GET /healthcheck should return OK", async () => { + const res = await request(server).get("/healthcheck"); expect(res.status).toEqual(200); }); }); diff --git a/backend/tests/unit-tests/utils/crypto.test.ts b/backend/tests/unit-tests/utils/crypto.test.ts index d50b3057c..f9f2aba01 100644 --- a/backend/tests/unit-tests/utils/crypto.test.ts +++ b/backend/tests/unit-tests/utils/crypto.test.ts @@ -1,78 +1,78 @@ -import { describe, test, expect } from '@jest/globals'; +import { describe, expect, test } from "@jest/globals"; import { decryptAsymmetric, encryptAsymmetric, -} from '../../../src/utils/crypto'; +} from "../../../src/utils/crypto"; -describe('Crypto', () => { - describe('encryptAsymmetric', () => { - describe('given all valid publicKey, privateKey and plaintext', () => { - const publicKey = '6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw='; - const privateKey = 'Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0='; - const plaintext = 'secret-message'; +describe("Crypto", () => { + describe("encryptAsymmetric", () => { + describe("given all valid publicKey, privateKey and plaintext", () => { + const publicKey = "6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw="; + const privateKey = "Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0="; + const plaintext = "secret-message"; - test('should encrypt plain text', () => { + test("should encrypt plain text", () => { const result = encryptAsymmetric({ plaintext, publicKey, privateKey }); expect(result.ciphertext).toBeDefined(); expect(result.nonce).toBeDefined(); }); }); - describe('given empty/undefined publicKey', () => { + describe("given empty/undefined publicKey", () => { let publicKey: string; - const privateKey = 'Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0='; - const plaintext = 'secret-message'; + const privateKey = "Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0="; + const plaintext = "secret-message"; - test('should throw error if publicKey is undefined', () => { + test("should throw error if publicKey is undefined", () => { expect(() => { encryptAsymmetric({ plaintext, publicKey, privateKey }); - }).toThrowError('invalid encoding'); + }).toThrowError("invalid encoding"); }); - test('should throw error if publicKey is empty string', () => { - publicKey = ''; + test("should throw error if publicKey is empty string", () => { + publicKey = ""; expect(() => { encryptAsymmetric({ plaintext, publicKey, privateKey }); - }).toThrowError('bad public key size'); + }).toThrowError("bad public key size"); }); }); - describe('given empty/undefined privateKey', () => { - const publicKey = '6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw='; + describe("given empty/undefined privateKey", () => { + const publicKey = "6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw="; let privateKey: string; - const plaintext = 'secret-message'; + const plaintext = "secret-message"; - test('should throw error if privateKey is undefined', () => { + test("should throw error if privateKey is undefined", () => { expect(() => { encryptAsymmetric({ plaintext, publicKey, privateKey }); - }).toThrowError('invalid encoding'); + }).toThrowError("invalid encoding"); }); - test('should throw error if privateKey is empty string', () => { - privateKey = ''; + test("should throw error if privateKey is empty string", () => { + privateKey = ""; expect(() => { encryptAsymmetric({ plaintext, publicKey, privateKey }); - }).toThrowError('bad secret key size'); + }).toThrowError("bad secret key size"); }); }); - describe('given undefined/invalid plaint text', () => { - const publicKey = '6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw='; - const privateKey = 'Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0='; + describe("given undefined/invalid plaint text", () => { + const publicKey = "6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw="; + const privateKey = "Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0="; let plaintext: string; - test('should throw error if plaintext is undefined', () => { + test("should throw error if plaintext is undefined", () => { expect(() => { encryptAsymmetric({ plaintext, publicKey, privateKey }); - }).toThrowError('expected string'); + }).toThrowError("expected string"); }); - test('should encrypt plaintext containing special characters', () => { - plaintext = '131@#$%235!@#&*(&123sadfkjadjf'; + test("should encrypt plaintext containing special characters", () => { + plaintext = "131@#$%235!@#&*(&123sadfkjadjf"; const result = encryptAsymmetric({ plaintext, publicKey, - privateKey + privateKey, }); expect(result.ciphertext).toBeDefined(); expect(result.nonce).toBeDefined(); @@ -80,17 +80,17 @@ describe('Crypto', () => { }); }); - describe('decryptAsymmetric', () => { - describe('given all valid publicKey, privateKey and plaintext', () => { - const publicKey = '6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw='; - const privateKey = 'Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0='; - const plaintext = 'secret-message'; + describe("decryptAsymmetric", () => { + describe("given all valid publicKey, privateKey and plaintext", () => { + const publicKey = "6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw="; + const privateKey = "Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0="; + const plaintext = "secret-message"; - test('should decrypt the encrypted plaintext', () => { + test("should decrypt the encrypted plaintext", () => { const encryptedResult = encryptAsymmetric({ plaintext, publicKey, - privateKey + privateKey, }); const ciphertext = encryptedResult.ciphertext; const nonce = encryptedResult.nonce; @@ -99,7 +99,7 @@ describe('Crypto', () => { ciphertext, nonce, publicKey, - privateKey + privateKey, }); expect(decryptedResult).toBeDefined(); @@ -107,18 +107,18 @@ describe('Crypto', () => { }); }); - describe('given ciphertext or nonce is modified before decrypt', () => { - const publicKey = '6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw='; - const privateKey = 'Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0='; - const plaintext = 'secret-message'; + describe("given ciphertext or nonce is modified before decrypt", () => { + const publicKey = "6U5m6S5jlyazJ+R4z7Yf/Ah4th4JwKxDN8Wn7+upvzw="; + const privateKey = "Z8W53YV+2ddjJCrFwzptjK96y2QsQI9oXuvfcx+qxz0="; + const plaintext = "secret-message"; - test('should throw error if ciphertext is modified', () => { + test("should throw error if ciphertext is modified", () => { const encryptedResult = encryptAsymmetric({ plaintext, publicKey, - privateKey + privateKey, }); - const ciphertext = '=12adfJ@#52af1231=123'; // modified + const ciphertext = "=12adfJ@#52af1231=123"; // modified const nonce = encryptedResult.nonce; expect(() => { @@ -126,28 +126,28 @@ describe('Crypto', () => { ciphertext, nonce, publicKey, - privateKey + privateKey, }); - }).toThrowError('invalid encoding'); + }).toThrowError("invalid encoding"); }); - test('should throw error if nonce is modified', () => { + test("should throw error if nonce is modified", () => { const encryptedResult = encryptAsymmetric({ plaintext, publicKey, - privateKey + privateKey, }); const ciphertext = encryptedResult.ciphertext; - const nonce = '=12adfJ@#52af1231=123'; // modified + const nonce = "=12adfJ@#52af1231=123"; // modified expect(() => { decryptAsymmetric({ ciphertext, nonce, publicKey, - privateKey + privateKey, }); - }).toThrowError('invalid encoding'); + }).toThrowError("invalid encoding"); }); }); }); diff --git a/backend/tests/unit-tests/utils/posthog.test.ts b/backend/tests/unit-tests/utils/posthog.test.ts index 9f202385c..5c05684f4 100644 --- a/backend/tests/unit-tests/utils/posthog.test.ts +++ b/backend/tests/unit-tests/utils/posthog.test.ts @@ -1,29 +1,29 @@ -import { describe, test, expect } from '@jest/globals'; -import { getChannelFromUserAgent } from '../../../src/utils/posthog'; +import { describe, expect, test } from "@jest/globals"; +import { getChannelFromUserAgent } from "../../../src/utils/posthog"; -describe('posthog getChannelFromUserAgent', () => { +describe("posthog getChannelFromUserAgent", () => { test("should return 'web' when userAgent includes 'mozilla'", () => { const userAgent = - 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.115 Mobile Safari/537.36'; + "Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.115 Mobile Safari/537.36"; const channel = getChannelFromUserAgent(userAgent); - expect(channel).toBe('web'); + expect(channel).toBe("web"); }); test("should return 'cli'", () => { - const userAgent = 'cli'; + const userAgent = "cli"; const channel = getChannelFromUserAgent(userAgent); - expect(channel).toBe('cli'); + expect(channel).toBe("cli"); }); test("should return 'k8-operator'", () => { - const userAgent = 'k8-operator'; + const userAgent = "k8-operator"; const channel = getChannelFromUserAgent(userAgent); - expect(channel).toBe('k8-operator'); + expect(channel).toBe("k8-operator"); }); - test('should return undefined if no userAgent', () => { + test("should return undefined if no userAgent", () => { const userAgent = undefined; const channel = getChannelFromUserAgent(userAgent); - expect(channel).toBe('other'); + expect(channel).toBe("other"); }); }); diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index 155e6d6e8..e9cec0e24 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -10,66 +10,68 @@ module.exports = { es2021: true }, extends: [ - 'airbnb', - 'airbnb-typescript', - 'airbnb/hooks', - 'plugin:react/recommended', - 'prettier', - 'plugin:storybook/recommended' + "airbnb", + "airbnb-typescript", + "airbnb/hooks", + "plugin:react/recommended", + "prettier", + "plugin:storybook/recommended" ], parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: './tsconfig.json', + ecmaVersion: "latest", + sourceType: "module", + project: "./tsconfig.json", ecmaFeatures: { jsx: true }, tsconfigRootDir: __dirname }, - plugins: ['react', 'prettier', 'simple-import-sort', 'import'], + plugins: ["react", "prettier", "simple-import-sort", "import"], rules: { - 'react/react-in-jsx-scope': 'off', - 'import/prefer-default-export': 'off', - 'react-hooks/exhaustive-deps': 'off', - '@typescript-eslint/ban-ts-comment': 'warn', - 'react/jsx-props-no-spreading': 'off', // switched off for component building + quotes: ["error", "double", { avoidEscape: true }], + "comma-dangle": ["error", "only-multiline"], + "react/react-in-jsx-scope": "off", + "import/prefer-default-export": "off", + "react-hooks/exhaustive-deps": "off", + "@typescript-eslint/ban-ts-comment": "warn", + "react/jsx-props-no-spreading": "off", // switched off for component building // TODO: This rule will be switched ON after complete revamp of frontend - '@typescript-eslint/no-explicit-any': 'off', - 'no-console': 'off', - 'arrow-body-style': 'off', - 'no-underscore-dangle': [ - 'error', + "@typescript-eslint/no-explicit-any": "off", + "no-console": "off", + "arrow-body-style": "off", + "no-underscore-dangle": [ + "error", { - allow: ['_id'] + allow: ["_id"] } ], - 'jsx-a11y/anchor-is-valid': 'off', + "jsx-a11y/anchor-is-valid": "off", // all those tags must be converted to label or a p component // - 'react/require-default-props': 'off', - 'react/jsx-filename-extension': [ + "react/require-default-props": "off", + "react/jsx-filename-extension": [ 1, { - extensions: ['.tsx', '.ts'] + extensions: [".tsx", ".ts"] } ], // TODO: turn this rule ON after migration. everything should use arrow functions - 'react/function-component-definition': [ + "react/function-component-definition": [ 0, { - namedComponents: 'arrow-function' + namedComponents: "arrow-function" } ], - 'react/no-unknown-property': [ - 'error', + "react/no-unknown-property": [ + "error", { - ignore: ['jsx'] + ignore: ["jsx"] } ], - '@typescript-eslint/no-non-null-assertion': 'off', - 'simple-import-sort/exports': 'warn', - 'simple-import-sort/imports': [ - 'warn', + "@typescript-eslint/no-non-null-assertion": "off", + "simple-import-sort/exports": "warn", + "simple-import-sort/imports": [ + "warn", { groups: [ // Node.js builtins. You could also generate this regex if you use a `.js` config. @@ -77,26 +79,26 @@ module.exports = { // Note that if you use the `node:` prefix for Node.js builtins, // you can avoid this complexity: You can simply use "^node:". [ - '^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)' + "^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)" ], // Packages `react` related packages - ['^react', '^next', '^@?\\w'], - ['^@app'], + ["^react", "^next", "^@?\\w"], + ["^@app"], // Internal packages. - ['^~(/.*|$)'], + ["^~(/.*|$)"], // Relative imports - ['^\\.\\.(?!/?$)', '^\\.\\./?$', '^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'], + ["^\\.\\.(?!/?$)", "^\\.\\./?$", "^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"], // Style imports. - ['^.+\\.?(css|scss)$'] + ["^.+\\.?(css|scss)$"] ] } ] }, - ignorePatterns: ['next.config.js'], + ignorePatterns: ["next.config.js"], settings: { - 'import/resolver': { + "import/resolver": { typescript: { - project: ['./tsconfig.json'] + project: ["./tsconfig.json"] } } } diff --git a/frontend/.prettierrc b/frontend/.prettierrc index da5d26a53..0b8ef54d2 100644 --- a/frontend/.prettierrc +++ b/frontend/.prettierrc @@ -1,5 +1,5 @@ { - "singleQuote": true, + "singleQuote": false, "printWidth": 100, "trailingComma": "none", "tabWidth": 2, diff --git a/frontend/package.json b/frontend/package.json index 9d5071736..efe833849 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,7 +6,8 @@ "build": "next build", "start": "next start", "start:docker": "next build && next start", - "lint": "eslint --fix --ext js,ts,tsx ./src", + "lint": "eslint --ext js,ts,tsx ./src", + "lint-and-fix": "eslint --fix --ext js,ts,tsx ./src", "type-check": "tsc --project tsconfig.json", "storybook": "storybook dev -p 6006 -s ./public", "build-storybook": "storybook build" diff --git a/frontend/src/components/RouteGuard.tsx b/frontend/src/components/RouteGuard.tsx index 3b755341e..5c874541a 100644 --- a/frontend/src/components/RouteGuard.tsx +++ b/frontend/src/components/RouteGuard.tsx @@ -1,8 +1,8 @@ -import { ReactNode, useEffect, useState } from 'react'; -import { useRouter } from 'next/router'; +import { ReactNode, useEffect, useState } from "react"; +import { useRouter } from "next/router"; -import { publicPaths } from '@app/const'; -import checkAuth from '@app/pages/api/auth/CheckAuth'; +import { publicPaths } from "@app/const"; +import checkAuth from "@app/pages/api/auth/CheckAuth"; // #TODO: finish spinner only when the data loads fully // #TODO: Redirect somewhere if the page does not exist @@ -21,7 +21,7 @@ export default function RouteGuard({ children }: Prop): JSX.Element { */ async function authCheck(url: string) { // Make sure that we don't redirect when the user is on the following pages. - const path = `/${url.split('?')[0].split('/')[1]}`; + const path = `/${url.split("?")[0].split("/")[1]}`; // Check if the user is authenticated const response = await checkAuth(); @@ -30,15 +30,15 @@ export default function RouteGuard({ children }: Prop): JSX.Element { if (!publicPaths.includes(path)) { try { if (response.status !== 200) { - router.push('/login'); - console.log('Unauthorized to access.'); + router.push("/login"); + console.log("Unauthorized to access."); setAuthorized(false); } else { setAuthorized(true); - console.log('Authorized to access.'); + console.log("Authorized to access."); } } catch (error) { - console.log('Error (probably the authCheck route is stuck again...):', error); + console.log("Error (probably the authCheck route is stuck again...):", error); } } } @@ -53,16 +53,16 @@ export default function RouteGuard({ children }: Prop): JSX.Element { // #TODO: add the loading page when not yet authorized. const hideContent = () => setAuthorized(false); // const onError = () => setAuthorized(true) - router.events.on('routeChangeStart', hideContent); + router.events.on("routeChangeStart", hideContent); // router.events.on("routeChangeError", onError); // on route change complete - run auth check - router.events.on('routeChangeComplete', authCheck); + router.events.on("routeChangeComplete", authCheck); // unsubscribe from events in useEffect return function return () => { - router.events.off('routeChangeStart', hideContent); - router.events.off('routeChangeComplete', authCheck); + router.events.off("routeChangeStart", hideContent); + router.events.off("routeChangeComplete", authCheck); // router.events.off("routeChangeError", onError); }; // eslint-disable-next-line react-hooks/exhaustive-deps diff --git a/frontend/src/components/analytics/posthog.ts b/frontend/src/components/analytics/posthog.ts index b6f3e4341..706f79515 100644 --- a/frontend/src/components/analytics/posthog.ts +++ b/frontend/src/components/analytics/posthog.ts @@ -1,16 +1,16 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable no-undef */ -import posthog from 'posthog-js'; +import posthog from "posthog-js"; -import { ENV, POSTHOG_API_KEY, POSTHOG_HOST } from '../utilities/config'; +import { ENV, POSTHOG_API_KEY, POSTHOG_HOST } from "../utilities/config"; export const initPostHog = () => { // @ts-ignore console.log("Hi there 👋") try { - if (typeof window !== 'undefined') { + if (typeof window !== "undefined") { // @ts-ignore - if (ENV === 'production' && TELEMETRY_CAPTURING_ENABLED) { + if (ENV === "production" && TELEMETRY_CAPTURING_ENABLED) { posthog.init(POSTHOG_API_KEY, { api_host: POSTHOG_HOST }); diff --git a/frontend/src/components/basic/Error.tsx b/frontend/src/components/basic/Error.tsx index ab79fb24d..bf892e03d 100644 --- a/frontend/src/components/basic/Error.tsx +++ b/frontend/src/components/basic/Error.tsx @@ -1,5 +1,5 @@ -import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faExclamationTriangle } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; const Error = ({ text }: { text: string }): JSX.Element => { return ( diff --git a/frontend/src/components/basic/EventFilter.tsx b/frontend/src/components/basic/EventFilter.tsx index 7c3a9dc25..46b2200f6 100644 --- a/frontend/src/components/basic/EventFilter.tsx +++ b/frontend/src/components/basic/EventFilter.tsx @@ -1,5 +1,5 @@ -import React, { Fragment } from 'react'; -import { useTranslation } from 'react-i18next'; +import React, { Fragment } from "react"; +import { useTranslation } from "react-i18next"; import { faAngleDown, faEye, @@ -7,9 +7,9 @@ import { faShuffle, faTrash, faX -} from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { Listbox, Transition } from '@headlessui/react'; +} from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { Listbox, Transition } from "@headlessui/react"; interface ListBoxProps { selected: string; @@ -18,19 +18,19 @@ interface ListBoxProps { const eventOptions = [ { - name: 'addSecrets', + name: "addSecrets", icon: faPlus }, { - name: 'readSecrets', + name: "readSecrets", icon: faEye }, { - name: 'updateSecrets', + name: "updateSecrets", icon: faShuffle }, { - name: 'deleteSecrets', + name: "deleteSecrets", icon: faTrash } ]; @@ -48,13 +48,13 @@ const EventFilter = ({ selected, select }: ListBoxProps): JSX.Element => {
- {selected !== '' ? ( + {selected !== "" ? (

{t(`activity.event.${selected}`)}

) : ( -

{String(t('common.select-event'))}

+

{String(t("common.select-event"))}

)} - {selected !== '' ? ( - select('')} /> + {selected !== "" ? ( + select("")} /> ) : ( )} @@ -70,15 +70,15 @@ const EventFilter = ({ selected, select }: ListBoxProps): JSX.Element => { {({ selected: isSelected }) => ( - {' '} + {" "} {t(`activity.event.${event.name}`)} )} diff --git a/frontend/src/components/basic/InputField.tsx b/frontend/src/components/basic/InputField.tsx index df6dd1424..0bc01defc 100644 --- a/frontend/src/components/basic/InputField.tsx +++ b/frontend/src/components/basic/InputField.tsx @@ -1,8 +1,8 @@ -import { memo, useState } from 'react'; -import { faCircle, faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { memo, useState } from "react"; +import { faCircle, faEye, faEyeSlash } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import guidGenerator from '../utilities/randomId'; +import guidGenerator from "../utilities/randomId"; interface InputFieldProps { isStatic?: boolean; @@ -34,7 +34,7 @@ const InputField = ({ placeholder, isStatic, text -}: InputFieldProps & Pick) => { +}: InputFieldProps & Pick) => { const [passwordVisible, setPasswordVisible] = useState(false); if (isStatic === true) { @@ -64,28 +64,28 @@ const InputField = ({
onChangeHandler(e.target.value)} - type={passwordVisible === false ? type : 'text'} + type={passwordVisible === false ? type : "text"} placeholder={placeholder} value={value} required={isRequired} className={`${ blurred - ? 'text-bunker-800 group-hover:text-gray-400 focus:text-gray-400 active:text-gray-400' - : '' + ? "text-bunker-800 group-hover:text-gray-400 focus:text-gray-400 active:text-gray-400" + : "" } ${ - error ? 'focus:ring-red/50' : 'focus:ring-primary/50' + error ? "focus:ring-red/50" : "focus:ring-primary/50" } relative peer bg-mineshaft-900 rounded-md text-gray-400 text-md p-2 w-full min-w-16 outline-none focus:ring-4 duration-200`} name={name} spellCheck="false" autoComplete={autoComplete} id={id} /> - {label?.includes('Password') && ( + {label?.includes("Password") && (
diff --git a/frontend/src/components/basic/dialog/AddApiKeyDialog.tsx b/frontend/src/components/basic/dialog/AddApiKeyDialog.tsx index 5c2e26246..eeb0ca6b1 100644 --- a/frontend/src/components/basic/dialog/AddApiKeyDialog.tsx +++ b/frontend/src/components/basic/dialog/AddApiKeyDialog.tsx @@ -1,21 +1,21 @@ -import { Fragment, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { faCheck, faCopy } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { Dialog, Transition } from '@headlessui/react'; +import { Fragment, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { faCheck, faCopy } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { Dialog, Transition } from "@headlessui/react"; -import addAPIKey from '@app/pages/api/apiKey/addAPIKey'; +import addAPIKey from "@app/pages/api/apiKey/addAPIKey"; -import Button from '../buttons/Button'; -import InputField from '../InputField'; -import ListBox from '../Listbox'; +import Button from "../buttons/Button"; +import InputField from "../InputField"; +import ListBox from "../Listbox"; const expiryMapping = { - '1 day': 86400, - '7 days': 604800, - '1 month': 2592000, - '6 months': 15552000, - '12 months': 31104000 + "1 day": 86400, + "7 days": 604800, + "1 month": 2592000, + "6 months": 15552000, + "12 months": 31104000 }; type Props = { @@ -28,9 +28,9 @@ type Props = { // TODO: convert to TS const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }: Props) => { - const [apiKey, setApiKey] = useState(''); - const [apiKeyName, setApiKeyName] = useState(''); - const [apiKeyExpiresIn, setApiKeyExpiresIn] = useState('1 day'); + const [apiKey, setApiKey] = useState(""); + const [apiKeyName, setApiKeyName] = useState(""); + const [apiKeyExpiresIn, setApiKeyExpiresIn] = useState("1 day"); const [apiKeyCopied, setApiKeyCopied] = useState(false); const { t } = useTranslation(); @@ -46,7 +46,7 @@ const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }: Props) => function copyToClipboard() { // Get the text field - const copyText = document.getElementById('apiKey') as HTMLInputElement; + const copyText = document.getElementById("apiKey") as HTMLInputElement; // Select the text field copyText.select(); @@ -63,8 +63,8 @@ const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }: Props) => const closeAddApiKeyModal = () => { closeModal(); - setApiKeyName(''); - setApiKey(''); + setApiKeyName(""); + setApiKey(""); }; return ( @@ -94,24 +94,24 @@ const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }: Props) => leaveFrom="opacity-100 scale-100" leaveTo="opacity-0 scale-95" > - {apiKey === '' ? ( + {apiKey === "" ? ( - {t('section.api-key.add-dialog.title')} + {t("section.api-key.add-dialog.title")}

- {t('section.api-key.add-dialog.description')} + {t("section.api-key.add-dialog.description")}

@@ -133,10 +133,10 @@ const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }: Props) =>

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 w-lM|2Ny6mjQ{`u diff --git a/docs/images/project-token-added.png b/docs/images/project-token-added.png index 302a862803c8889580054ee63574f7f5cb9b9159..fb47f35250b55ee4a333de4d8a5ab5df1be7232c 100644 GIT binary patch literal 344526 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 literal 348086 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

@@ -147,12 +147,12 @@ const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }: Props) => as="h3" className="z-50 text-lg font-medium leading-6 text-gray-400" > - {t('section.api-key.add-dialog.copy-service-token')} + {t("section.api-key.add-dialog.copy-service-token")}

- {t('section.api-key.add-dialog.copy-service-token-description')} + {t("section.api-key.add-dialog.copy-service-token-description")}

@@ -181,7 +181,7 @@ const AddApiKeyDialog = ({ isOpen, closeModal, apiKeys, setApiKeys }: Props) => )} - {t('common.click-to-copy')} + {t("common.click-to-copy")}
diff --git a/frontend/src/components/basic/dialog/AddIncidentContactDialog.tsx b/frontend/src/components/basic/dialog/AddIncidentContactDialog.tsx index 63535f2be..e3e8acaa1 100644 --- a/frontend/src/components/basic/dialog/AddIncidentContactDialog.tsx +++ b/frontend/src/components/basic/dialog/AddIncidentContactDialog.tsx @@ -1,11 +1,11 @@ -import { Fragment, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { Dialog, Transition } from '@headlessui/react'; +import { Fragment, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { Dialog, Transition } from "@headlessui/react"; -import addIncidentContact from '@app/pages/api/organization/addIncidentContact'; +import addIncidentContact from "@app/pages/api/organization/addIncidentContact"; -import Button from '../buttons/Button'; -import InputField from '../InputField'; +import Button from "../buttons/Button"; +import InputField from "../InputField"; type Props = { isOpen: boolean; @@ -20,7 +20,7 @@ const AddIncidentContactDialog = ({ incidentContacts, setIncidentContacts }: Props) => { - const [incidentContactEmail, setIncidentContactEmail] = useState(''); + const [incidentContactEmail, setIncidentContactEmail] = useState(""); const { t } = useTranslation(); const submit = () => { @@ -29,7 +29,7 @@ const AddIncidentContactDialog = ({ ? incidentContacts.concat([incidentContactEmail]) : [incidentContactEmail] ); - addIncidentContact(localStorage.getItem('orgData.id') as string, incidentContactEmail); + addIncidentContact(localStorage.getItem("orgData.id") as string, incidentContactEmail); closeModal(); }; return ( @@ -61,16 +61,16 @@ const AddIncidentContactDialog = ({ > - {t('section.incident.add-dialog.title')} + {t("section.incident.add-dialog.title")}

- {t('section.incident.add-dialog.description')} + {t("section.incident.add-dialog.description")}

diff --git a/frontend/src/components/basic/dialog/AddProjectMemberDialog.tsx b/frontend/src/components/basic/dialog/AddProjectMemberDialog.tsx index aceeb9db9..2a25c8be6 100644 --- a/frontend/src/components/basic/dialog/AddProjectMemberDialog.tsx +++ b/frontend/src/components/basic/dialog/AddProjectMemberDialog.tsx @@ -1,10 +1,10 @@ -import { Fragment } from 'react'; -import { Trans, useTranslation } from 'react-i18next'; -import { useRouter } from 'next/router'; -import { Dialog, Transition } from '@headlessui/react'; +import { Fragment } from "react"; +import { Trans, useTranslation } from "react-i18next"; +import { useRouter } from "next/router"; +import { Dialog, Transition } from "@headlessui/react"; -import Button from '../buttons/Button'; -import ListBox from '../Listbox'; +import Button from "../buttons/Button"; +import ListBox from "../Listbox"; type Props = { isOpen: boolean; @@ -59,21 +59,21 @@ const AddProjectMemberDialog = ({ as="h3" className="z-50 text-lg font-medium leading-6 text-gray-400" > - {t('section.members.add-dialog.add-member-to-project')} + {t("section.members.add-dialog.add-member-to-project")} ) : ( - {t('section.members.add-dialog.already-all-invited')} + {t("section.members.add-dialog.already-all-invited")} )}
{data?.length > 0 ? (

- {t('section.members.add-dialog.user-will-email')} + {t("section.members.add-dialog.user-will-email")}

) : (

- {t('section.members.add-dialog.add-user-org-first')} + {t("section.members.add-dialog.add-user-org-first")}

)}
@@ -121,7 +121,7 @@ const AddProjectMemberDialog = ({
@@ -129,7 +129,7 @@ const AddProjectMemberDialog = ({
@@ -211,12 +211,12 @@ const AddServiceTokenDialog = ({ as="h3" className="z-50 text-lg font-medium leading-6 text-gray-400" > - {t('section.token.add-dialog.copy-service-token')} + {t("section.token.add-dialog.copy-service-token")}

- {t('section.token.add-dialog.copy-service-token-description')} + {t("section.token.add-dialog.copy-service-token-description")}

@@ -244,7 +244,7 @@ const AddServiceTokenDialog = ({ )} - {t('common.click-to-copy')} + {t("common.click-to-copy")}
diff --git a/frontend/src/components/basic/dialog/AddUpdateEnvironmentDialog.tsx b/frontend/src/components/basic/dialog/AddUpdateEnvironmentDialog.tsx index 70e9b0f47..de5337ae6 100644 --- a/frontend/src/components/basic/dialog/AddUpdateEnvironmentDialog.tsx +++ b/frontend/src/components/basic/dialog/AddUpdateEnvironmentDialog.tsx @@ -1,8 +1,8 @@ -import { FormEventHandler, Fragment, useEffect, useState } from 'react'; -import { Dialog, Transition } from '@headlessui/react'; +import { FormEventHandler, Fragment, useEffect, useState } from "react"; +import { Dialog, Transition } from "@headlessui/react"; -import Button from '../buttons/Button'; -import InputField from '../InputField'; +import Button from "../buttons/Button"; +import InputField from "../InputField"; type FormFields = { name: string; slug: string }; @@ -31,14 +31,14 @@ export const AddUpdateEnvironmentDialog = ({ isEditMode, }: Props) => { const [formInput, setFormInput] = useState({ - name: '', - slug: '', + name: "", + slug: "", }); // This use effect can be removed when the unmount is happening from outside the component // When unmount happens outside state gets unmounted also useEffect(() => { - setFormInput(initialValues || { name: '', slug: '' }); + setFormInput(initialValues || { name: "", slug: "" }); }, [isOpen]); // REFACTOR: Move to react-hook-form with yup for better form management @@ -92,14 +92,14 @@ export const AddUpdateEnvironmentDialog = ({ className='text-lg font-medium leading-6 text-gray-400' > {isEditMode - ? 'Update environment' - : 'Create a new environment'} + ? "Update environment" + : "Create a new environment"}
onInputChange('name', val)} + onChangeHandler={(val) => onInputChange("name", val)} type='varName' value={formInput.name} placeholder='' @@ -111,7 +111,7 @@ export const AddUpdateEnvironmentDialog = ({
onInputChange('slug', val)} + onChangeHandler={(val) => onInputChange("slug", val)} type='varName' value={formInput.slug} placeholder='' @@ -128,8 +128,8 @@ export const AddUpdateEnvironmentDialog = ({ onButtonPressed={() => null} type='submit' color='mineshaft' - text={isEditMode ? 'Update' : 'Create'} - active={formInput.name !== '' && formInput.slug !== ''} + text={isEditMode ? "Update" : "Create"} + active={formInput.name !== "" && formInput.slug !== ""} size='md' />
diff --git a/frontend/src/components/basic/dialog/AddUserDialog.tsx b/frontend/src/components/basic/dialog/AddUserDialog.tsx index 68ce24696..b36c31d6c 100644 --- a/frontend/src/components/basic/dialog/AddUserDialog.tsx +++ b/frontend/src/components/basic/dialog/AddUserDialog.tsx @@ -1,8 +1,8 @@ -import { Fragment } from 'react'; -import { Dialog, Transition } from '@headlessui/react'; +import { Fragment } from "react"; +import { Dialog, Transition } from "@headlessui/react"; -import Button from '../buttons/Button'; -import InputField from '../InputField'; +import Button from "../buttons/Button"; +import InputField from "../InputField"; type Props = { isOpen: boolean; diff --git a/frontend/src/components/basic/dialog/DeleteActionModal.tsx b/frontend/src/components/basic/dialog/DeleteActionModal.tsx index 05fd66a71..712946679 100644 --- a/frontend/src/components/basic/dialog/DeleteActionModal.tsx +++ b/frontend/src/components/basic/dialog/DeleteActionModal.tsx @@ -1,7 +1,7 @@ -import { Fragment, useEffect, useState } from 'react'; -import { Dialog, Transition } from '@headlessui/react'; +import { Fragment, useEffect, useState } from "react"; +import { Dialog, Transition } from "@headlessui/react"; -import InputField from '../InputField'; +import InputField from "../InputField"; // REFACTOR: Move all these modals into one reusable one type Props = { diff --git a/frontend/src/components/basic/dialog/DeleteEnvVar.tsx b/frontend/src/components/basic/dialog/DeleteEnvVar.tsx index 6daed29fd..d2bcf5505 100644 --- a/frontend/src/components/basic/dialog/DeleteEnvVar.tsx +++ b/frontend/src/components/basic/dialog/DeleteEnvVar.tsx @@ -47,11 +47,11 @@ export const DeleteEnvVar = ({ isOpen, onClose, onSubmit }: Props) => { > - {t('dashboard:sidebar.delete-key-dialog.title')} + {t("dashboard:sidebar.delete-key-dialog.title")}

- {t('dashboard:sidebar.delete-key-dialog.confirm-delete-message')} + {t("dashboard:sidebar.delete-key-dialog.confirm-delete-message")}

diff --git a/frontend/src/components/basic/dialog/DeleteUserDialog.tsx b/frontend/src/components/basic/dialog/DeleteUserDialog.tsx index 883e241c0..9b6ecf012 100644 --- a/frontend/src/components/basic/dialog/DeleteUserDialog.tsx +++ b/frontend/src/components/basic/dialog/DeleteUserDialog.tsx @@ -1,5 +1,5 @@ -import { Fragment } from 'react'; -import { Dialog, Transition } from '@headlessui/react'; +import { Fragment } from "react"; +import { Dialog, Transition } from "@headlessui/react"; // #TODO: USE THIS. Currently it's not. Kinda complicated to set up because of state. diff --git a/frontend/src/components/basic/dialog/UpgradePlan.tsx b/frontend/src/components/basic/dialog/UpgradePlan.tsx index 95993c6a6..2573036eb 100644 --- a/frontend/src/components/basic/dialog/UpgradePlan.tsx +++ b/frontend/src/components/basic/dialog/UpgradePlan.tsx @@ -1,6 +1,6 @@ -import { Fragment } from 'react'; -import { useRouter } from 'next/router'; -import { Dialog, Transition } from '@headlessui/react'; +import { Fragment } from "react"; +import { useRouter } from "next/router"; +import { Dialog, Transition } from "@headlessui/react"; // REFACTOR: Move all these modals into one reusable one type Props = { diff --git a/frontend/src/components/basic/popups/BottomRightPopup.tsx b/frontend/src/components/basic/popups/BottomRightPopup.tsx index 58d8a498e..9a2938ad6 100644 --- a/frontend/src/components/basic/popups/BottomRightPopup.tsx +++ b/frontend/src/components/basic/popups/BottomRightPopup.tsx @@ -1,5 +1,5 @@ -import { faXmark } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faXmark } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; interface PopupProps { buttonText: string; diff --git a/frontend/src/components/basic/table/ApiKeyTable.tsx b/frontend/src/components/basic/table/ApiKeyTable.tsx index 800ea7356..1522df00d 100644 --- a/frontend/src/components/basic/table/ApiKeyTable.tsx +++ b/frontend/src/components/basic/table/ApiKeyTable.tsx @@ -1,10 +1,10 @@ -import { faX } from '@fortawesome/free-solid-svg-icons'; +import { faX } from "@fortawesome/free-solid-svg-icons"; -import { useNotificationContext } from '@app/components/context/Notifications/NotificationProvider'; +import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; -import deleteAPIKey from '../../../pages/api/apiKey/deleteAPIKey'; -import guidGenerator from '../../utilities/randomId'; -import Button from '../buttons/Button'; +import deleteAPIKey from "../../../pages/api/apiKey/deleteAPIKey"; +import guidGenerator from "../../utilities/randomId"; +import Button from "../buttons/Button"; interface TokenProps { _id: string; @@ -58,7 +58,7 @@ const ApiKeyTable = ({ data, setApiKeys }: ServiceTokensProps) => { setApiKeys(data.filter((token) => token._id !== row._id)); createNotification({ text: `'${row.name}' API key has been revoked.`, - type: 'error' + type: "error" }); }} color="red" diff --git a/frontend/src/components/basic/table/EnvironmentsTable.tsx b/frontend/src/components/basic/table/EnvironmentsTable.tsx index 1a3ffe906..b9c94534a 100644 --- a/frontend/src/components/basic/table/EnvironmentsTable.tsx +++ b/frontend/src/components/basic/table/EnvironmentsTable.tsx @@ -1,13 +1,13 @@ -import { useEffect, useState } from 'react'; -import { faPencil, faPlus, faX } from '@fortawesome/free-solid-svg-icons'; -import { plans } from 'public/data/frequentConstants'; +import { useEffect, useState } from "react"; +import { faPencil, faPlus, faX } from "@fortawesome/free-solid-svg-icons"; +import { plans } from "public/data/frequentConstants"; -import { usePopUp } from '../../../hooks/usePopUp'; -import getOrganizationSubscriptions from '../../../pages/api/organization/GetOrgSubscription'; -import Button from '../buttons/Button'; -import { AddUpdateEnvironmentDialog } from '../dialog/AddUpdateEnvironmentDialog'; -import DeleteActionModal from '../dialog/DeleteActionModal'; -import UpgradePlanModal from '../dialog/UpgradePlan'; +import { usePopUp } from "../../../hooks/usePopUp"; +import getOrganizationSubscriptions from "../../../pages/api/organization/GetOrgSubscription"; +import Button from "../buttons/Button"; +import { AddUpdateEnvironmentDialog } from "../dialog/AddUpdateEnvironmentDialog"; +import DeleteActionModal from "../dialog/DeleteActionModal"; +import UpgradePlanModal from "../dialog/UpgradePlan"; type Env = { name: string; slug: string }; @@ -20,17 +20,17 @@ type Props = { const EnvironmentTable = ({ data = [], onCreateEnv, onDeleteEnv, onUpdateEnv }: Props) => { const { popUp, handlePopUpOpen, handlePopUpClose } = usePopUp([ - 'createUpdateEnv', - 'deleteEnv', - 'upgradePlan' + "createUpdateEnv", + "deleteEnv", + "upgradePlan" ] as const); - const [plan, setPlan] = useState(''); + const [plan, setPlan] = useState(""); const host = window.location.origin; useEffect(() => { // on initial load - run auth check (async () => { - const orgId = localStorage.getItem('orgData.id') as string; + const orgId = localStorage.getItem("orgData.id") as string; const subscriptions = await getOrganizationSubscriptions({ orgId }); @@ -44,7 +44,7 @@ const EnvironmentTable = ({ data = [], onCreateEnv, onDeleteEnv, onUpdateEnv }: const onEnvCreateCB = async (env: Env) => { try { await onCreateEnv(env); - handlePopUpClose('createUpdateEnv'); + handlePopUpClose("createUpdateEnv"); } catch (error) { console.error(error); } @@ -52,8 +52,8 @@ const EnvironmentTable = ({ data = [], onCreateEnv, onDeleteEnv, onUpdateEnv }: const onEnvUpdateCB = async (env: Env) => { try { - await onUpdateEnv((popUp.createUpdateEnv?.data as Pick)?.slug, env); - handlePopUpClose('createUpdateEnv'); + await onUpdateEnv((popUp.createUpdateEnv?.data as Pick)?.slug, env); + handlePopUpClose("createUpdateEnv"); } catch (error) { console.error(error); } @@ -61,8 +61,8 @@ const EnvironmentTable = ({ data = [], onCreateEnv, onDeleteEnv, onUpdateEnv }: const onEnvDeleteCB = async () => { try { - await onDeleteEnv((popUp.deleteEnv?.data as Pick)?.slug); - handlePopUpClose('deleteEnv'); + await onDeleteEnv((popUp.deleteEnv?.data as Pick)?.slug); + handlePopUpClose("deleteEnv"); } catch (error) { console.error(error); } @@ -85,10 +85,10 @@ const EnvironmentTable = ({ data = [], onCreateEnv, onDeleteEnv, onUpdateEnv }:
diff --git a/frontend/src/components/basic/table/ProjectUsersTable.tsx b/frontend/src/components/basic/table/ProjectUsersTable.tsx index 0f6df98d3..a94d2b313 100644 --- a/frontend/src/components/basic/table/ProjectUsersTable.tsx +++ b/frontend/src/components/basic/table/ProjectUsersTable.tsx @@ -1,22 +1,22 @@ -import { useEffect, useState } from 'react'; -import { useRouter } from 'next/router'; -import { faEye, faEyeSlash, faPenToSquare, faPlus, faX } from '@fortawesome/free-solid-svg-icons'; -import { plans } from 'public/data/frequentConstants'; +import { useEffect, useState } from "react"; +import { useRouter } from "next/router"; +import { faEye, faEyeSlash, faPenToSquare, faPlus, faX } from "@fortawesome/free-solid-svg-icons"; +import { plans } from "public/data/frequentConstants"; -import { useNotificationContext } from '@app/components/context/Notifications/NotificationProvider'; -import { Select, SelectItem } from '@app/components/v2'; -import updateUserProjectPermission from '@app/ee/api/memberships/UpdateUserProjectPermission'; -import getOrganizationSubscriptions from '@app/pages/api/organization/GetOrgSubscription'; -import changeUserRoleInWorkspace from '@app/pages/api/workspace/changeUserRoleInWorkspace'; -import deleteUserFromWorkspace from '@app/pages/api/workspace/deleteUserFromWorkspace'; -import getLatestFileKey from '@app/pages/api/workspace/getLatestFileKey'; -import getProjectInfo from '@app/pages/api/workspace/getProjectInfo'; -import uploadKeys from '@app/pages/api/workspace/uploadKeys'; +import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; +import { Select, SelectItem } from "@app/components/v2"; +import updateUserProjectPermission from "@app/ee/api/memberships/UpdateUserProjectPermission"; +import getOrganizationSubscriptions from "@app/pages/api/organization/GetOrgSubscription"; +import changeUserRoleInWorkspace from "@app/pages/api/workspace/changeUserRoleInWorkspace"; +import deleteUserFromWorkspace from "@app/pages/api/workspace/deleteUserFromWorkspace"; +import getLatestFileKey from "@app/pages/api/workspace/getLatestFileKey"; +import getProjectInfo from "@app/pages/api/workspace/getProjectInfo"; +import uploadKeys from "@app/pages/api/workspace/uploadKeys"; -import { decryptAssymmetric, encryptAssymmetric } from '../../utilities/cryptography/crypto'; -import guidGenerator from '../../utilities/randomId'; -import Button from '../buttons/Button'; -import UpgradePlanModal from '../dialog/UpgradePlan'; +import { decryptAssymmetric, encryptAssymmetric } from "../../utilities/cryptography/crypto"; +import guidGenerator from "../../utilities/randomId"; +import Button from "../buttons/Button"; +import UpgradePlanModal from "../dialog/UpgradePlan"; // const roles = ['admin', 'user']; // TODO: Set type for this @@ -45,8 +45,8 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa ); const host = window.location.origin; const router = useRouter(); - const [myRole, setMyRole] = useState('member'); - const [currentPlan, setCurrentPlan] = useState(''); + const [myRole, setMyRole] = useState("member"); + const [currentPlan, setCurrentPlan] = useState(""); const [workspaceEnvs, setWorkspaceEnvs] = useState([]); const [isUpgradeModalOpen, setIsUpgradeModalOpen] = useState(false); const { createNotification } = useNotificationContext(); @@ -87,8 +87,8 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa ...userData.slice(index + 1, userData?.length) ]); createNotification({ - text: `Successfully changed user role.`, - type: 'success' + text: "Successfully changed user role.", + type: "success" }); }; @@ -99,28 +99,28 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa slug: string ) => { let denials: { ability: string; environmentSlug: string }[]; - if (val === 'Read Only') { + if (val === "Read Only") { denials = [ { - ability: 'write', + ability: "write", environmentSlug: slug } ]; - } else if (val === 'No Access') { + } else if (val === "No Access") { denials = [ { - ability: 'write', + ability: "write", environmentSlug: slug }, { - ability: 'read', + ability: "read", environmentSlug: slug } ]; - } else if (val === 'Add Only') { + } else if (val === "Add Only") { denials = [ { - ability: 'read', + ability: "read", environmentSlug: slug } ]; @@ -128,7 +128,7 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa denials = []; } - if (currentPlan !== plans.professional && host === 'https://app.infisical.com' && workspaceId !== '63ea8121b6e2b0543ba79616') { + if (currentPlan !== plans.professional && host === "https://app.infisical.com" && workspaceId !== "63ea8121b6e2b0543ba79616") { setIsUpgradeModalOpen(true); } else { const allDenials = userData[index].deniedPermissions @@ -156,8 +156,8 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa ...userData.slice(index + 1, userData?.length) ]); createNotification({ - text: `Successfully changed user permissions.`, - type: 'success' + text: "Successfully changed user permissions.", + type: "success" }); } }; @@ -168,7 +168,7 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa const result = await getProjectInfo({ projectId: workspaceId }); setWorkspaceEnvs(result.environments); - const orgId = localStorage.getItem('orgData.id') as string; + const orgId = localStorage.getItem("orgData.id") as string; const subscriptions = await getOrganizationSubscriptions({ orgId }); @@ -181,7 +181,7 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa const grantAccess = async (id: string, publicKey: string) => { const result = await getLatestFileKey({ workspaceId }); - const PRIVATE_KEY = localStorage.getItem('PRIVATE_KEY') as string; + const PRIVATE_KEY = localStorage.getItem("PRIVATE_KEY") as string; // assymmetrically decrypt symmetric key with local private key const key = decryptAssymmetric({ @@ -261,13 +261,13 @@ const ProjectUsersTable = ({ userData, changeData, myUser, filter, isUserListLoa // open={isOpen} onValueChange={(e) => handleRoleUpdate(index, e)} value={row.role} - isDisabled={myRole !== 'admin' || myUser === row.email} + isDisabled={myRole !== "admin" || myUser === row.email} // onOpenChange={(open) => setIsOpen(open)} > Admin Member - {row.status === 'completed' && myUser !== row.email && ( + {row.status === "completed" && myUser !== row.email && (
)} - {row.status === 'completed' && myUser !== row.email && ( + {row.status === "completed" && myUser !== row.email && (