mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-11 09:08:28 +00:00
Feat: init cli automatically populate trigger database
This commit is contained in:
parent
0367f111c0
commit
7bf1bd9128
@ -56,4 +56,4 @@ MODEL=gpt-4.1-2025-04-14
|
||||
## Trigger ##
|
||||
TRIGGER_PROJECT_ID=
|
||||
TRIGGER_SECRET_KEY=
|
||||
TRIGGER_API_URL=http://localhost:8030
|
||||
TRIGGER_API_URL=http://host.docker.internal:8030
|
||||
|
||||
@ -6,7 +6,6 @@ import {
|
||||
} from "@remix-run/node";
|
||||
|
||||
import { env } from "~/env.server";
|
||||
import { createThemeSessionResolver } from "remix-themes";
|
||||
|
||||
export type ToastMessage = {
|
||||
message: string;
|
||||
|
||||
@ -9,7 +9,7 @@ export const sessionStorage = createCookieSessionStorage<{
|
||||
[SESSION_KEY]: AuthUser;
|
||||
}>({
|
||||
cookie: {
|
||||
name: "__session", // use any name you want here
|
||||
name: "__session__core", // use any name you want here
|
||||
sameSite: "lax", // this helps with CSRF
|
||||
path: "/", // remember to add this so the cookie will work in all routes
|
||||
httpOnly: true, // for security reasons, make this cookie http only
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@redplanethq/core",
|
||||
"version": "0.1.3",
|
||||
"version": "0.1.4",
|
||||
"description": "A Command-Line Interface for Core",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@ -107,11 +107,13 @@
|
||||
"nypm": "^0.5.4",
|
||||
"object-hash": "^3.0.0",
|
||||
"open": "^10.0.3",
|
||||
"knex": "3.1.0",
|
||||
"p-limit": "^6.2.0",
|
||||
"p-retry": "^6.1.0",
|
||||
"partysocket": "^1.0.2",
|
||||
"pkg-types": "^1.1.3",
|
||||
"polka": "^0.5.2",
|
||||
"pg": "8.16.3",
|
||||
"resolve": "^1.22.8",
|
||||
"semver": "^7.5.0",
|
||||
"signal-exit": "^4.1.0",
|
||||
@ -121,6 +123,7 @@
|
||||
"tiny-invariant": "^1.2.0",
|
||||
"tinyexec": "^0.3.1",
|
||||
"tinyglobby": "^0.2.10",
|
||||
"uuid": "11.1.0",
|
||||
"ws": "^8.18.0",
|
||||
"xdg-app-paths": "^8.3.0",
|
||||
"zod": "3.23.8",
|
||||
|
||||
@ -5,10 +5,11 @@ import { executeCommandInteractive } from "../utils/docker-interactive.js";
|
||||
import { printCoreBrainLogo } from "../utils/ascii.js";
|
||||
import { setupEnvFile } from "../utils/env.js";
|
||||
import { hasTriggerConfig } from "../utils/env-checker.js";
|
||||
import { getDockerCompatibleEnvVars } from "../utils/env-docker.js";
|
||||
import { handleDockerLogin } from "../utils/docker-login.js";
|
||||
import { deployTriggerTasks } from "../utils/trigger-deploy.js";
|
||||
import path from "path";
|
||||
import * as fs from "fs";
|
||||
import { initTriggerDatabase } from "../utils/database-init.js";
|
||||
|
||||
export async function initCommand() {
|
||||
// Display the CORE brain logo
|
||||
@ -22,9 +23,19 @@ export async function initCommand() {
|
||||
"📋 Prerequisites"
|
||||
);
|
||||
|
||||
const isCoreRepo = await confirm({
|
||||
message: "Are you currently in the Core repository directory?",
|
||||
});
|
||||
// Check if package.json name has "core" in it, else exit
|
||||
const pkgPath = path.join(process.cwd(), "package.json");
|
||||
let isCoreRepo = false;
|
||||
try {
|
||||
if (fs.existsSync(pkgPath)) {
|
||||
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
||||
if (typeof pkg.name === "string" && pkg.name.includes("core")) {
|
||||
isCoreRepo = true;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
// ignore, will prompt below
|
||||
}
|
||||
|
||||
if (!isCoreRepo) {
|
||||
note(
|
||||
@ -132,58 +143,9 @@ export async function initCommand() {
|
||||
} else {
|
||||
// Step 8: Show login instructions
|
||||
outro("🎉 Docker containers are now running!");
|
||||
note(
|
||||
"1. Open http://localhost:8030 in your browser\n2. Login to Trigger.dev (check container logs with: docker logs trigger-webapp --tail 50)",
|
||||
"Next Steps"
|
||||
);
|
||||
|
||||
const loginConfirmed = await confirm({
|
||||
message: "Have you logged in to Trigger.dev successfully?",
|
||||
});
|
||||
|
||||
if (!loginConfirmed) {
|
||||
outro("❌ Setup cancelled. Please login to Trigger.dev first and run the command again.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Step 9: Get project details
|
||||
note(
|
||||
"1. Create a new organization and project\n2. Go to project settings\n3. Copy the Project ID and Secret Key",
|
||||
"In Trigger.dev (http://localhost:8030)"
|
||||
);
|
||||
|
||||
const projectCreated = await confirm({
|
||||
message: "Have you created an organization and project in Trigger.dev?",
|
||||
});
|
||||
|
||||
if (!projectCreated) {
|
||||
outro(
|
||||
"❌ Setup cancelled. Please create an organization and project first and run the command again."
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Step 10: Get project ID and secret
|
||||
const projectId = await text({
|
||||
message: "Enter your Trigger.dev Project ID:",
|
||||
validate: (value) => {
|
||||
if (!value || value.length === 0) {
|
||||
return "Project ID is required";
|
||||
}
|
||||
return;
|
||||
},
|
||||
});
|
||||
|
||||
const secretKey = await text({
|
||||
message: "Enter your Trigger.dev Secret Key for production:",
|
||||
validate: (value) => {
|
||||
if (!value || value.length === 0) {
|
||||
return "Secret Key is required";
|
||||
}
|
||||
return;
|
||||
},
|
||||
});
|
||||
const { prodSecretKey, projectRefId } = await initTriggerDatabase(triggerDir);
|
||||
|
||||
console.log(prodSecretKey, projectRefId);
|
||||
const openaiApiKey = await text({
|
||||
message: "Enter your OpenAI API Key:",
|
||||
validate: (value) => {
|
||||
@ -199,8 +161,8 @@ export async function initCommand() {
|
||||
s6.start("Updating .env with Trigger.dev configuration...");
|
||||
|
||||
try {
|
||||
await updateEnvFile(envPath, "TRIGGER_PROJECT_ID", projectId as string);
|
||||
await updateEnvFile(envPath, "TRIGGER_SECRET_KEY", secretKey as string);
|
||||
await updateEnvFile(envPath, "TRIGGER_PROJECT_ID", projectRefId as string);
|
||||
await updateEnvFile(envPath, "TRIGGER_SECRET_KEY", prodSecretKey as string);
|
||||
await updateEnvFile(envPath, "OPENAI_API_KEY", openaiApiKey as string);
|
||||
s6.stop("✅ Updated .env with Trigger.dev configuration");
|
||||
} catch (error: any) {
|
||||
|
||||
238
packages/core-cli/src/utils/database-init.ts
Normal file
238
packages/core-cli/src/utils/database-init.ts
Normal file
@ -0,0 +1,238 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import Knex, { Knex as KnexT } from "knex";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import nodeCrypto from "node:crypto";
|
||||
import dotenv from "dotenv";
|
||||
import dotenvExpand from "dotenv-expand";
|
||||
import path from "node:path";
|
||||
import { log } from "@clack/prompts";
|
||||
|
||||
// Generate a new token similar to the original: "tr_pat_" + 40 lowercase alphanumeric chars
|
||||
function generatePersonalToken(count: number) {
|
||||
const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
|
||||
let token = "tr_pat_";
|
||||
for (let i = 0; i < count; i++) {
|
||||
token += chars.charAt(Math.floor(Math.random() * chars.length));
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
// Generate tokens internally
|
||||
const TRIGGER_TOKEN = nodeCrypto.randomBytes(32).toString("hex");
|
||||
const COMMON_ID = "9ea0412ea8ef441ca03c7952d011ab56";
|
||||
const key = generatePersonalToken(20);
|
||||
|
||||
export async function createOrg(knex: KnexT) {
|
||||
try {
|
||||
log.step("Checking for existing CORE user and organization...");
|
||||
const existingUser = await knex("User").where({ id: COMMON_ID }).first();
|
||||
|
||||
if (existingUser) {
|
||||
log.info("CORE user and organization already exist. Skipping creation.");
|
||||
return COMMON_ID; // User already exists, return the ID
|
||||
}
|
||||
|
||||
log.step("Creating CORE user, organization, and org member...");
|
||||
// Create new entries using a transaction
|
||||
await knex.transaction(async (trx) => {
|
||||
// Create User
|
||||
await trx("User").insert({
|
||||
id: COMMON_ID,
|
||||
admin: true,
|
||||
authenticationMethod: "MAGIC_LINK",
|
||||
displayName: "CORE",
|
||||
email: "core@heysol.ai",
|
||||
name: "CORE",
|
||||
confirmedBasicDetails: true,
|
||||
updatedAt: new Date(),
|
||||
});
|
||||
|
||||
// Create Organization
|
||||
await trx("Organization").insert({
|
||||
id: COMMON_ID,
|
||||
slug: "CORE",
|
||||
title: "CORE",
|
||||
v3Enabled: true,
|
||||
updatedAt: new Date(),
|
||||
});
|
||||
|
||||
// Create OrgMember
|
||||
await trx("OrgMember").insert({
|
||||
id: COMMON_ID,
|
||||
organizationId: COMMON_ID,
|
||||
userId: COMMON_ID,
|
||||
role: "ADMIN",
|
||||
updatedAt: new Date(),
|
||||
});
|
||||
});
|
||||
|
||||
log.success("CORE user, organization, and org member created.");
|
||||
return COMMON_ID;
|
||||
} catch (error) {
|
||||
log.error(`Error creating org: ${error}`);
|
||||
throw new Error(`Error creating org: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
export async function createPersonalToken(knex: KnexT) {
|
||||
const id = uuidv4().replace(/-/g, "");
|
||||
|
||||
log.step("Checking for existing personal access token for CLI user...");
|
||||
const existingToken = await knex("PersonalAccessToken")
|
||||
.where({ userId: COMMON_ID, name: "cli" })
|
||||
.first();
|
||||
|
||||
if (existingToken) {
|
||||
log.info("Personal access token for CLI already exists. Skipping creation.");
|
||||
return;
|
||||
}
|
||||
|
||||
log.step("Creating CLI personal access token...");
|
||||
// Generate a new token similar to the original: "tr_pat_" + 40 lowercase alphanumeric chars
|
||||
|
||||
const personalToken = generatePersonalToken(40);
|
||||
await knex("PersonalAccessToken").insert({
|
||||
id,
|
||||
name: "cli",
|
||||
userId: COMMON_ID,
|
||||
updatedAt: new Date(),
|
||||
obfuscatedToken: personalToken,
|
||||
hashedToken: hashToken(personalToken),
|
||||
encryptedToken: {},
|
||||
});
|
||||
log.success("CLI personal access token created.");
|
||||
}
|
||||
|
||||
export async function createProject(knex: KnexT) {
|
||||
try {
|
||||
log.step("Checking if CORE project already exists for the organization...");
|
||||
const existingProject = await knex("Project")
|
||||
.where({ name: "CORE", organizationId: COMMON_ID })
|
||||
.first();
|
||||
|
||||
if (existingProject) {
|
||||
log.info(
|
||||
"CORE project already exists. Skipping creation of project and runtime environments."
|
||||
);
|
||||
// Fetch the prod runtime environment for this project
|
||||
const prodRuntimeEnv = await knex("RuntimeEnvironment")
|
||||
.where({
|
||||
projectId: existingProject.id,
|
||||
slug: "prod",
|
||||
})
|
||||
.first();
|
||||
|
||||
let prodSecret;
|
||||
if (prodRuntimeEnv && prodRuntimeEnv.apiKey) {
|
||||
prodSecret = prodRuntimeEnv.apiKey;
|
||||
} else {
|
||||
// fallback to old behavior if not found (should not happen)
|
||||
prodSecret = `tr_prod_${key}`;
|
||||
}
|
||||
|
||||
return {
|
||||
projectId: existingProject.id,
|
||||
prodSecret,
|
||||
projectRef: existingProject.externalRef || "proj_core",
|
||||
};
|
||||
}
|
||||
|
||||
const id = uuidv4().replace(/-/g, "");
|
||||
|
||||
log.step("Creating CORE project and runtime environments...");
|
||||
await knex.transaction(async (trx) => {
|
||||
await knex("Project")
|
||||
.insert({
|
||||
id,
|
||||
name: "CORE",
|
||||
organizationId: COMMON_ID,
|
||||
slug: "CORE",
|
||||
externalRef: `proj_core`,
|
||||
version: "V3",
|
||||
updatedAt: new Date(),
|
||||
})
|
||||
.transacting(trx);
|
||||
|
||||
await knex("RuntimeEnvironment")
|
||||
.insert(
|
||||
["dev", "stg", "prod"].map((env: string) => ({
|
||||
id: uuidv4(),
|
||||
slug: env,
|
||||
apiKey: `tr_${env}_${key}`,
|
||||
organizationId: COMMON_ID,
|
||||
orgMemberId: COMMON_ID,
|
||||
projectId: id,
|
||||
type: env === "prod" ? "PRODUCTION" : env === "stg" ? "STAGING" : "DEVELOPMENT",
|
||||
pkApiKey: `tr_pk_${env}${key}`,
|
||||
shortcode: env,
|
||||
updatedAt: new Date(),
|
||||
}))
|
||||
)
|
||||
.transacting(trx);
|
||||
});
|
||||
|
||||
log.success("CORE project and runtime environments created.");
|
||||
return { projectId: id, prodSecret: `tr_prod_${key}`, projectRef: `proj_core` };
|
||||
} catch (error) {
|
||||
log.error(`Error creating project: ${error}`);
|
||||
throw new Error(`Error creating project: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
export function encryptToken(value: string) {
|
||||
const nonce = nodeCrypto.randomBytes(12);
|
||||
const cipher = nodeCrypto.createCipheriv("aes-256-gcm", TRIGGER_TOKEN, nonce);
|
||||
|
||||
let encrypted = cipher.update(value, "utf8", "hex");
|
||||
encrypted += cipher.final("hex");
|
||||
|
||||
const tag = cipher.getAuthTag().toString("hex");
|
||||
|
||||
return {
|
||||
nonce: nonce.toString("hex"),
|
||||
ciphertext: encrypted,
|
||||
tag,
|
||||
};
|
||||
}
|
||||
|
||||
export function hashToken(token: string): string {
|
||||
const hash = nodeCrypto.createHash("sha256");
|
||||
hash.update(token);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
|
||||
// Main initialization function
|
||||
export async function initTriggerDatabase(triggerDir: string) {
|
||||
const envPath = path.join(triggerDir, ".env");
|
||||
log.step(`Loading environment variables from ${envPath}...`);
|
||||
const envVarsExpand =
|
||||
dotenvExpand.expand(dotenv.config({ path: envPath, processEnv: {} })).parsed || {};
|
||||
|
||||
const knex = Knex({
|
||||
client: "pg", // Use PostgreSQL as the database client
|
||||
connection: envVarsExpand.DIRECT_URL?.replace("host.docker.internal", "localhost"), // Database connection URL from environment variable
|
||||
});
|
||||
|
||||
try {
|
||||
log.step("Initializing Trigger.dev database...");
|
||||
|
||||
// Create organization and user
|
||||
await createOrg(knex);
|
||||
|
||||
// Create personal access token
|
||||
await createPersonalToken(knex);
|
||||
|
||||
// Create project and return details
|
||||
const projectDetails = await createProject(knex);
|
||||
|
||||
log.success("Trigger.dev database initialized successfully.");
|
||||
|
||||
return {
|
||||
prodSecretKey: projectDetails.prodSecret,
|
||||
projectRefId: projectDetails.projectRef,
|
||||
};
|
||||
} catch (error) {
|
||||
log.error(`Initialization failed: ${error}`);
|
||||
throw new Error(`Initialization failed: ${error}`);
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
|
||||
import dotenv from "dotenv";
|
||||
import dotenvExpand from "dotenv-expand";
|
||||
|
||||
@ -12,7 +12,6 @@ export async function getDockerCompatibleEnvVars(rootDir: string): Promise<Recor
|
||||
|
||||
try {
|
||||
// Use dotenv to parse and expand variables
|
||||
|
||||
const envVarsExpand =
|
||||
dotenvExpand.expand(dotenv.config({ path: envPath, processEnv: {} })).parsed || {};
|
||||
|
||||
|
||||
238
pnpm-lock.yaml
generated
238
pnpm-lock.yaml
generated
@ -604,6 +604,9 @@ importers:
|
||||
jsonc-parser:
|
||||
specifier: 3.2.1
|
||||
version: 3.2.1
|
||||
knex:
|
||||
specifier: 3.1.0
|
||||
version: 3.1.0(pg@8.16.3)(supports-color@10.0.0)
|
||||
magicast:
|
||||
specifier: ^0.3.4
|
||||
version: 0.3.5
|
||||
@ -631,6 +634,9 @@ importers:
|
||||
partysocket:
|
||||
specifier: ^1.0.2
|
||||
version: 1.1.4
|
||||
pg:
|
||||
specifier: 8.16.3
|
||||
version: 8.16.3
|
||||
pkg-types:
|
||||
specifier: ^1.1.3
|
||||
version: 1.3.1
|
||||
@ -664,6 +670,9 @@ importers:
|
||||
tinyglobby:
|
||||
specifier: ^0.2.10
|
||||
version: 0.2.14
|
||||
uuid:
|
||||
specifier: 11.1.0
|
||||
version: 11.1.0
|
||||
ws:
|
||||
specifier: ^8.18.0
|
||||
version: 8.18.3
|
||||
@ -5751,6 +5760,9 @@ packages:
|
||||
color@3.2.1:
|
||||
resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
|
||||
|
||||
colorette@2.0.19:
|
||||
resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
|
||||
|
||||
combined-stream@1.0.8:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
@ -6141,6 +6153,15 @@ packages:
|
||||
supports-color:
|
||||
optional: true
|
||||
|
||||
debug@4.3.4:
|
||||
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
||||
engines: {node: '>=6.0'}
|
||||
peerDependencies:
|
||||
supports-color: '*'
|
||||
peerDependenciesMeta:
|
||||
supports-color:
|
||||
optional: true
|
||||
|
||||
debug@4.3.7:
|
||||
resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
|
||||
engines: {node: '>=6.0'}
|
||||
@ -6667,6 +6688,10 @@ packages:
|
||||
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
|
||||
hasBin: true
|
||||
|
||||
esm@3.2.25:
|
||||
resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
espree@9.6.1:
|
||||
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
@ -7008,6 +7033,10 @@ packages:
|
||||
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
get-package-type@0.1.0:
|
||||
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
|
||||
get-port@5.1.1:
|
||||
resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
|
||||
engines: {node: '>=8'}
|
||||
@ -7035,6 +7064,9 @@ packages:
|
||||
get-tsconfig@4.10.1:
|
||||
resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
|
||||
|
||||
getopts@2.3.0:
|
||||
resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==}
|
||||
|
||||
giget@1.2.5:
|
||||
resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==}
|
||||
hasBin: true
|
||||
@ -7321,6 +7353,10 @@ packages:
|
||||
resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
interpret@2.2.0:
|
||||
resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==}
|
||||
engines: {node: '>= 0.10'}
|
||||
|
||||
ioredis@5.6.1:
|
||||
resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==}
|
||||
engines: {node: '>=12.22.0'}
|
||||
@ -7720,6 +7756,34 @@ packages:
|
||||
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
knex@3.1.0:
|
||||
resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==}
|
||||
engines: {node: '>=16'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
better-sqlite3: '*'
|
||||
mysql: '*'
|
||||
mysql2: '*'
|
||||
pg: '*'
|
||||
pg-native: '*'
|
||||
sqlite3: '*'
|
||||
tedious: '*'
|
||||
peerDependenciesMeta:
|
||||
better-sqlite3:
|
||||
optional: true
|
||||
mysql:
|
||||
optional: true
|
||||
mysql2:
|
||||
optional: true
|
||||
pg:
|
||||
optional: true
|
||||
pg-native:
|
||||
optional: true
|
||||
sqlite3:
|
||||
optional: true
|
||||
tedious:
|
||||
optional: true
|
||||
|
||||
language-subtag-registry@0.3.23:
|
||||
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
|
||||
|
||||
@ -8365,6 +8429,9 @@ packages:
|
||||
ms@2.0.0:
|
||||
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
|
||||
|
||||
ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
|
||||
ms@2.1.3:
|
||||
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
||||
|
||||
@ -8850,6 +8917,43 @@ packages:
|
||||
periscopic@3.1.0:
|
||||
resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
|
||||
|
||||
pg-cloudflare@1.2.7:
|
||||
resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==}
|
||||
|
||||
pg-connection-string@2.6.2:
|
||||
resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==}
|
||||
|
||||
pg-connection-string@2.9.1:
|
||||
resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==}
|
||||
|
||||
pg-int8@1.0.1:
|
||||
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
|
||||
engines: {node: '>=4.0.0'}
|
||||
|
||||
pg-pool@3.10.1:
|
||||
resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==}
|
||||
peerDependencies:
|
||||
pg: '>=8.0'
|
||||
|
||||
pg-protocol@1.10.3:
|
||||
resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==}
|
||||
|
||||
pg-types@2.2.0:
|
||||
resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
|
||||
engines: {node: '>=4'}
|
||||
|
||||
pg@8.16.3:
|
||||
resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==}
|
||||
engines: {node: '>= 16.0.0'}
|
||||
peerDependencies:
|
||||
pg-native: '>=3.0.1'
|
||||
peerDependenciesMeta:
|
||||
pg-native:
|
||||
optional: true
|
||||
|
||||
pgpass@1.0.5:
|
||||
resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
|
||||
|
||||
picocolors@0.2.1:
|
||||
resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
|
||||
|
||||
@ -9068,6 +9172,22 @@ packages:
|
||||
resolution: {integrity: sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
||||
postgres-array@2.0.0:
|
||||
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
|
||||
engines: {node: '>=4'}
|
||||
|
||||
postgres-bytea@1.0.0:
|
||||
resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
postgres-date@1.0.7:
|
||||
resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
postgres-interval@1.2.0:
|
||||
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
posthog-js@1.250.2:
|
||||
resolution: {integrity: sha512-g/H9lJhjhsYPnpxntqp36osK7oJ6CFqul2+mVUkaacAJUG4DqCG8iawsSnZvvUmapjapbf2HUA7PCRrpRsl06A==}
|
||||
peerDependencies:
|
||||
@ -9523,6 +9643,10 @@ packages:
|
||||
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
|
||||
engines: {node: '>= 14.18.0'}
|
||||
|
||||
rechoir@0.8.0:
|
||||
resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
|
||||
engines: {node: '>= 10.13.0'}
|
||||
|
||||
redent@3.0.0:
|
||||
resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
|
||||
engines: {node: '>=8'}
|
||||
@ -9981,6 +10105,10 @@ packages:
|
||||
spdx-license-ids@3.0.21:
|
||||
resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
|
||||
|
||||
split2@4.2.0:
|
||||
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
|
||||
engines: {node: '>= 10.x'}
|
||||
|
||||
sprintf-js@1.0.3:
|
||||
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
|
||||
|
||||
@ -10229,6 +10357,10 @@ packages:
|
||||
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
tarn@3.0.2:
|
||||
resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
|
||||
tdigest@0.1.2:
|
||||
resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==}
|
||||
|
||||
@ -10274,6 +10406,10 @@ packages:
|
||||
through2@2.0.5:
|
||||
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
|
||||
|
||||
tildify@2.0.0:
|
||||
resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
tiny-invariant@1.3.3:
|
||||
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
|
||||
|
||||
@ -10690,6 +10826,10 @@ packages:
|
||||
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
|
||||
engines: {node: '>= 0.4.0'}
|
||||
|
||||
uuid@11.1.0:
|
||||
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
|
||||
hasBin: true
|
||||
|
||||
uuid@9.0.1:
|
||||
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
|
||||
hasBin: true
|
||||
@ -16556,6 +16696,8 @@ snapshots:
|
||||
color-convert: 1.9.3
|
||||
color-string: 1.9.1
|
||||
|
||||
colorette@2.0.19: {}
|
||||
|
||||
combined-stream@1.0.8:
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
@ -16948,6 +17090,12 @@ snapshots:
|
||||
dependencies:
|
||||
ms: 2.1.3
|
||||
|
||||
debug@4.3.4(supports-color@10.0.0):
|
||||
dependencies:
|
||||
ms: 2.1.2
|
||||
optionalDependencies:
|
||||
supports-color: 10.0.0
|
||||
|
||||
debug@4.3.7:
|
||||
dependencies:
|
||||
ms: 2.1.3
|
||||
@ -17768,6 +17916,8 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
esm@3.2.25: {}
|
||||
|
||||
espree@9.6.1:
|
||||
dependencies:
|
||||
acorn: 8.15.0
|
||||
@ -18209,6 +18359,8 @@ snapshots:
|
||||
|
||||
get-nonce@1.0.1: {}
|
||||
|
||||
get-package-type@0.1.0: {}
|
||||
|
||||
get-port@5.1.1: {}
|
||||
|
||||
get-proto@1.0.1:
|
||||
@ -18235,6 +18387,8 @@ snapshots:
|
||||
dependencies:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
|
||||
getopts@2.3.0: {}
|
||||
|
||||
giget@1.2.5:
|
||||
dependencies:
|
||||
citty: 0.1.6
|
||||
@ -18559,6 +18713,8 @@ snapshots:
|
||||
|
||||
internmap@2.0.3: {}
|
||||
|
||||
interpret@2.2.0: {}
|
||||
|
||||
ioredis@5.6.1:
|
||||
dependencies:
|
||||
'@ioredis/commands': 1.2.0
|
||||
@ -18923,6 +19079,27 @@ snapshots:
|
||||
|
||||
kleur@4.1.5: {}
|
||||
|
||||
knex@3.1.0(pg@8.16.3)(supports-color@10.0.0):
|
||||
dependencies:
|
||||
colorette: 2.0.19
|
||||
commander: 10.0.1
|
||||
debug: 4.3.4(supports-color@10.0.0)
|
||||
escalade: 3.2.0
|
||||
esm: 3.2.25
|
||||
get-package-type: 0.1.0
|
||||
getopts: 2.3.0
|
||||
interpret: 2.2.0
|
||||
lodash: 4.17.21
|
||||
pg-connection-string: 2.6.2
|
||||
rechoir: 0.8.0
|
||||
resolve-from: 5.0.0
|
||||
tarn: 3.0.2
|
||||
tildify: 2.0.0
|
||||
optionalDependencies:
|
||||
pg: 8.16.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
language-subtag-registry@0.3.23: {}
|
||||
|
||||
language-tags@1.0.9:
|
||||
@ -19834,6 +20011,8 @@ snapshots:
|
||||
|
||||
ms@2.0.0: {}
|
||||
|
||||
ms@2.1.2: {}
|
||||
|
||||
ms@2.1.3: {}
|
||||
|
||||
msgpackr-extract@3.0.3:
|
||||
@ -20368,6 +20547,43 @@ snapshots:
|
||||
estree-walker: 3.0.3
|
||||
is-reference: 3.0.3
|
||||
|
||||
pg-cloudflare@1.2.7:
|
||||
optional: true
|
||||
|
||||
pg-connection-string@2.6.2: {}
|
||||
|
||||
pg-connection-string@2.9.1: {}
|
||||
|
||||
pg-int8@1.0.1: {}
|
||||
|
||||
pg-pool@3.10.1(pg@8.16.3):
|
||||
dependencies:
|
||||
pg: 8.16.3
|
||||
|
||||
pg-protocol@1.10.3: {}
|
||||
|
||||
pg-types@2.2.0:
|
||||
dependencies:
|
||||
pg-int8: 1.0.1
|
||||
postgres-array: 2.0.0
|
||||
postgres-bytea: 1.0.0
|
||||
postgres-date: 1.0.7
|
||||
postgres-interval: 1.2.0
|
||||
|
||||
pg@8.16.3:
|
||||
dependencies:
|
||||
pg-connection-string: 2.9.1
|
||||
pg-pool: 3.10.1(pg@8.16.3)
|
||||
pg-protocol: 1.10.3
|
||||
pg-types: 2.2.0
|
||||
pgpass: 1.0.5
|
||||
optionalDependencies:
|
||||
pg-cloudflare: 1.2.7
|
||||
|
||||
pgpass@1.0.5:
|
||||
dependencies:
|
||||
split2: 4.2.0
|
||||
|
||||
picocolors@0.2.1: {}
|
||||
|
||||
picocolors@1.1.1: {}
|
||||
@ -20581,6 +20797,16 @@ snapshots:
|
||||
picocolors: 1.1.1
|
||||
source-map-js: 1.2.1
|
||||
|
||||
postgres-array@2.0.0: {}
|
||||
|
||||
postgres-bytea@1.0.0: {}
|
||||
|
||||
postgres-date@1.0.7: {}
|
||||
|
||||
postgres-interval@1.2.0:
|
||||
dependencies:
|
||||
xtend: 4.0.2
|
||||
|
||||
posthog-js@1.250.2:
|
||||
dependencies:
|
||||
core-js: 3.43.0
|
||||
@ -21145,6 +21371,10 @@ snapshots:
|
||||
|
||||
readdirp@4.1.2: {}
|
||||
|
||||
rechoir@0.8.0:
|
||||
dependencies:
|
||||
resolve: 1.22.10
|
||||
|
||||
redent@3.0.0:
|
||||
dependencies:
|
||||
indent-string: 4.0.0
|
||||
@ -21740,6 +21970,8 @@ snapshots:
|
||||
|
||||
spdx-license-ids@3.0.21: {}
|
||||
|
||||
split2@4.2.0: {}
|
||||
|
||||
sprintf-js@1.0.3: {}
|
||||
|
||||
ssri@10.0.6:
|
||||
@ -22064,6 +22296,8 @@ snapshots:
|
||||
mkdirp: 3.0.1
|
||||
yallist: 5.0.0
|
||||
|
||||
tarn@3.0.2: {}
|
||||
|
||||
tdigest@0.1.2:
|
||||
dependencies:
|
||||
bintrees: 1.0.2
|
||||
@ -22118,6 +22352,8 @@ snapshots:
|
||||
readable-stream: 2.3.8
|
||||
xtend: 4.0.2
|
||||
|
||||
tildify@2.0.0: {}
|
||||
|
||||
tiny-invariant@1.3.3: {}
|
||||
|
||||
tinycolor2@1.6.0: {}
|
||||
@ -22576,6 +22812,8 @@ snapshots:
|
||||
|
||||
utils-merge@1.0.1: {}
|
||||
|
||||
uuid@11.1.0: {}
|
||||
|
||||
uuid@9.0.1: {}
|
||||
|
||||
uvu@0.5.6:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user