{ "name": "backend", "version": "1.0.0", "description": "", "main": "./dist/main.mjs", "engines": { "node": ">=26.0.0", "npm": ">=11.10.0" }, "scripts": { "assets:export": "./scripts/export-assets.sh", "test": "echo \"Error: no test specified\" && exit 1", "dev": "tsx watch --clear-screen=false ./src/main.ts --config tsconfig.dev.json | pino-pretty --colorize --colorizeObjects --singleLine", "dev:docker": "tsx watch --clear-screen=false --tsconfig=./tsconfig.dev.json --inspect=0.0.0.0:9229 ./src/main.ts | pino-pretty --colorize --colorizeObjects --singleLine", "build": "tsdown", "build:frontend": "npm run build --prefix ../frontend", "start": "node --enable-source-maps dist/main.mjs", "type:check": "tsc --noEmit", "lint:fix": "oxlint --type-aware --fix --max-warnings 0 src && oxfmt 'src/**/*.ts'", "lint": "oxlint --type-aware --max-warnings 0 src && oxfmt --check 'src/**/*.ts'", "test:unit": "vitest run -c vitest.unit.config.mts", "test:e2e": "vitest run -c vitest.e2e.config.mts --bail=1", "test:e2e-watch": "vitest -c vitest.e2e.config.mts --bail=1", "test:e2e-coverage": "vitest run --coverage -c vitest.e2e.config.mts", "test:bdd": "cd bdd && uv run behave", "bake:announcements": "tsx ./scripts/bake-announcements.ts", "generate:component": "tsx ./scripts/create-backend-file.ts", "generate:schema": "tsx ./scripts/generate-schema-types.ts && oxfmt 'src/db/schemas/**/*.ts'", "auditlog-migration:latest": "node ./dist/db/rename-migrations-to-mjs.mjs && knex --knexfile ./dist/db/auditlog-knexfile.mjs --client pg migrate:latest", "auditlog-migration:up": "knex --knexfile ./dist/db/auditlog-knexfile.mjs --client pg migrate:up", "auditlog-migration:down": "knex --knexfile ./dist/db/auditlog-knexfile.mjs --client pg migrate:down", "auditlog-migration:list": "knex --knexfile ./dist/db/auditlog-knexfile.mjs --client pg migrate:list", "auditlog-migration:status": "knex --knexfile ./dist/db/auditlog-knexfile.mjs --client pg migrate:status", "auditlog-migration:unlock": "knex --knexfile ./dist/db/auditlog-knexfile.mjs migrate:unlock", "auditlog-migration:rollback": "knex --knexfile ./dist/db/auditlog-knexfile.mjs migrate:rollback", "clickhouse-migration:latest": "tsx ./src/db/run-clickhouse-migrations.ts", "migration:new": "tsx ./scripts/create-migration.ts", "migration:up": "npm run auditlog-migration:up && knex --knexfile ./dist/db/knexfile.mjs --client pg migrate:up", "migration:down": "npm run auditlog-migration:down && knex --knexfile ./dist/db/knexfile.mjs --client pg migrate:down", "migration:list": "npm run auditlog-migration:list && knex --knexfile ./dist/db/knexfile.mjs --client pg migrate:list", "migration:latest": "node ./dist/db/rename-migrations-to-mjs.mjs && npm run auditlog-migration:latest && knex --knexfile ./dist/db/knexfile.mjs --client pg migrate:latest", "migration:status": "npm run auditlog-migration:status && knex --knexfile ./dist/db/knexfile.mjs --client pg migrate:status", "migration:rollback": "npm run auditlog-migration:rollback && knex --knexfile ./dist/db/knexfile.mjs migrate:rollback", "migration:unlock": "npm run auditlog-migration:unlock && knex --knexfile ./dist/db/knexfile.mjs migrate:unlock", "migration:up-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts --client pg migrate:up", "migration:down-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts --client pg migrate:down", "migration:list-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts --client pg migrate:list", "migration:latest-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts --client pg migrate:latest", "migration:status-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts --client pg migrate:status", "migration:rollback-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts migrate:rollback", "migration:unlock-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts migrate:unlock", "migrate:org": "tsx ./scripts/migrate-organization.ts", "seed:new": "tsx ./scripts/create-seed-file.ts", "seed": "knex --knexfile ./dist/db/knexfile.mjs --client pg seed:run", "seed-dev": "tsx ./node_modules/knex/bin/cli.js --knexfile ./src/db/knexfile.ts --client pg seed:run", "seed-oidc": "tsx ./src/db/seed-oidc.ts", "seed-ldap": "tsx ./src/db/seed-ldap.ts", "seed-saml": "tsx ./src/db/seed-saml.ts", "db:reset": "npm run migration:rollback -- --all && npm run migration:latest", "email:dev": "email dev --dir src/services/smtp/emails", "validate-upgrade-path": "tsx ./scripts/validate-upgrade-path-file.ts" }, "keywords": [], "author": "", "license": "ISC", "overrides": { "cipher-base": "1.0.5", "sha.js": "2.4.12", "jws": "^4.0.1", "qs": "$qs", "glob": { ".": "^10.5.0", "minimatch": { "brace-expansion": "^2.1.2" } }, "cross-spawn": "^7.0.6", "validator": "^13.15.22", "react-email": { "glob": "^11.1.0" }, "nan": "^2.29.0", "hono": "^4.12.12", "@hono/node-server": "^1.19.13", "vite": "^7.3.5", "@xmldom/xmldom": "^0.8.13", "lodash": "^4.18.0", "tar": "^7.5.21", "flatted": "^3.4.2", "@octokit/request-error": "^5.1.1", "fast-uri": "^3.1.5", "undici": "^7.29.0", "ws": "^8.20.1", "fast-xml-parser": "^5.7.0", "path-to-regexp": "^8.4.0", "protobufjs": "^7.6.5", "dompurify": "^3.4.9", "js-yaml": "$js-yaml", "@grpc/grpc-js": "^1.14.4", "fast-xml-builder": "^1.1.7", "form-data": "^4.0.6", "find-my-way": "^9.7.0", "body-parser": "^1.20.6", "shell-quote": "^1.9.0", "websocket-driver": "^0.7.5", "botbuilder": { "uuid": "^11.1.1" }, "google-auth-library": { "uuid": "^11.1.1" }, "jsforce": { "csv-parse": "^7.0.2" }, "@azure/identity": { "@azure/msal-node": "^7.1.0" } }, "devDependencies": { "@react-email/preview-server": "^5.0.6", "@smithy/types": "^4.3.1", "@types/bcrypt": "^5.0.2", "@types/dns-packet": "^5.6.5", "@types/js-yaml": "^4.0.9", "@types/jsonwebtoken": "^9.0.5", "@types/jsrp": "^0.2.6", "@types/libsodium-wrappers": "^0.7.13", "@types/lodash.isequal": "^4.5.8", "@types/netmask": "^2.0.6", "@types/node": "^26.0.0", "@types/oracledb": "^6.10.0", "@types/passport-google-oauth20": "^2.0.14", "@types/pg": "^8.10.9", "@types/picomatch": "^2.3.3", "@types/pkcs11js": "^1.0.4", "@types/prompt-sync": "^4.2.3", "@types/qs": "^6.15.1", "@types/react": "^19.1.2", "@types/resolve": "^1.20.6", "@types/safe-regex": "^1.1.6", "@types/sjcl": "^1.0.34", "@types/ssh2": "^1.15.5", "@types/uuid": "^9.0.7", "nock": "^14.0.10", "oxfmt": "^0.74.0", "oxlint": "^1.89.0", "oxlint-tsgolint": "^7.0.2004", "pino-pretty": "^10.2.3", "prompt-sync": "^4.2.0", "react-email": "^5.0.6", "tsdown": "0.23.0", "tsx": "^4.23.15", "typescript": "^7.0.2", "vitest": "^3.2.6" }, "dependencies": { "@aws-sdk/client-acm": "^3.1030.0", "@aws-sdk/client-acm-pca": "^3.992.0", "@aws-sdk/client-cloudformation": "^3.1038.0", "@aws-sdk/client-elastic-load-balancing-v2": "^3.1015.0", "@aws-sdk/client-elasticache": "^3.637.0", "@aws-sdk/client-iam": "^3.525.0", "@aws-sdk/client-kms": "^3.609.0", "@aws-sdk/client-memorydb": "^3.637.0", "@aws-sdk/client-route-53": "^3.810.0", "@aws-sdk/client-s3": "^3.1020.0", "@aws-sdk/client-secrets-manager": "^3.504.0", "@aws-sdk/client-ssm": "^3.1015.0", "@aws-sdk/client-sts": "^3.600.0", "@aws-sdk/rds-signer": "^3.1111.0", "@aws-sdk/s3-request-presigner": "^3.1140.0", "@casl/ability": "^6.7.5", "@clickhouse/client": "^1.17.0", "@elastic/elasticsearch": "^9.1.1", "@fastify/cookie": "^11.0.2", "@fastify/cors": "^11.2.0", "@fastify/etag": "^6.1.0", "@fastify/formbody": "^8.0.2", "@fastify/helmet": "^13.0.2", "@fastify/multipart": "^10.0.0", "@fastify/passport": "^3.0.2", "@fastify/rate-limit": "^10.3.0", "@fastify/reply-from": "^12.6.2", "@fastify/request-context": "^6.2.1", "@fastify/session": "^11.1.1", "@fastify/static": "^10.1.6", "@fastify/swagger": "^9.7.0", "@fastify/swagger-ui": "^6.1.2", "@fastify/websocket": "^11.2.0", "@gitbeaker/rest": "^42.5.0", "@google-cloud/kms": "^5.4.0", "@infisical/ldapjs": "3.0.11", "@infisical/pg-view-generator": "^1.1.0", "@node-saml/passport-saml": "^5.1.0", "@octokit/auth-app": "^7.1.1", "@octokit/core": "^5.2.1", "@octokit/plugin-paginate-graphql": "^4.0.1", "@octokit/plugin-retry": "^5.0.5", "@octokit/rest": "^20.0.2", "@octokit/webhooks-types": "^7.3.1", "@octopusdeploy/api-client": "^3.4.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/exporter-metrics-otlp-proto": "^0.220.0", "@opentelemetry/exporter-prometheus": "^0.220.0", "@opentelemetry/instrumentation": "^0.220.0", "@opentelemetry/instrumentation-http": "^0.220.0", "@opentelemetry/instrumentation-runtime-node": "^0.33.0", "@opentelemetry/resources": "~2.9.0", "@opentelemetry/sdk-metrics": "~2.9.0", "@opentelemetry/semantic-conventions": "^1.43.0", "@peculiar/asn1-csr": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.0", "@peculiar/asn1-pkcs8": "^2.6.1", "@peculiar/asn1-rsa": "^2.6.1", "@peculiar/asn1-schema": "^2.3.8", "@peculiar/asn1-x509": "^2.6.1", "@peculiar/x509": "^1.12.1", "@platformatic/kafka": "^2.12.1", "@react-email/components": "^1.0.1", "@simplewebauthn/server": "^13.3.3", "@sindresorhus/slugify": "1.1.0", "@slack/oauth": "^3.0.2", "@slack/web-api": "^7.8.0", "@types/node-forge": "^1.3.14", "@ucast/mongo2js": "^1.3.4", "acme-client": "^5.4.0", "argon2": "^0.45.1", "asn1js": "^3.0.6", "axios": "~1.20.0", "axios-ntlm": "^1.4.4", "axios-retry": "^4.0.0", "bcrypt": "^6.0.0", "botbuilder": "^4.23.2", "bullmq": "^5.81.5", "cassandra-driver": "^4.10.0", "connect-redis": "^7.1.1", "cron-parser": "^5.5.0", "dd-trace": "^5.128.0", "dns-packet": "^5.6.1", "dotenv": "^16.4.1", "fast-json-stringify": "^7.1.3", "fast-xml-parser": "^5.7.0", "fastify": "^5.12.7", "fastify-plugin": "^5.0.1", "file-type": "^22.0.0", "google-auth-library": "^9.9.0", "handlebars": "^4.7.10", "hdb": "^0.19.10", "ioredis": "^5.3.2", "isomorphic-dompurify": "^2.22.0", "jose": "^6.1.0", "js-yaml": "^4.3.0", "jsforce": "^3.10.14", "jsonwebtoken": "^9.0.2", "jsrp": "^0.2.4", "jwks-rsa": "^3.1.0", "knex": "^3.0.1", "ldif": "0.5.1", "libpg-query": "^17.7.3", "libsodium-wrappers": "^0.7.13", "lodash.isequal": "^4.5.0", "mongodb": "^6.8.1", "mongodb-connection-string-url": "^3.0.0", "ms": "^2.1.3", "mysql2": "^3.24.5", "nanoid": "^3.3.18", "netmask": "^2.0.2", "node-forge": "^1.4.2", "nodemailer": "^10.1.7", "oauth4webapi": "3.8.8", "oci-common": "^2.142.2", "oci-identity": "^2.142.2", "oci-keymanagement": "^2.142.2", "oci-secrets": "^2.142.2", "oci-vault": "^2.142.2", "odbc": "^2.4.9", "openid-client": "^5.6.5", "oracledb": "^6.10.0", "otplib": "^12.0.1", "p-limit": "^3.1.0", "passport-gitlab2": "^5.0.0", "passport-google-oauth20": "^2.0.0", "passport-ldapauth": "^3.0.1", "passport-oauth2": "^1.8.0", "pg": "^8.11.3", "pg-cursor": "^2.19.0", "pg-query-stream": "^4.5.3", "pg-types": "^2.2.0", "picomatch": "^4.0.4", "pino": "^8.16.2", "pkcs11js": "^2.1.6", "pkijs": "^3.4.2", "posthog-node": "^5.57.2", "probot": "^13.3.8", "qs": "^6.15.2", "randexp": "^0.5.3", "re2": "^1.26.1", "react": "19.1.4", "react-dom": "19.1.4", "reflect-metadata": "^0.2.2", "safe-regex": "^2.1.1", "scim-patch": "^0.9.1", "scim2-parse-filter": "^0.2.10", "sjcl": "^1.0.9", "smee-client": "^2.0.0", "snowflake-sdk": "^3.4.0", "ssh2": "^1.17.0", "tedious": "~20.2.3", "tsyringe": "^4.10.0", "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1", "uuid": "^11.1.1", "zod": "^3.22.4", "zod-to-json-schema": "^3.24.5" }, "allowScripts": { "argon2@0.45.1": true, "bcrypt@6.0.0": true, "cpu-features@0.0.10": true, "esbuild@0.27.3": true, "esbuild@0.25.11": true, "esbuild@0.28.2": true, "fsevents@2.3.3": true, "msgpackr-extract@3.0.4": true, "odbc@2.4.9": true, "oracledb@6.10.0": true, "pkcs11js@2.1.6": true, "sharp@0.34.5": true, "ssh2@1.17.0": true, "unrs-resolver@1.12.2": true, "core-js": false, "core-js-pure": false, "protobufjs": false, "re2@1.27.0": true } }