Make local DEV work out of the box

This commit is contained in:
MartinBraquet
2025-09-20 23:51:28 +02:00
parent d7c95e2ae0
commit 84a437772d
22 changed files with 138 additions and 121 deletions

View File

@@ -0,0 +1,3 @@
export const getLocalEnv = () => {
return (process.env.ENVIRONMENT?.toUpperCase() ?? 'DEV') as 'PROD' | 'DEV'
}

View File

@@ -0,0 +1,23 @@
import {readFileSync} from "fs";
import {ENV_CONFIG} from "common/envs/constants";
export const getServiceAccountCredentials = () => {
let keyPath = ENV_CONFIG.googleApplicationCredentials
if (keyPath == null) {
throw new Error(
`Please set the GOOGLE_APPLICATION_CREDENTIALS environment variable to contain the path to your key file.`
)
}
if (!keyPath.startsWith('/')) {
// Make relative paths relative to the current file
keyPath = __dirname + '/' + keyPath
// console.log(keyPath)
}
try {
return JSON.parse(readFileSync(keyPath, {encoding: 'utf8'}))
} catch (e) {
throw new Error(`Failed to load service account key from ${keyPath}: ${e}`)
}
}

View File

@@ -0,0 +1,13 @@
{
"type": "service_account",
"project_id": "compass-57c3c",
"private_key_id": "ce2c7ef4aa137dd4726a8c9398c199ce051d4168",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCNkwHW3buaXX8K\nYWZMIPtHfObK1EmbsIbjbFZtWqcn1Ouw3nj/hCaQQhFmlAvGIP/P0A6d/mlr704o\nK26otjK3S290y/VhI3f2AoMh9af8ptK9mjMbmpwQI7cRu87M/EhbBlYeovntcNfj\n11tsMg83RYUIPXKuQddm2AejRDyhoHsB/QTdSLjDfUIR2pVvHSVbbQwm1cKiFAev\nPm01X3BFLOkzhUCYuzLI1hGXf7G4xm4XCTi2UQGZkI2FYjOgrQcNvkTB33DF0sze\nZCpc8iJsUyQYZxxvsxXd20CwPArsgy+6FU2+dGRrSE6lzwqYU9mnizqtjdp+VUh8\nkppRgZH7AgMBAAECggEAFxMKPjR2grLRZWY5j5fijKTBUvalpp/vZDrAnWMkklvk\nLDgeXXry9Bkoj+D6SEkRmJPPBhY0pXhj8y0dBJdpjbFYUZ96d2IaB7kiGVNaFVY1\nS9zJjqq02/aOPHAxRPyraFaQi77BYF8/eK2dg3VnQHlutMibG+a0TllQaV5SSX9J\n7cj4C6RX2p8Zvrmu6RsQ+dQWZFMwT8oHhuKCrL8+iw6bXYH1bSvxHLS+sCreIK7d\nYvY/DPxlC1rGaK8ovH5nuc3nQ+ECsWcDjcqjg4SmI7VwPpWeJ97exf3BGUmSFSOC\nCNfWu6bqhWleBkRozRCAuzQwesLkr38MsjU1iZS4VQKBgQDAG75trRLUHvuCoPpu\nHw4Ev1qpqVa1rE/16Zmzp7/wzoOP7yqoW2Og2adE5N2KUxR48nAMnR/uwRQcvlhX\n2Y7qEprl0AkXRXpneGiPFD/vzkTAjRWZdd0sIpo3+KCZcoO9OsJ8eA5Ch0bthv6q\nJBjd9VwgIaS5gd/eX76xBMV6ZQKBgQC8qL+bc6S3EiGoGf+Fzm+XXfXuVn0VA2sx\nhJjV/tfxxv6EIO90COsKy3CgaNOjU+NZ6jx+Kq07c4HBPA3c43qSRNUkWfQyyQgA\nPV3f5ZP40z+U4QnbhWSVSch91FCxwAnL9N7/KM77gAsHCdUuMlCVAYDr6JfDZiJR\nQ9X3cfLk3wKBgHn4o31rJ8s6KKIVpysH2JS3Ec8qzvzl/Ja7zHS+iyVPWUSnq0Pd\nUnIr/wHE9cv/V746312C3WVvfV+KkvikDxMa4PIMldkKqd7MGkbNqpKNOiWu7gnT\nRaviBFyJJR6IEJCyoAz7BMLEtQnWbhaEeK1kPSvBcJ6/kO3ViHNH/kHpAoGBAJ2Z\nLi8TBOc1y03dIfrKP6goAtiuAWF7cKF2DiK99/DudhE0XjQFeyuSVSx7RUisPEER\njqUqy3ndfOhKXZ5HnU3xGEh8qKWAECH7IZ927gyvk+6vqwdpwGOBtm1+3kYOkWCC\n14I5ueaYyR2BFke4Gl7PWb44mAbQHBzc2TITS3/rAoGBAKsCx9IQk1p0Am/+/NcW\nBnxnE5iNmaX3H4+pmtShl8gXxaI1DWnB7WbqjDOCu9HCnPZUdLXbrserny+ZSyNU\nnHE1InQn7T/xM7RXZRkZk09qmSRicXh6kS+cSBg1xU5vIPPsBTrWVmg74L9guNdo\nYQXUSGJaJbCZ6N35oz+Qf3NB\n-----END PRIVATE KEY-----\n",
"client_email": "dev-contributors@compass-57c3c.iam.gserviceaccount.com",
"client_id": "118371540020807340605",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/dev-contributors%40compass-57c3c.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}

View File

@@ -1,16 +1,12 @@
import * as admin from 'firebase-admin'
import { getServiceAccountCredentials } from 'common/secrets'
export const getLocalEnv = () => {
return (process.env.ENV?.toUpperCase() ?? 'STAGING') as 'PROD' | 'DEV'
}
import {getServiceAccountCredentials} from "shared/firebase-utils";
// Locally initialize Firebase Admin.
export const initAdmin = () => {
try {
const env = getLocalEnv()
const serviceAccount = getServiceAccountCredentials(env)
const serviceAccount = getServiceAccountCredentials()
console.log(
`Initializing connection to ${serviceAccount.project_id} Firebase...`
)

View File

@@ -36,11 +36,11 @@ export type SupabaseTransaction = ITask<{}>
export type SupabaseDirectClient = IDatabase<{}, IClient> | SupabaseTransaction
export function getInstanceId() {
return process.env.SUPABASE_INSTANCE_ID ?? ENV_CONFIG.supabaseInstanceId
return ENV_CONFIG.supabaseInstanceId
}
export function getSupabasePwd() {
return ENV_CONFIG.supabaseServiceRoleKey ?? process.env.SUPABASE_DB_PASSWORD
return ENV_CONFIG.supabasePwd
}
const newClient = (
@@ -55,7 +55,7 @@ const newClient = (
// This host is IPV4 compatible, for the google cloud VM
host: 'aws-1-us-west-1.pooler.supabase.com',
port: 5432,
user: `postgres.ltzepxnhhnrnvovqblfr`,
user: `postgres.${instanceId}`,
password: password,
database: 'postgres',
pool_mode: 'session',

View File

@@ -9,7 +9,7 @@ import {
ServerMessage,
CLIENT_MESSAGE_SCHEMA,
} from 'common/api/websockets'
import {LOCAL_DEV} from "common/envs/constants";
import {IS_LOCAL} from "common/envs/constants";
const SWITCHBOARD = new Switchboard()
@@ -107,7 +107,7 @@ export function broadcastMulti(topics: string[], data: BroadcastPayload) {
// it isn't secure to do this in prod for auth reasons (maybe?)
// but it's super convenient for testing
if (LOCAL_DEV) {
if (IS_LOCAL) {
const msg = { type: 'broadcast', topic: '*', topics, data }
sendToSubscribers('*', msg)
}