diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f839dfce6..8a21ec10a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ First of all, thank you for considering to contribute to my project! It means a - Push to your fork repo - Create a pull request: https://github.com/coollabsio/compare - Write a proper description -- Click "Change to draft" +- Open the pull request to review # How to start after you set up your local fork? diff --git a/Dockerfile b/Dockerfile index df4614a13..87c4d54c9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,31 +1,42 @@ -FROM node:16.14.0-alpine -RUN apk add --no-cache g++ cmake make python3 -WORKDIR /app -COPY package*.json . -RUN yarn install -COPY . . -RUN yarn build - -FROM node:16.14.0-alpine +FROM node:16.14.2-alpine as install WORKDIR /app -LABEL coolify.managed true - -RUN apk add --no-cache git git-lfs openssh-client curl jq cmake sqlite openssl - +RUN apk add --no-cache curl RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@6 RUN pnpm add -g pnpm -RUN curl -fsSL "https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz" | tar -xzvf - docker/docker -C . --strip-components 1 && mv docker /usr/bin/docker -RUN mkdir -p ~/.docker/cli-plugins/ -RUN curl -SL https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose -RUN chmod +x ~/.docker/cli-plugins/docker-compose +COPY package*.json . +RUN pnpm install + +FROM node:16.14.2-alpine +ARG TARGETPLATFORM + +WORKDIR /app + +ENV PRISMA_QUERY_ENGINE_BINARY=/app/prisma-engines/query-engine \ + PRISMA_MIGRATION_ENGINE_BINARY=/app/prisma-engines/migration-engine \ + PRISMA_INTROSPECTION_ENGINE_BINARY=/app/prisma-engines/introspection-engine \ + PRISMA_FMT_BINARY=/app/prisma-engines/prisma-fmt \ + PRISMA_CLI_QUERY_ENGINE_TYPE=binary \ + PRISMA_CLIENT_ENGINE_TYPE=binary + +COPY --from=coollabsio/prisma-engine:latest /prisma-engines/query-engine /prisma-engines/migration-engine /prisma-engines/introspection-engine /prisma-engines/prisma-fmt /app/prisma-engines/ + +COPY --from=install /app/node_modules ./node_modules +COPY . . + +RUN apk add --no-cache git git-lfs openssh-client curl jq cmake sqlite openssl +RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@6 +RUN pnpm add -g pnpm +RUN mkdir -p ~/.docker/cli-plugins/ +RUN curl -SL https://cdn.coollabs.io/bin/$TARGETPLATFORM/docker-20.10.9 -o /usr/bin/docker +RUN curl -SL https://cdn.coollabs.io/bin/$TARGETPLATFORM/docker-compose-linux-2.3.4 -o ~/.docker/cli-plugins/docker-compose +RUN chmod +x ~/.docker/cli-plugins/docker-compose /usr/bin/docker + +RUN pnpm prisma generate +RUN pnpm build + -COPY --from=0 /app/docker-compose.yaml . -COPY --from=0 /app/build . -COPY --from=0 /app/package.json . -COPY --from=0 /app/node_modules ./node_modules -COPY --from=0 /app/prisma ./prisma EXPOSE 3000 CMD ["pnpm", "start"] \ No newline at end of file diff --git a/data/build-prisma-engine.sh b/data/build-prisma-engine.sh new file mode 100644 index 000000000..42c2af608 --- /dev/null +++ b/data/build-prisma-engine.sh @@ -0,0 +1 @@ +nohup docker build -t coollabsio/prisma-engine: --push . & \ No newline at end of file diff --git a/data/haproxy-http.Dockerfile b/data/haproxy-http.Dockerfile new file mode 100644 index 000000000..de5246628 --- /dev/null +++ b/data/haproxy-http.Dockerfile @@ -0,0 +1,6 @@ +FROM haproxytech/haproxy-alpine:2.5 +RUN mkdir -p /usr/local/etc/haproxy/ssl /usr/local/etc/haproxy/maps /usr/local/etc/haproxy/spoe + +COPY haproxy/haproxy.cfg-http.template /usr/local/etc/haproxy/haproxy.cfg +COPY haproxy/dataplaneapi.hcl /usr/local/etc/haproxy/dataplaneapi.hcl +COPY haproxy/ssl/default.pem /usr/local/etc/haproxy/ssl/default.pem \ No newline at end of file diff --git a/data/haproxy-tcp.Dockerfile b/data/haproxy-tcp.Dockerfile new file mode 100644 index 000000000..9b9639777 --- /dev/null +++ b/data/haproxy-tcp.Dockerfile @@ -0,0 +1,6 @@ +FROM haproxytech/haproxy-alpine:2.5 +RUN mkdir -p /usr/local/etc/haproxy/ssl /usr/local/etc/haproxy/maps /usr/local/etc/haproxy/spoe + +COPY haproxy/haproxy.cfg-tcp.template /usr/local/etc/haproxy/haproxy.cfg +COPY haproxy/dataplaneapi.hcl /usr/local/etc/haproxy/dataplaneapi.hcl +COPY haproxy/ssl/default.pem /usr/local/etc/haproxy/ssl/default.pem \ No newline at end of file diff --git a/data/haproxy.Dockerfile b/data/haproxy.Dockerfile new file mode 100644 index 000000000..3ab520a65 --- /dev/null +++ b/data/haproxy.Dockerfile @@ -0,0 +1,6 @@ +FROM haproxytech/haproxy-alpine:2.5 +RUN mkdir -p /usr/local/etc/haproxy/ssl /usr/local/etc/haproxy/maps /usr/local/etc/haproxy/spoe + +COPY haproxy/haproxy.cfg.template /usr/local/etc/haproxy/haproxy.cfg +COPY haproxy/dataplaneapi.hcl /usr/local/etc/haproxy/dataplaneapi.hcl +COPY haproxy/ssl/default.pem /usr/local/etc/haproxy/ssl/default.pem \ No newline at end of file diff --git a/data/haproxy/haproxy.cfg-http.template b/data/haproxy/haproxy.cfg-http.template index 72fdece7a..f819e9be7 100644 --- a/data/haproxy/haproxy.cfg-http.template +++ b/data/haproxy/haproxy.cfg-http.template @@ -4,10 +4,10 @@ global defaults mode http log global - timeout http-request 60s - timeout connect 10s - timeout client 60s - timeout server 60s + timeout http-request 120s + timeout connect 20s + timeout client 120s + timeout server 120s frontend "${APP}" mode http diff --git a/data/haproxy/haproxy.cfg.template b/data/haproxy/haproxy.cfg.template index c39cb7878..35cb8a74d 100644 --- a/data/haproxy/haproxy.cfg.template +++ b/data/haproxy/haproxy.cfg.template @@ -5,10 +5,10 @@ global defaults mode http log global - timeout http-request 60s - timeout connect 10s - timeout client 60s - timeout server 60s + timeout http-request 120s + timeout connect 20s + timeout client 120s + timeout server 120s userlist haproxy-dataplaneapi user admin insecure-password "${HAPROXY_PASSWORD}" diff --git a/data/prisma-engine.Dockerfile b/data/prisma-engine.Dockerfile new file mode 100644 index 000000000..086472e23 --- /dev/null +++ b/data/prisma-engine.Dockerfile @@ -0,0 +1,10 @@ +FROM rust:1.58.1-alpine3.14 as prisma +WORKDIR /prisma +ENV RUSTFLAGS="-C target-feature=-crt-static" +RUN apk --no-cache add openssl direnv git musl-dev openssl-dev build-base perl protoc +RUN git clone --depth=1 --branch=3.11.x https://github.com/prisma/prisma-engines.git /prisma +RUN cargo build --release + +FROM alpine +WORKDIR /prisma-engines +COPY --from=prisma /prisma/target/release/query-engine /prisma/target/release/migration-engine /prisma/target/release/introspection-engine /prisma/target/release/prisma-fmt /prisma-engines/ diff --git a/haproxy-http.Dockerfile b/haproxy-http.Dockerfile deleted file mode 100644 index 089ae0f96..000000000 --- a/haproxy-http.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM haproxytech/haproxy-alpine:2.5 -RUN mkdir -p /usr/local/etc/haproxy/ssl /usr/local/etc/haproxy/maps /usr/local/etc/haproxy/spoe - -COPY data/haproxy/haproxy.cfg-http.template /usr/local/etc/haproxy/haproxy.cfg -COPY data/haproxy/dataplaneapi.hcl /usr/local/etc/haproxy/dataplaneapi.hcl -COPY data/haproxy/ssl/default.pem /usr/local/etc/haproxy/ssl/default.pem \ No newline at end of file diff --git a/haproxy-tcp.Dockerfile b/haproxy-tcp.Dockerfile deleted file mode 100644 index bddcbe541..000000000 --- a/haproxy-tcp.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM haproxytech/haproxy-alpine:2.5 -RUN mkdir -p /usr/local/etc/haproxy/ssl /usr/local/etc/haproxy/maps /usr/local/etc/haproxy/spoe - -COPY data/haproxy/haproxy.cfg-tcp.template /usr/local/etc/haproxy/haproxy.cfg -COPY data/haproxy/dataplaneapi.hcl /usr/local/etc/haproxy/dataplaneapi.hcl -COPY data/haproxy/ssl/default.pem /usr/local/etc/haproxy/ssl/default.pem \ No newline at end of file diff --git a/haproxy.Dockerfile b/haproxy.Dockerfile deleted file mode 100644 index 45e2d9d71..000000000 --- a/haproxy.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM haproxytech/haproxy-alpine:2.5 -RUN mkdir -p /usr/local/etc/haproxy/ssl /usr/local/etc/haproxy/maps /usr/local/etc/haproxy/spoe - -COPY data/haproxy/haproxy.cfg.template /usr/local/etc/haproxy/haproxy.cfg -COPY data/haproxy/dataplaneapi.hcl /usr/local/etc/haproxy/dataplaneapi.hcl -COPY data/haproxy/ssl/default.pem /usr/local/etc/haproxy/ssl/default.pem \ No newline at end of file diff --git a/package.json b/package.json index ac2396dab..ceef4b161 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "coolify", "description": "An open-source & self-hostable Heroku / Netlify alternative.", - "version": "2.4.0", + "version": "2.4.3", "license": "AGPL-3.0", "scripts": { "dev": "docker-compose -f docker-compose-dev.yaml up -d && cross-env NODE_ENV=development & svelte-kit dev", "dev:stop": "docker-compose -f docker-compose-dev.yaml down", "dev:logs": "docker-compose -f docker-compose-dev.yaml logs -f --tail 10", "studio": "npx prisma studio", - "start": "npx prisma migrate deploy && npx prisma generate && npx prisma db seed && node index.js", + "start": "npx prisma migrate deploy && npx prisma generate && npx prisma db seed && node build/index.js", "build": "svelte-kit build", "preview": "svelte-kit preview", "check": "svelte-check --tsconfig ./tsconfig.json", @@ -17,18 +17,17 @@ "db:push": "prisma db push && prisma generate", "db:seed": "prisma db seed", "db:migrate": "COOLIFY_DATABASE_URL=file:../db/migration.db prisma migrate dev --skip-seed --name", - "release:staging": "cross-var docker build -t coollabsio/coolify:$npm_package_version . && docker push coollabsio/coolify:$npm_package_version", - "release:pre": "cross-var docker build -t coollabsio/coolify:$npm_package_version -t coollabsio/coolify:latest .", - "release:coolify": "cross-var yarn release:pre && docker push coollabsio/coolify:$npm_package_version && docker push coollabsio/coolify:latest", - "release:haproxy": "docker build -f haproxy.Dockerfile -t coollabsio/coolify-haproxy-alpine:1.0.0 -t coollabsio/coolify-haproxy-alpine:latest . && docker image push --all-tags coollabsio/coolify-haproxy-alpine", - "release:haproxy:tcp": "docker build -f haproxy-tcp.Dockerfile -t coollabsio/coolify-haproxy-tcp-alpine:1.0.0 -t coollabsio/coolify-haproxy-tcp-alpine:latest . && docker image push --all-tags coollabsio/coolify-haproxy-tcp-alpine", - "release:haproxy:http": "docker build -f haproxy-http.Dockerfile -t coollabsio/coolify-haproxy-http-alpine:1.0.0 -t coollabsio/coolify-haproxy-http-alpine:latest . && docker image push --all-tags coollabsio/coolify-haproxy-http-alpine", + "release:production:all": "cross-var docker build --platform linux/amd64,linux/arm64 -t coollabsio/coolify:$npm_package_version -t coollabsio/coolify:latest --push .", + "release:staging:all": "cross-var docker build --platform linux/amd64,linux/arm64 -t coollabsio/coolify:$npm_package_version --push .", + "release:staging:amd": "cross-var docker build --platform linux/amd64 -t coollabsio/coolify:$npm_package_version --push .", + "release:haproxy": "docker build --platform linux/amd64,linux/arm64 -t coollabsio/coolify-haproxy-alpine:latest -t coollabsio/coolify-haproxy-alpine:1.1.0 -f haproxy.Dockerfile --push .", + "release:haproxy:tcp": "docker build --platform linux/amd64,linux/arm64 -t coollabsio/coolify-haproxy-tcp-alpine:latest -t coollabsio/coolify-haproxy-tcp-alpine:1.1.0 -f haproxy-tcp.Dockerfile --push .", + "release:haproxy:http": "docker build --platform linux/amd64,linux/arm64 -t coollabsio/coolify-haproxy-http-alpine:latest -t coollabsio/coolify-haproxy-http-alpine:1.1.0 -f haproxy-http.Dockerfile --push .", "prepare": "husky install" }, "devDependencies": { "@sveltejs/adapter-node": "1.0.0-next.73", - "@sveltejs/kit": "1.0.0-next.303", - "@types/bcrypt": "5.0.0", + "@sveltejs/kit": "1.0.0-next.310", "@types/js-cookie": "3.0.1", "@types/js-yaml": "4.0.5", "@types/node": "17.0.23", @@ -45,13 +44,13 @@ "husky": "7.0.4", "lint-staged": "12.3.7", "postcss": "8.4.12", - "prettier": "2.6.1", - "prettier-plugin-svelte": "2.6.0", + "prettier": "2.6.2", + "prettier-plugin-svelte": "2.7.0", "prettier-plugin-tailwindcss": "0.1.8", "prisma": "3.11.1", - "svelte": "3.46.4", - "svelte-check": "2.4.6", - "svelte-preprocess": "4.10.4", + "svelte": "3.47.0", + "svelte-check": "2.6.0", + "svelte-preprocess": "4.10.5", "svelte-select": "4.4.7", "tailwindcss": "3.0.23", "ts-node": "10.7.0", @@ -62,24 +61,23 @@ "dependencies": { "@iarna/toml": "2.2.5", "@prisma/client": "3.11.1", - "@sentry/node": "6.19.2", - "bcrypt": "5.0.1", - "bullmq": "1.78.1", + "@sentry/node": "6.19.6", + "bcryptjs": "^2.4.3", + "bullmq": "1.79.0", "compare-versions": "4.1.3", "cookie": "0.4.2", - "cooltipz-css": "2.1.0", "cuid": "2.1.8", "dayjs": "1.11.0", "dockerode": "3.3.1", "dotenv-extended": "2.9.0", "generate-password": "1.7.0", "get-port": "6.1.2", - "got": "12.0.2", + "got": "12.0.3", "js-cookie": "3.0.1", "js-yaml": "4.1.0", "jsonwebtoken": "8.5.1", "mustache": "4.2.0", - "node-forge": "1.3.0", + "node-forge": "1.3.1", "p-limit": "4.0.0", "svelte-kit-cookie-session": "2.1.2", "tailwindcss-scrollbar": "0.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 175ba2285..5577cc3fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,10 +3,9 @@ lockfileVersion: 5.3 specifiers: '@iarna/toml': 2.2.5 '@prisma/client': 3.11.1 - '@sentry/node': 6.19.2 + '@sentry/node': 6.19.6 '@sveltejs/adapter-node': 1.0.0-next.73 - '@sveltejs/kit': 1.0.0-next.303 - '@types/bcrypt': 5.0.0 + '@sveltejs/kit': 1.0.0-next.310 '@types/js-cookie': 3.0.1 '@types/js-yaml': 4.0.5 '@types/node': 17.0.23 @@ -15,11 +14,10 @@ specifiers: '@typescript-eslint/parser': 4.31.1 '@zerodevx/svelte-toast': 0.7.1 autoprefixer: 10.4.4 - bcrypt: 5.0.1 - bullmq: 1.78.1 + bcryptjs: ^2.4.3 + bullmq: 1.79.0 compare-versions: 4.1.3 cookie: 0.4.2 - cooltipz-css: 2.1.0 cross-env: 7.0.3 cross-var: 1.1.0 cuid: 2.1.8 @@ -31,24 +29,24 @@ specifiers: eslint-plugin-svelte3: 3.4.1 generate-password: 1.7.0 get-port: 6.1.2 - got: 12.0.2 + got: 12.0.3 husky: 7.0.4 js-cookie: 3.0.1 js-yaml: 4.1.0 jsonwebtoken: 8.5.1 lint-staged: 12.3.7 mustache: 4.2.0 - node-forge: 1.3.0 + node-forge: 1.3.1 p-limit: 4.0.0 postcss: 8.4.12 - prettier: 2.6.1 - prettier-plugin-svelte: 2.6.0 + prettier: 2.6.2 + prettier-plugin-svelte: 2.7.0 prettier-plugin-tailwindcss: 0.1.8 prisma: 3.11.1 - svelte: 3.46.4 - svelte-check: 2.4.6 + svelte: 3.47.0 + svelte-check: 2.6.0 svelte-kit-cookie-session: 2.1.2 - svelte-preprocess: 4.10.4 + svelte-preprocess: 4.10.5 svelte-select: 4.4.7 tailwindcss: 3.0.23 tailwindcss-scrollbar: 0.1.0 @@ -60,24 +58,23 @@ specifiers: dependencies: '@iarna/toml': 2.2.5 '@prisma/client': 3.11.1_prisma@3.11.1 - '@sentry/node': 6.19.2 - bcrypt: 5.0.1 - bullmq: 1.78.1 + '@sentry/node': 6.19.6 + bcryptjs: 2.4.3 + bullmq: 1.79.0 compare-versions: 4.1.3 cookie: 0.4.2 - cooltipz-css: 2.1.0 cuid: 2.1.8 dayjs: 1.11.0 dockerode: 3.3.1 dotenv-extended: 2.9.0 generate-password: 1.7.0 get-port: 6.1.2 - got: 12.0.2 + got: 12.0.3 js-cookie: 3.0.1 js-yaml: 4.1.0 jsonwebtoken: 8.5.1 mustache: 4.2.0 - node-forge: 1.3.0 + node-forge: 1.3.1 p-limit: 4.0.0 svelte-kit-cookie-session: 2.1.2 tailwindcss-scrollbar: 0.1.0_tailwindcss@3.0.23 @@ -85,8 +82,7 @@ dependencies: devDependencies: '@sveltejs/adapter-node': 1.0.0-next.73 - '@sveltejs/kit': 1.0.0-next.303_svelte@3.46.4 - '@types/bcrypt': 5.0.0 + '@sveltejs/kit': 1.0.0-next.310_svelte@3.47.0 '@types/js-cookie': 3.0.1 '@types/js-yaml': 4.0.5 '@types/node': 17.0.23 @@ -99,17 +95,17 @@ devDependencies: cross-var: 1.1.0 eslint: 7.32.0 eslint-config-prettier: 8.5.0_eslint@7.32.0 - eslint-plugin-svelte3: 3.4.1_eslint@7.32.0+svelte@3.46.4 + eslint-plugin-svelte3: 3.4.1_eslint@7.32.0+svelte@3.47.0 husky: 7.0.4 lint-staged: 12.3.7 postcss: 8.4.12 - prettier: 2.6.1 - prettier-plugin-svelte: 2.6.0_prettier@2.6.1+svelte@3.46.4 - prettier-plugin-tailwindcss: 0.1.8_prettier@2.6.1 + prettier: 2.6.2 + prettier-plugin-svelte: 2.7.0_prettier@2.6.2+svelte@3.47.0 + prettier-plugin-tailwindcss: 0.1.8_prettier@2.6.2 prisma: 3.11.1 - svelte: 3.46.4 - svelte-check: 2.4.6_postcss@8.4.12+svelte@3.46.4 - svelte-preprocess: 4.10.4_296873641a0ad9f42fe92172d27bcedd + svelte: 3.47.0 + svelte-check: 2.6.0_postcss@8.4.12+svelte@3.47.0 + svelte-preprocess: 4.10.5_41810887ae6c6d59323116f47e33fa38 svelte-select: 4.4.7 tailwindcss: 3.0.23_b89136460714832cdda11d1e9d57d1ff ts-node: 10.7.0_ee885bc7281b682b6adbed6ae09ee090 @@ -212,26 +208,6 @@ packages: } dev: false - /@mapbox/node-pre-gyp/1.0.6: - resolution: - { - integrity: sha512-qK1ECws8UxuPqOA8F5LFD90vyVU33W7N3hGfgsOVfrJaRVc8McC3JClTDHpeSbL9CBrOHly/4GsNPAvIgNZE+g== - } - hasBin: true - dependencies: - detect-libc: 1.0.3 - https-proxy-agent: 5.0.0 - make-dir: 3.1.0 - node-fetch: 2.6.6 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.3.5 - tar: 6.1.11 - transitivePeerDependencies: - - supports-color - dev: false - /@nodelib/fs.scandir/2.1.5: resolution: { @@ -305,55 +281,55 @@ packages: picomatch: 2.3.0 dev: true - /@sentry/core/6.19.2: + /@sentry/core/6.19.6: resolution: { - integrity: sha512-yu1R3ewBT4udmB4v7sc4biQZ0Z0rfB9+TzB5ZKoCftbe6kqXjFMMaFRYNUF9HicVldKAsBktgkWw3+yfqGkw/A== + integrity: sha512-biEotGRr44/vBCOegkTfC9rwqaqRKIpFljKGyYU6/NtzMRooktqOhjmjmItNCMRknArdeaQwA8lk2jcZDXX3Og== } engines: { node: '>=6' } dependencies: - '@sentry/hub': 6.19.2 - '@sentry/minimal': 6.19.2 - '@sentry/types': 6.19.2 - '@sentry/utils': 6.19.2 + '@sentry/hub': 6.19.6 + '@sentry/minimal': 6.19.6 + '@sentry/types': 6.19.6 + '@sentry/utils': 6.19.6 tslib: 1.14.1 dev: false - /@sentry/hub/6.19.2: + /@sentry/hub/6.19.6: resolution: { - integrity: sha512-W7KCgNBgdBIMagOxy5J5KQPe+maYxSqfE8a5ncQ3R8BcZDQEKnkW/1FplNbfRLZqA/tL/ndKb7pTPqVtzsbARw== + integrity: sha512-PuEOBZxvx3bjxcXmWWZfWXG+orojQiWzv9LQXjIgroVMKM/GG4QtZbnWl1hOckUj7WtKNl4hEGO2g/6PyCV/vA== } engines: { node: '>=6' } dependencies: - '@sentry/types': 6.19.2 - '@sentry/utils': 6.19.2 + '@sentry/types': 6.19.6 + '@sentry/utils': 6.19.6 tslib: 1.14.1 dev: false - /@sentry/minimal/6.19.2: + /@sentry/minimal/6.19.6: resolution: { - integrity: sha512-ClwxKm77iDHET7kpzv1JvzDx1er5DoNu+EUjst0kQzARIrXvu9xuZuE2/CnBWycQWqw8o3HoGoKz65uIhsUCzQ== + integrity: sha512-T1NKcv+HTlmd8EbzUgnGPl4ySQGHWMCyZ8a8kXVMZOPDzphN3fVIzkYzWmSftCWp0rpabXPt9aRF2mfBKU+mAQ== } engines: { node: '>=6' } dependencies: - '@sentry/hub': 6.19.2 - '@sentry/types': 6.19.2 + '@sentry/hub': 6.19.6 + '@sentry/types': 6.19.6 tslib: 1.14.1 dev: false - /@sentry/node/6.19.2: + /@sentry/node/6.19.6: resolution: { - integrity: sha512-Z1qREpTpYHxaeWjc1zMUk8ZTAp1WbxMiI2TVNc+a14DVT19Z2xNXb06MiRfeLgNc9lVGdmzR62dPmMBjVgPJYg== + integrity: sha512-kHQMfsy40ZxxdS9zMPmXCOOLWOJbQj6/aVSHt/L1QthYcgkAi7NJQNXnQIPWQDe8eP3DfNIWM7dc446coqjXrQ== } engines: { node: '>=6' } dependencies: - '@sentry/core': 6.19.2 - '@sentry/hub': 6.19.2 - '@sentry/types': 6.19.2 - '@sentry/utils': 6.19.2 + '@sentry/core': 6.19.6 + '@sentry/hub': 6.19.6 + '@sentry/types': 6.19.6 + '@sentry/utils': 6.19.6 cookie: 0.4.2 https-proxy-agent: 5.0.0 lru_map: 0.3.3 @@ -362,22 +338,22 @@ packages: - supports-color dev: false - /@sentry/types/6.19.2: + /@sentry/types/6.19.6: resolution: { - integrity: sha512-XO5qmVBdTs+7PdCz7fAwn1afWxSnRE2KLBFg5/vOdKosPSSHsSHUURSkxiEZc2QsR+JpRB4AeQ26AkIRX38qTg== + integrity: sha512-QH34LMJidEUPZK78l+Frt3AaVFJhEmIi05Zf8WHd9/iTt+OqvCHBgq49DDr1FWFqyYWm/QgW/3bIoikFpfsXyQ== } engines: { node: '>=6' } dev: false - /@sentry/utils/6.19.2: + /@sentry/utils/6.19.6: resolution: { - integrity: sha512-2DQQ2OJaxjtyxGq5FmMlqb6hptsqMs2xoBiVRMkTS/rvyTrk1oQdKZ8ePwjtgX3nJ728ni3IXIyXV+vfGp4EBw== + integrity: sha512-fAMWcsguL0632eWrROp/vhPgI7sBj/JROWVPzpabwVkm9z3m1rQm6iLFn4qfkZL8Ozy6NVZPXOQ7EXmeU24byg== } engines: { node: '>=6' } dependencies: - '@sentry/types': 6.19.2 + '@sentry/types': 6.19.6 tslib: 1.14.1 dev: false @@ -398,20 +374,20 @@ packages: tiny-glob: 0.2.9 dev: true - /@sveltejs/kit/1.0.0-next.303_svelte@3.46.4: + /@sveltejs/kit/1.0.0-next.310_svelte@3.47.0: resolution: { - integrity: sha512-WdxDc8OiF1WEd/bEza7CBdzA+3qIcCi1GKBj/gieKX9I3N8iDJt/Cg2POrLo9wQoJ47nZcAd1eOhfr7XEX1aIQ== + integrity: sha512-pTyMyaoyHS+V5cQZIQMfQXmLkhw1VaRwT9avOSgwDc0QBpnNw2LdzwoPYsUr96ca5B6cfT3SMUNolxErTNHmPQ== } engines: { node: '>=14.13' } hasBin: true peerDependencies: svelte: ^3.44.0 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.33_svelte@3.46.4+vite@2.8.0 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.33_svelte@3.47.0+vite@2.9.1 sade: 1.7.4 - svelte: 3.46.4 - vite: 2.8.0 + svelte: 3.47.0 + vite: 2.9.1 transitivePeerDependencies: - diff-match-patch - less @@ -420,7 +396,7 @@ packages: - supports-color dev: true - /@sveltejs/vite-plugin-svelte/1.0.0-next.33_svelte@3.46.4+vite@2.8.0: + /@sveltejs/vite-plugin-svelte/1.0.0-next.33_svelte@3.47.0+vite@2.9.1: resolution: { integrity: sha512-aj0h2+ZixgT+yoJFIs8dRRw/Cj9tgNu3+hY4CJikpa04mfhR61wXqJFfi2ZEFMUvFda5nCxKYIChFkc6wq5fJA== @@ -439,9 +415,9 @@ packages: kleur: 4.1.4 magic-string: 0.25.7 require-relative: 0.8.7 - svelte: 3.46.4 - svelte-hmr: 0.14.9_svelte@3.46.4 - vite: 2.8.0 + svelte: 3.47.0 + svelte-hmr: 0.14.9_svelte@3.47.0 + vite: 2.9.1 transitivePeerDependencies: - supports-color dev: true @@ -484,15 +460,6 @@ packages: } dev: true - /@types/bcrypt/5.0.0: - resolution: - { - integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw== - } - dependencies: - '@types/node': 17.0.23 - dev: true - /@types/cacheable-request/6.0.2: resolution: { @@ -722,13 +689,6 @@ packages: } dev: true - /abbrev/1.1.1: - resolution: - { - integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - } - dev: false - /acorn-jsx/5.3.2_acorn@7.4.1: resolution: { @@ -855,17 +815,13 @@ packages: engines: { node: '>=0.10.0' } dev: true - /ansi-regex/3.0.0: - resolution: { integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= } - engines: { node: '>=4' } - dev: false - /ansi-regex/5.0.1: resolution: { integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== } engines: { node: '>=8' } + dev: true /ansi-regex/6.0.1: resolution: @@ -919,24 +875,6 @@ packages: picomatch: 2.3.0 dev: true - /aproba/2.0.0: - resolution: - { - integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - } - dev: false - - /are-we-there-yet/2.0.0: - resolution: - { - integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - } - engines: { node: '>=10' } - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.0 - dev: false - /arg/4.1.3: resolution: { @@ -1656,18 +1594,8 @@ packages: tweetnacl: 0.14.5 dev: false - /bcrypt/5.0.1: - resolution: - { - integrity: sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw== - } - engines: { node: '>= 10.0.0' } - requiresBuild: true - dependencies: - '@mapbox/node-pre-gyp': 1.0.6 - node-addon-api: 3.2.1 - transitivePeerDependencies: - - supports-color + /bcryptjs/2.4.3: + resolution: { integrity: sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= } dev: false /binary-extensions/2.2.0: @@ -1741,10 +1669,10 @@ packages: ieee754: 1.2.1 dev: false - /bullmq/1.78.1: + /bullmq/1.79.0: resolution: { - integrity: sha512-er45mM8nGhgA83EVCJ4PNxPyDSzakvoxeFGU4vdSgYeB+SbeFQAlJYmAC50Ms7YFPstm1LeinbVZ+oX/BmBzOg== + integrity: sha512-rVtNCDpcWdc+U1MinRtvhJv+GBFNkz0Q3Unf20010qIC6Pj+O2kkIUeepBkCmMNz6G9abrhsee2PheGRJ32+sw== } dependencies: cron-parser: 4.2.1 @@ -1874,14 +1802,6 @@ packages: } dev: false - /chownr/2.0.0: - resolution: - { - integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - } - engines: { node: '>=10' } - dev: false - /clean-stack/2.2.0: resolution: { @@ -1966,14 +1886,6 @@ packages: } dev: true - /color-support/1.1.3: - resolution: - { - integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - } - hasBin: true - dev: false - /colorette/2.0.16: resolution: { @@ -1999,10 +1911,6 @@ packages: /concat-map/0.0.1: resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } - /console-control-strings/1.1.0: - resolution: { integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= } - dev: false - /convert-source-map/1.8.0: resolution: { @@ -2020,19 +1928,6 @@ packages: engines: { node: '>= 0.6' } dev: false - /cooltipz-css/2.1.0: - resolution: - { - integrity: sha512-howXMSGn4tYvroGUad5jg1QFKUMxxc2GiQSXrv6TQBIMmhrf8t//hz1Fx8eyc5t93SS9ZzUa5rHbPtjBTg5j1w== - } - engines: { node: '>=16', npm: '>=8' } - peerDependencies: - sass: 1.x - peerDependenciesMeta: - sass: - optional: true - dev: false - /core-js/2.6.12: resolution: { @@ -2217,10 +2112,6 @@ packages: resolution: { integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= } dev: true - /delegates/1.0.0: - resolution: { integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= } - dev: false - /denque/1.5.1: resolution: { @@ -2244,12 +2135,6 @@ packages: engines: { node: '>=8' } dev: true - /detect-libc/1.0.3: - resolution: { integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= } - engines: { node: '>=0.10' } - hasBin: true - dev: false - /detective/5.2.0: resolution: { @@ -2383,6 +2268,7 @@ packages: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } + dev: true /emoji-regex/9.2.2: resolution: @@ -2423,10 +2309,22 @@ packages: resolution: { integrity: sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= } dev: true - /esbuild-android-arm64/0.14.21: + /esbuild-android-64/0.14.34: resolution: { - integrity: sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ== + integrity: sha512-XfxcfJqmMYsT/LXqrptzFxmaR3GWzXHDLdFNIhm6S00zPaQF1TBBWm+9t0RZ6LRR7iwH57DPjaOeW20vMqI4Yw== + } + engines: { node: '>=12' } + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.34: + resolution: + { + integrity: sha512-T02+NXTmSRL1Mc6puz+R9CB54rSPICkXKq6+tw8B6vxZFnCPzbJxgwIX4kcluz9p8nYBjF3+lSilTGWb7+Xgew== } engines: { node: '>=12' } cpu: [arm64] @@ -2435,10 +2333,10 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.14.21: + /esbuild-darwin-64/0.14.34: resolution: { - integrity: sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ== + integrity: sha512-pLRip2Bh4Ng7Bf6AMgCrSp3pPe/qZyf11h5Qo2mOfJqLWzSVjxrXW+CFRJfrOVP7TCnh/gmZSM2AFdCPB72vtw== } engines: { node: '>=12' } cpu: [x64] @@ -2447,10 +2345,10 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.14.21: + /esbuild-darwin-arm64/0.14.34: resolution: { - integrity: sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ== + integrity: sha512-vpidSJEBxx6lf1NWgXC+DCmGqesJuZ5Y8aQVVsaoO4i8tRXbXb0whChRvop/zd3nfNM4dIl5EXAky0knRX5I6w== } engines: { node: '>=12' } cpu: [arm64] @@ -2459,10 +2357,10 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.14.21: + /esbuild-freebsd-64/0.14.34: resolution: { - integrity: sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g== + integrity: sha512-m0HBjePhe0hAQJgtMRMNV9kMgIyV4/qSnzPx42kRMQBcPhgjAq1JRu4Il26czC+9FgpMbFkUktb07f/Lwnc6CA== } engines: { node: '>=12' } cpu: [x64] @@ -2471,10 +2369,10 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.14.21: + /esbuild-freebsd-arm64/0.14.34: resolution: { - integrity: sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA== + integrity: sha512-cpRc2B94L1KvMPPYB4D6G39jLqpKlD3noAMY4/e86iXXXkhUYJJEtTuyNFTa9JRpWM0xCAp4mxjHjoIiLuoCLA== } engines: { node: '>=12' } cpu: [arm64] @@ -2483,10 +2381,10 @@ packages: dev: true optional: true - /esbuild-linux-32/0.14.21: + /esbuild-linux-32/0.14.34: resolution: { - integrity: sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg== + integrity: sha512-8nQaEaoW7MH/K/RlozJa+lE1ejHIr8fuPIHhc513UebRav7HtXgQvxHQ6VZRUkWtep23M6dd7UqhwO1tMOfzQQ== } engines: { node: '>=12' } cpu: [ia32] @@ -2495,10 +2393,10 @@ packages: dev: true optional: true - /esbuild-linux-64/0.14.21: + /esbuild-linux-64/0.14.34: resolution: { - integrity: sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA== + integrity: sha512-Y3of4qQoLLlAgf042MlrY1P+7PnN9zWj8nVtw9XQG5hcLOZLz7IKpU35oeu7n4wvyaZHwvQqDJ93gRLqdJekcQ== } engines: { node: '>=12' } cpu: [x64] @@ -2507,10 +2405,10 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.14.21: + /esbuild-linux-arm/0.14.34: resolution: { - integrity: sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w== + integrity: sha512-9lpq1NcJqssAF7alCO6zL3gvBVVt/lKw4oetUM7OgNnRX0OWpB+ZIO9FwCrSj/dMdmgDhPLf+119zB8QxSMmAg== } engines: { node: '>=12' } cpu: [arm] @@ -2519,10 +2417,10 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.14.21: + /esbuild-linux-arm64/0.14.34: resolution: { - integrity: sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g== + integrity: sha512-IlWaGtj9ir7+Nrume1DGcyzBDlK8GcnJq0ANKwcI9pVw8tqr+6GD0eqyF9SF1mR8UmAp+odrx1H5NdR2cHdFHA== } engines: { node: '>=12' } cpu: [arm64] @@ -2531,10 +2429,10 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.14.21: + /esbuild-linux-mips64le/0.14.34: resolution: { - integrity: sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A== + integrity: sha512-k3or+01Rska1AjUyNjA4buEwB51eyN/xPQAoOx1CjzAQC3l8rpjUDw55kXyL63O/1MUi4ISvtNtl8gLwdyEcxw== } engines: { node: '>=12' } cpu: [mips64el] @@ -2543,10 +2441,10 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.14.21: + /esbuild-linux-ppc64le/0.14.34: resolution: { - integrity: sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ== + integrity: sha512-+qxb8M9FfM2CJaVU7GgYpJOHM1ngQOx+/VrtBjb4C8oVqaPcESCeg2anjl+HRZy8VpYc71q/iBYausPPbJ+Keg== } engines: { node: '>=12' } cpu: [ppc64] @@ -2555,10 +2453,10 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.14.21: + /esbuild-linux-riscv64/0.14.34: resolution: { - integrity: sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q== + integrity: sha512-Y717ltBdQ5j5sZIHdy1DV9kieo0wMip0dCmVSTceowCPYSn1Cg33Kd6981+F/3b9FDMzNWldZFOBRILViENZSA== } engines: { node: '>=12' } cpu: [riscv64] @@ -2567,10 +2465,10 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.14.21: + /esbuild-linux-s390x/0.14.34: resolution: { - integrity: sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA== + integrity: sha512-bDDgYO4LhL4+zPs+WcBkXph+AQoPcQRTv18FzZS0WhjfH8TZx2QqlVPGhmhZ6WidrY+jKthUqO6UhGyIb4MpmA== } engines: { node: '>=12' } cpu: [s390x] @@ -2579,10 +2477,10 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.14.21: + /esbuild-netbsd-64/0.14.34: resolution: { - integrity: sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g== + integrity: sha512-cfaFGXdRt0+vHsjNPyF0POM4BVSHPSbhLPe8mppDc7GDDxjIl08mV1Zou14oDWMp/XZMjYN1kWYRSfftiD0vvQ== } engines: { node: '>=12' } cpu: [x64] @@ -2591,10 +2489,10 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.14.21: + /esbuild-openbsd-64/0.14.34: resolution: { - integrity: sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA== + integrity: sha512-vmy9DxXVnRiI14s8GKuYBtess+EVcDALkbpTqd5jw4XITutIzyB7n4x0Tj5utAkKsgZJB22lLWGekr0ABnSLow== } engines: { node: '>=12' } cpu: [x64] @@ -2603,10 +2501,10 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.14.21: + /esbuild-sunos-64/0.14.34: resolution: { - integrity: sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA== + integrity: sha512-eNPVatNET1F7tRMhii7goL/eptfxc0ALRjrj9SPFNqp0zmxrehBFD6BaP3R4LjMn6DbMO0jOAnTLFKr8NqcJAA== } engines: { node: '>=12' } cpu: [x64] @@ -2615,10 +2513,10 @@ packages: dev: true optional: true - /esbuild-windows-32/0.14.21: + /esbuild-windows-32/0.14.34: resolution: { - integrity: sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A== + integrity: sha512-EFhpXyHEcnqWYe2rAHFd8dRw8wkrd9U+9oqcyoEL84GbanAYjiiIjBZsnR8kl0sCQ5w6bLpk7vCEIA2VS32Vcg== } engines: { node: '>=12' } cpu: [ia32] @@ -2627,10 +2525,10 @@ packages: dev: true optional: true - /esbuild-windows-64/0.14.21: + /esbuild-windows-64/0.14.34: resolution: { - integrity: sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA== + integrity: sha512-a8fbl8Ky7PxNEjf1aJmtxdDZj32/hC7S1OcA2ckEpCJRTjiKslI9vAdPpSjrKIWhws4Galpaawy0nB7fjHYf5Q== } engines: { node: '>=12' } cpu: [x64] @@ -2639,10 +2537,10 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.14.21: + /esbuild-windows-arm64/0.14.34: resolution: { - integrity: sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw== + integrity: sha512-EYvmKbSa2B3sPnpC28UEu9jBK5atGV4BaVRE7CYGUci2Hlz4AvtV/LML+TcDMT6gBgibnN2gcltWclab3UutMg== } engines: { node: '>=12' } cpu: [arm64] @@ -2651,34 +2549,35 @@ packages: dev: true optional: true - /esbuild/0.14.21: + /esbuild/0.14.34: resolution: { - integrity: sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A== + integrity: sha512-QIWdPT/gFF6hCaf4m7kP0cJ+JIuFkdHibI7vVFvu3eJS1HpVmYHWDulyN5WXwbRA0SX/7ZDaJ/1DH8SdY9xOJg== } engines: { node: '>=12' } hasBin: true requiresBuild: true optionalDependencies: - esbuild-android-arm64: 0.14.21 - esbuild-darwin-64: 0.14.21 - esbuild-darwin-arm64: 0.14.21 - esbuild-freebsd-64: 0.14.21 - esbuild-freebsd-arm64: 0.14.21 - esbuild-linux-32: 0.14.21 - esbuild-linux-64: 0.14.21 - esbuild-linux-arm: 0.14.21 - esbuild-linux-arm64: 0.14.21 - esbuild-linux-mips64le: 0.14.21 - esbuild-linux-ppc64le: 0.14.21 - esbuild-linux-riscv64: 0.14.21 - esbuild-linux-s390x: 0.14.21 - esbuild-netbsd-64: 0.14.21 - esbuild-openbsd-64: 0.14.21 - esbuild-sunos-64: 0.14.21 - esbuild-windows-32: 0.14.21 - esbuild-windows-64: 0.14.21 - esbuild-windows-arm64: 0.14.21 + esbuild-android-64: 0.14.34 + esbuild-android-arm64: 0.14.34 + esbuild-darwin-64: 0.14.34 + esbuild-darwin-arm64: 0.14.34 + esbuild-freebsd-64: 0.14.34 + esbuild-freebsd-arm64: 0.14.34 + esbuild-linux-32: 0.14.34 + esbuild-linux-64: 0.14.34 + esbuild-linux-arm: 0.14.34 + esbuild-linux-arm64: 0.14.34 + esbuild-linux-mips64le: 0.14.34 + esbuild-linux-ppc64le: 0.14.34 + esbuild-linux-riscv64: 0.14.34 + esbuild-linux-s390x: 0.14.34 + esbuild-netbsd-64: 0.14.34 + esbuild-openbsd-64: 0.14.34 + esbuild-sunos-64: 0.14.34 + esbuild-windows-32: 0.14.34 + esbuild-windows-64: 0.14.34 + esbuild-windows-arm64: 0.14.34 dev: true /escalade/3.1.1: @@ -2714,7 +2613,7 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-svelte3/3.4.1_eslint@7.32.0+svelte@3.46.4: + /eslint-plugin-svelte3/3.4.1_eslint@7.32.0+svelte@3.47.0: resolution: { integrity: sha512-7p59WG8qV8L6wLdl4d/c3mdjkgVglQCdv5XOTk/iNPBKXuuV+Q0eFP5Wa6iJd/G2M1qR3BkLPEzaANOqKAZczw== @@ -2725,7 +2624,7 @@ packages: svelte: ^3.2.0 dependencies: eslint: 7.32.0 - svelte: 3.46.4 + svelte: 3.47.0 dev: true /eslint-scope/5.1.1: @@ -3025,16 +2924,6 @@ packages: } dev: false - /fs-minipass/2.1.0: - resolution: - { - integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - } - engines: { node: '>= 8' } - dependencies: - minipass: 3.1.5 - dev: false - /fs.realpath/1.0.0: resolution: { integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= } @@ -3069,24 +2958,6 @@ packages: resolution: { integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= } dev: true - /gauge/3.0.1: - resolution: - { - integrity: sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ== - } - engines: { node: '>=10' } - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.5 - string-width: 2.1.1 - strip-ansi: 4.0.0 - wide-align: 1.1.5 - dev: false - /generate-password/1.7.0: resolution: { @@ -3207,10 +3078,10 @@ packages: } dev: true - /got/12.0.2: + /got/12.0.3: resolution: { - integrity: sha512-Zi4yHiqCgaorUbknr/RHFBsC3XqjSodaw0F3qxlqAqyj+OGYZl37/uy01R0qz++KANKQYdY5FHJ0okXZpEzwWQ== + integrity: sha512-hmdcXi/S0gcAtDg4P8j/rM7+j3o1Aq6bXhjxkDhRY2ipe7PHpvx/14DgTY2czHOLaGeU8VRvRecidwfu9qdFug== } engines: { node: '>=14.16' } dependencies: @@ -3256,10 +3127,6 @@ packages: engines: { node: '>=8' } dev: true - /has-unicode/2.0.1: - resolution: { integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= } - dev: false - /has/1.0.3: resolution: { @@ -3472,17 +3339,13 @@ packages: engines: { node: '>=0.10.0' } dev: true - /is-fullwidth-code-point/2.0.0: - resolution: { integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= } - engines: { node: '>=4' } - dev: false - /is-fullwidth-code-point/3.0.0: resolution: { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== } engines: { node: '>=8' } + dev: true /is-fullwidth-code-point/4.0.0: resolution: @@ -3854,6 +3717,7 @@ packages: engines: { node: '>=10' } dependencies: yallist: 4.0.0 + dev: true /lru_map/0.3.3: resolution: { integrity: sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= } @@ -3875,16 +3739,6 @@ packages: sourcemap-codec: 1.4.8 dev: true - /make-dir/3.1.0: - resolution: - { - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - } - engines: { node: '>=8' } - dependencies: - semver: 6.3.0 - dev: false - /make-error/1.3.6: resolution: { @@ -3965,27 +3819,6 @@ packages: } dev: true - /minipass/3.1.5: - resolution: - { - integrity: sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== - } - engines: { node: '>=8' } - dependencies: - yallist: 4.0.0 - dev: false - - /minizlib/2.1.2: - resolution: - { - integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - } - engines: { node: '>= 8' } - dependencies: - minipass: 3.1.5 - yallist: 4.0.0 - dev: false - /mkdirp-classic/0.5.3: resolution: { @@ -4003,15 +3836,6 @@ packages: minimist: 1.2.5 dev: true - /mkdirp/1.0.4: - resolution: - { - integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - } - engines: { node: '>=10' } - hasBin: true - dev: false - /mri/1.2.0: resolution: { @@ -4080,27 +3904,10 @@ packages: resolution: { integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= } dev: true - /node-addon-api/3.2.1: + /node-forge/1.3.1: resolution: { - integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - } - dev: false - - /node-fetch/2.6.6: - resolution: - { - integrity: sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== - } - engines: { node: 4.x || >=6.0.0 } - dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-forge/1.3.0: - resolution: - { - integrity: sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA== + integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== } engines: { node: '>= 6.13.0' } dev: false @@ -4128,17 +3935,6 @@ packages: } dev: false - /nopt/5.0.0: - resolution: - { - integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - } - engines: { node: '>=6' } - hasBin: true - dependencies: - abbrev: 1.1.1 - dev: false - /normalize-path/3.0.0: resolution: { @@ -4170,23 +3966,6 @@ packages: path-key: 3.1.1 dev: true - /npmlog/5.0.1: - resolution: - { - integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - } - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.1 - set-blocking: 2.0.0 - dev: false - - /object-assign/4.1.1: - resolution: { integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= } - engines: { node: '>=0.10.0' } - dev: false - /object-hash/2.2.0: resolution: { @@ -4433,20 +4212,20 @@ packages: engines: { node: '>= 0.8.0' } dev: true - /prettier-plugin-svelte/2.6.0_prettier@2.6.1+svelte@3.46.4: + /prettier-plugin-svelte/2.7.0_prettier@2.6.2+svelte@3.47.0: resolution: { - integrity: sha512-NPSRf6Y5rufRlBleok/pqg4+1FyGsL0zYhkYP6hnueeL1J/uCm3OfOZPsLX4zqD9VAdcXfyEL2PYqGv8ZoOSfA== + integrity: sha512-fQhhZICprZot2IqEyoiUYLTRdumULGRvw0o4dzl5jt0jfzVWdGqeYW27QTWAeXhoupEZJULmNoH3ueJwUWFLIA== } peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 dependencies: - prettier: 2.6.1 - svelte: 3.46.4 + prettier: 2.6.2 + svelte: 3.47.0 dev: true - /prettier-plugin-tailwindcss/0.1.8_prettier@2.6.1: + /prettier-plugin-tailwindcss/0.1.8_prettier@2.6.2: resolution: { integrity: sha512-hwarSBCswAXa+kqYtaAkFr3Vop9o04WOyZs0qo3NyvW8L7f1rif61wRyq0+ArmVThOuRBcJF5hjGXYk86cwemg== @@ -4455,13 +4234,13 @@ packages: peerDependencies: prettier: '>=2.2.0' dependencies: - prettier: 2.6.1 + prettier: 2.6.2 dev: true - /prettier/2.6.1: + /prettier/2.6.2: resolution: { - integrity: sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A== + integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== } engines: { node: '>=10.13.0' } hasBin: true @@ -4731,6 +4510,7 @@ packages: hasBin: true dependencies: glob: 7.2.0 + dev: true /rollup/2.61.1: resolution: @@ -4826,10 +4606,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - - /set-blocking/2.0.0: - resolution: { integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= } - dev: false + dev: true /shebang-command/1.2.0: resolution: { integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= } @@ -4864,6 +4641,7 @@ packages: { integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== } + dev: true /slash/1.0.0: resolution: { integrity: sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= } @@ -4998,17 +4776,6 @@ packages: engines: { node: '>=0.6.19' } dev: true - /string-width/2.1.1: - resolution: - { - integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - } - engines: { node: '>=4' } - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: false - /string-width/4.2.3: resolution: { @@ -5019,6 +4786,7 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true /string-width/5.1.0: resolution: @@ -5048,13 +4816,6 @@ packages: ansi-regex: 2.1.1 dev: true - /strip-ansi/4.0.0: - resolution: { integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= } - engines: { node: '>=4' } - dependencies: - ansi-regex: 3.0.0 - dev: false - /strip-ansi/6.0.1: resolution: { @@ -5063,6 +4824,7 @@ packages: engines: { node: '>=8' } dependencies: ansi-regex: 5.0.1 + dev: true /strip-ansi/7.0.1: resolution: @@ -5141,10 +4903,10 @@ packages: engines: { node: '>= 0.4' } dev: true - /svelte-check/2.4.6_postcss@8.4.12+svelte@3.46.4: + /svelte-check/2.6.0_postcss@8.4.12+svelte@3.47.0: resolution: { - integrity: sha512-luzdly7RJhyXucQe8ID/7CqDgXdMrPYXmyZBjCbp+cixzTopZotuWevrB5hWDOnOU19m2cyetigIIa7WDHnCmQ== + integrity: sha512-POL3IqLUuGqb9DdvuXQaSTNXYnw/odK4hqW86+2LwGcZTdbUPKBBln7pq74wXmcnRE+12bXMY1CvbcUNa2d5nw== } hasBin: true peerDependencies: @@ -5153,12 +4915,11 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.11 import-fresh: 3.3.0 - minimist: 1.2.5 picocolors: 1.0.0 sade: 1.7.4 source-map: 0.7.3 - svelte: 3.46.4 - svelte-preprocess: 4.10.4_296873641a0ad9f42fe92172d27bcedd + svelte: 3.47.0 + svelte-preprocess: 4.10.5_41810887ae6c6d59323116f47e33fa38 typescript: 4.6.3 transitivePeerDependencies: - '@babel/core' @@ -5173,7 +4934,7 @@ packages: - sugarss dev: true - /svelte-hmr/0.14.9_svelte@3.46.4: + /svelte-hmr/0.14.9_svelte@3.47.0: resolution: { integrity: sha512-bKE9+4qb4sAnA+TKHiYurUl970rjA0XmlP9TEP7K/ncyWz3m81kA4HOgmlZK/7irGK7gzZlaPDI3cmf8fp/+tg== @@ -5181,7 +4942,7 @@ packages: peerDependencies: svelte: '>=3.19.0' dependencies: - svelte: 3.46.4 + svelte: 3.47.0 dev: true /svelte-kit-cookie-session/2.1.2: @@ -5191,10 +4952,10 @@ packages: } dev: false - /svelte-preprocess/4.10.4_296873641a0ad9f42fe92172d27bcedd: + /svelte-preprocess/4.10.5_41810887ae6c6d59323116f47e33fa38: resolution: { - integrity: sha512-fuwol0N4UoHsNQolLFbMqWivqcJ9N0vfWO9IuPAiX/5okfoGXURyJ6nECbuEIv0nU3M8Xe2I1ONNje2buk7l6A== + integrity: sha512-VKXPRScCzAZqeBZOGq4LLwtNrAu++mVn7XvQox3eFDV7Ciq0Lg70Q8QWjH9iXF7J+pMlXhPsSFwpCb2E+hoeyA== } engines: { node: '>= 9.11.2' } requiresBuild: true @@ -5242,7 +5003,7 @@ packages: postcss: 8.4.12 sorcery: 0.10.0 strip-indent: 3.0.0 - svelte: 3.46.4 + svelte: 3.47.0 typescript: 4.6.3 dev: true @@ -5253,10 +5014,10 @@ packages: } dev: true - /svelte/3.46.4: + /svelte/3.47.0: resolution: { - integrity: sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg== + integrity: sha512-4JaJp3HEoTCGARRWZQIZDUanhYv0iyoHikklVHVLH9xFE9db22g4TDv7CPeNA8HD1JgjXI1vlhR1JZvvhaTu2Q== } engines: { node: '>= 8' } dev: true @@ -5349,21 +5110,6 @@ packages: readable-stream: 3.6.0 dev: false - /tar/6.1.11: - resolution: - { - integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - } - engines: { node: '>= 10' } - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 3.1.5 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: false - /text-table/0.2.0: resolution: { integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= } dev: true @@ -5397,10 +5143,6 @@ packages: is-number: 7.0.0 dev: true - /tr46/0.0.3: - resolution: { integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= } - dev: false - /trim-right/1.0.1: resolution: { integrity: sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= } engines: { node: '>=0.10.0' } @@ -5556,10 +5298,10 @@ packages: } dev: true - /vite/2.8.0: + /vite/2.9.1: resolution: { - integrity: sha512-ed5rjyeysttuPJX/aKSA0gTB/8ZKLM5xF6FtEuKy1B9DiQbDNFMVMQxnb9JesgBPUMMIJxC8w5KZ/KNWLKFXoA== + integrity: sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ== } engines: { node: '>=12.2.0' } hasBin: true @@ -5575,7 +5317,7 @@ packages: stylus: optional: true dependencies: - esbuild: 0.14.21 + esbuild: 0.14.34 postcss: 8.4.12 resolve: 1.22.0 rollup: 2.61.1 @@ -5583,17 +5325,6 @@ packages: fsevents: 2.3.2 dev: true - /webidl-conversions/3.0.1: - resolution: { integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= } - dev: false - - /whatwg-url/5.0.0: - resolution: { integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0= } - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - /which/1.3.1: resolution: { @@ -5614,15 +5345,6 @@ packages: dependencies: isexe: 2.0.0 - /wide-align/1.1.5: - resolution: - { - integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - } - dependencies: - string-width: 4.2.3 - dev: false - /word-wrap/1.2.3: resolution: { @@ -5675,6 +5397,7 @@ packages: { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== } + dev: true /yaml/1.10.2: resolution: diff --git a/prisma/migrations/20220407220809_unique_storage_fix/migration.sql b/prisma/migrations/20220407220809_unique_storage_fix/migration.sql new file mode 100644 index 000000000..9b645cc3b --- /dev/null +++ b/prisma/migrations/20220407220809_unique_storage_fix/migration.sql @@ -0,0 +1,5 @@ +-- DropIndex +DROP INDEX "ApplicationPersistentStorage_path_key"; + +-- DropIndex +DROP INDEX "ApplicationPersistentStorage_applicationId_key"; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 7f37f9a2b..928562abd 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,5 +1,6 @@ generator client { provider = "prisma-client-js" + binaryTargets = ["linux-musl"] } datasource db { @@ -117,8 +118,8 @@ model ApplicationSettings { model ApplicationPersistentStorage { id String @id @default(cuid()) application Application @relation(fields: [applicationId], references: [id]) - applicationId String @unique - path String @unique + applicationId String + path String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/app.d.ts b/src/app.d.ts index a88bd7502..d432aef4a 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -15,6 +15,9 @@ declare namespace App { readOnly: boolean; source: string; settings: string; + database: Record; + versions: string; + privatePort: string; } } diff --git a/src/lib/buildPacks/docker.ts b/src/lib/buildPacks/docker.ts index 371ffed82..2db5d567c 100644 --- a/src/lib/buildPacks/docker.ts +++ b/src/lib/buildPacks/docker.ts @@ -26,14 +26,17 @@ export default async function ({ if (secrets.length > 0) { secrets.forEach((secret) => { if (secret.isBuildSecret) { - if (pullmergeRequestId) { - if (secret.isPRMRSecret) { - Dockerfile.push(`ARG ${secret.name}=${secret.value}`); - } - } else { - if (!secret.isPRMRSecret) { - Dockerfile.push(`ARG ${secret.name}=${secret.value}`); - } + if ( + (pullmergeRequestId && secret.isPRMRSecret) || + (!pullmergeRequestId && !secret.isPRMRSecret) + ) { + Dockerfile.unshift(`ARG ${secret.name}=${secret.value}`); + + Dockerfile.forEach((line, index) => { + if (line.startsWith('FROM')) { + Dockerfile.splice(index + 1, 0, `ARG ${secret.name}`); + } + }); } } }); diff --git a/src/lib/common.ts b/src/lib/common.ts index e3aeac7cc..a9157d1dc 100644 --- a/src/lib/common.ts +++ b/src/lib/common.ts @@ -61,12 +61,14 @@ export const saveBuildLog = async ({ buildId: string; applicationId: string; }): Promise => { - if (line.includes('ghs_')) { - const regex = /ghs_.*@/g; - line = line.replace(regex, '@'); + if (line) { + if (line.includes('ghs_')) { + const regex = /ghs_.*@/g; + line = line.replace(regex, '@'); + } + const addTimestamp = `${generateTimestamp()} ${line}`; + return await buildLogQueue.add(buildId, { buildId, line: addTimestamp, applicationId }); } - const addTimestamp = `${generateTimestamp()} ${line}`; - return await buildLogQueue.add(buildId, { buildId, line: addTimestamp, applicationId }); }; export const getTeam = (event: RequestEvent): string | null => { @@ -105,6 +107,7 @@ export const getUserDetails = async ( message: 'OK' } }; + if (isAdminRequired && permission !== 'admin' && permission !== 'owner') { payload.status = 401; payload.body.message = diff --git a/src/lib/components/common.ts b/src/lib/components/common.ts index 3e5568432..2bd962c4c 100644 --- a/src/lib/components/common.ts +++ b/src/lib/components/common.ts @@ -56,7 +56,7 @@ export const supportedDatabaseTypesAndVersions = [ name: 'postgresql', fancyName: 'PostgreSQL', baseImage: 'bitnami/postgresql', - versions: ['14.2', '13.6', '12.10', '11.15', '10.20'] + versions: ['14.2.0', '13.6.0', '12.10.0 ', '11.15.0', '10.20.0'] }, { name: 'redis', diff --git a/src/lib/database/applications.ts b/src/lib/database/applications.ts index 0f432b5d3..3ce6286d7 100644 --- a/src/lib/database/applications.ts +++ b/src/lib/database/applications.ts @@ -70,7 +70,11 @@ export async function removeApplication({ await prisma.build.deleteMany({ where: { applicationId: id } }); await prisma.secret.deleteMany({ where: { applicationId: id } }); await prisma.applicationPersistentStorage.deleteMany({ where: { applicationId: id } }); - await prisma.application.deleteMany({ where: { id, teams: { some: { id: teamId } } } }); + if (teamId === '0') { + await prisma.application.deleteMany({ where: { id } }); + } else { + await prisma.application.deleteMany({ where: { id, teams: { some: { id: teamId } } } }); + } } export async function getApplicationWebhook({ diff --git a/src/lib/database/common.ts b/src/lib/database/common.ts index 541fb8685..cdc1d5b92 100644 --- a/src/lib/database/common.ts +++ b/src/lib/database/common.ts @@ -219,6 +219,7 @@ export function generateDatabaseConfiguration(database: Database & { settings: D return { privatePort: 5432, environmentVariables: { + POSTGRESQL_POSTGRES_PASSWORD: rootUserPassword, POSTGRESQL_PASSWORD: dbUserPassword, POSTGRESQL_USERNAME: dbUser, POSTGRESQL_DATABASE: defaultDatabase diff --git a/src/lib/database/databases.ts b/src/lib/database/databases.ts index 78b39e187..388047ac3 100644 --- a/src/lib/database/databases.ts +++ b/src/lib/database/databases.ts @@ -165,3 +165,43 @@ export async function stopDatabase( } return everStarted; } + +export async function updatePasswordInDb(database, user, newPassword, isRoot) { + const { + id, + type, + rootUser, + rootUserPassword, + dbUser, + dbUserPassword, + defaultDatabase, + destinationDockerId, + destinationDocker: { engine } + } = database; + if (destinationDockerId) { + const host = getEngine(engine); + if (type === 'mysql') { + await asyncExecShell( + `DOCKER_HOST=${host} docker exec ${id} mysql -u ${rootUser} -p${rootUserPassword} -e \"ALTER USER '${user}'@'%' IDENTIFIED WITH caching_sha2_password BY '${newPassword}';\"` + ); + } else if (type === 'postgresql') { + if (isRoot) { + await asyncExecShell( + `DOCKER_HOST=${host} docker exec ${id} psql postgresql://postgres:${rootUserPassword}@${id}:5432/${defaultDatabase} -c "ALTER role postgres WITH PASSWORD '${newPassword}'"` + ); + } else { + await asyncExecShell( + `DOCKER_HOST=${host} docker exec ${id} psql postgresql://${dbUser}:${dbUserPassword}@${id}:5432/${defaultDatabase} -c "ALTER role ${user} WITH PASSWORD '${newPassword}'"` + ); + } + } else if (type === 'mongodb') { + await asyncExecShell( + `DOCKER_HOST=${host} docker exec ${id} mongo 'mongodb://${rootUser}:${rootUserPassword}@${id}:27017/admin?readPreference=primary&ssl=false' --eval "db.changeUserPassword('${user}','${newPassword}')"` + ); + } else if (type === 'redis') { + await asyncExecShell( + `DOCKER_HOST=${host} docker exec ${id} redis-cli -u redis://${dbUserPassword}@${id}:6379 --raw CONFIG SET requirepass ${newPassword}` + ); + } + } +} diff --git a/src/lib/database/destinations.ts b/src/lib/database/destinations.ts index 9e126d6ba..2f6cdb488 100644 --- a/src/lib/database/destinations.ts +++ b/src/lib/database/destinations.ts @@ -64,9 +64,7 @@ export async function configureDestinationForDatabase({ const host = getEngine(engine); if (type && version) { const baseImage = getDatabaseImage(type); - await asyncExecShell( - `DOCKER_HOST=${host} docker pull ${baseImage}:${version} && echo "FROM ${baseImage}:${version}" | docker build --label coolify.image="true" -t "${baseImage}:${version}" -` - ); + asyncExecShell(`DOCKER_HOST=${host} docker pull ${baseImage}:${version}`); } } } diff --git a/src/lib/database/gitSources.ts b/src/lib/database/gitSources.ts index f77df7ae7..01d36a7da 100644 --- a/src/lib/database/gitSources.ts +++ b/src/lib/database/gitSources.ts @@ -33,17 +33,12 @@ export async function newSource({ }): Promise { return await prisma.gitSource.create({ data: { - teams: { connect: { id: teamId } }, name, - type, - htmlUrl, - apiUrl, - organization + teams: { connect: { id: teamId } } } }); } export async function removeSource({ id }: { id: string }): Promise { - // TODO: Disconnect application with this sourceId! Maybe not needed? const source = await prisma.gitSource.delete({ where: { id }, include: { githubApp: true, gitlabApp: true } @@ -79,22 +74,29 @@ export async function getSource({ if (body?.gitlabApp?.appSecret) body.gitlabApp.appSecret = decrypt(body.gitlabApp.appSecret); return body; } -export async function addSource({ +export async function addGitHubSource({ id, teamId, type, name, htmlUrl, apiUrl }) { + await prisma.gitSource.update({ where: { id }, data: { type, name, htmlUrl, apiUrl } }); + return await prisma.githubApp.create({ + data: { + teams: { connect: { id: teamId } }, + gitSource: { connect: { id } } + } + }); +} +export async function addGitLabSource({ id, - appId, teamId, + type, + name, + htmlUrl, + apiUrl, oauthId, - groupName, - appSecret -}: { - id: string; - appId: string; - teamId: string; - oauthId: number; - groupName: string; - appSecret: string; -}): Promise { - const encryptedAppSecret = encrypt(appSecret); + appId, + appSecret, + groupName +}) { + const encrptedAppSecret = encrypt(appSecret); + await prisma.gitSource.update({ where: { id }, data: { type, apiUrl, htmlUrl, name } }); return await prisma.gitlabApp.create({ data: { teams: { connect: { id: teamId } }, @@ -128,6 +130,6 @@ export async function updateGitsource({ }): Promise { return await prisma.gitSource.update({ where: { id }, - data: { name } + data: { name, htmlUrl, apiUrl } }); } diff --git a/src/lib/database/services.ts b/src/lib/database/services.ts index 8f80ebd9f..7beaaf76a 100644 --- a/src/lib/database/services.ts +++ b/src/lib/database/services.ts @@ -177,7 +177,7 @@ export async function configureServiceType({ } }); } else if (type === 'ghost') { - const defaultEmail = `${cuid()}@coolify.io`; + const defaultEmail = `${cuid()}@example.com`; const defaultPassword = encrypt(generatePassword()); const mariadbUser = cuid(); const mariadbPassword = encrypt(generatePassword()); diff --git a/src/lib/database/users.ts b/src/lib/database/users.ts index 9fd46b932..cdabf3588 100644 --- a/src/lib/database/users.ts +++ b/src/lib/database/users.ts @@ -1,5 +1,6 @@ import cuid from 'cuid'; -import bcrypt from 'bcrypt'; +import bcrypt from 'bcryptjs'; + import { prisma } from './common'; import { asyncExecShell, uniqueName } from '$lib/common'; import * as db from '$lib/database'; @@ -45,27 +46,43 @@ export async function login({ if (users === 0) { await prisma.setting.update({ where: { id }, data: { isRegistrationEnabled: false } }); // Create default network & start Coolify Proxy - asyncExecShell(`docker network create --attachable coolify`) - .then(() => { - console.log('Network created'); - }) - .catch(() => { - console.log('Network already exists.'); - }); - - startCoolifyProxy('/var/run/docker.sock') - .then(() => { - console.log('Coolify Proxy started.'); - }) - .catch((err) => { - console.log(err); - }); + await asyncExecShell(`docker network create --attachable coolify`); + await startCoolifyProxy('/var/run/docker.sock'); uid = '0'; } if (userFound) { if (userFound.type === 'email') { - const passwordMatch = bcrypt.compare(password, userFound.password); + if (userFound.password === 'RESETME') { + const hashedPassword = await hashPassword(password); + if (userFound.updatedAt < new Date(Date.now() - 1000 * 60 * 10)) { + await prisma.user.update({ + where: { email: userFound.email }, + data: { password: 'RESETTIMEOUT' } + }); + throw { + error: 'Password reset link has expired. Please request a new one.' + }; + } else { + await prisma.user.update({ + where: { email: userFound.email }, + data: { password: hashedPassword } + }); + return { + status: 200, + headers: { + 'Set-Cookie': `teamId=${uid}; HttpOnly; Path=/; Max-Age=15778800;` + }, + body: { + userId: userFound.id, + teamId: userFound.id, + permission: userFound.permission, + isAdmin: true + } + }; + } + } + const passwordMatch = await bcrypt.compare(password, userFound.password); if (!passwordMatch) { throw { error: 'Wrong password or email address.' diff --git a/src/lib/importers/gitlab.ts b/src/lib/importers/gitlab.ts index b7eb6d47b..966b22c96 100644 --- a/src/lib/importers/gitlab.ts +++ b/src/lib/importers/gitlab.ts @@ -19,7 +19,7 @@ export default async function ({ repodir: string; privateSshKey: string; }): Promise { - const url = htmlUrl.replace('https://', '').replace('http://', ''); + const url = htmlUrl.replace('https://', '').replace('http://', '').replace(/\/$/, ''); await saveBuildLog({ line: 'GitLab importer started.', buildId, applicationId }); await asyncExecShell(`echo '${privateSshKey}' > ${repodir}/id.rsa`); await asyncExecShell(`chmod 600 ${repodir}/id.rsa`); diff --git a/src/lib/letsencrypt/index.ts b/src/lib/letsencrypt/index.ts index 228f6b534..b90cac5bd 100644 --- a/src/lib/letsencrypt/index.ts +++ b/src/lib/letsencrypt/index.ts @@ -3,6 +3,7 @@ import { checkContainer, reloadHaproxy } from '$lib/haproxy'; import * as db from '$lib/database'; import { dev } from '$app/env'; import cuid from 'cuid'; +import fs from 'fs/promises'; import getPort, { portNumbers } from 'get-port'; import { supportedServiceTypesAndVersions } from '$lib/components/common'; @@ -182,12 +183,41 @@ export async function generateSSLCerts(): Promise { if (isHttps) ssls.push({ domain, id: 'coolify', isCoolify: true }); } if (ssls.length > 0) { + const sslDir = dev ? '/tmp/ssl' : '/app/ssl'; + if (dev) { + try { + await asyncExecShell(`mkdir -p ${sslDir}`); + } catch (error) { + // + } + } + const files = await fs.readdir(sslDir); + let certificates = []; + if (files.length > 0) { + for (const file of files) { + file.endsWith('.pem') && certificates.push(file.replace(/\.pem$/, '')); + } + } for (const ssl of ssls) { if (!dev) { - console.log('Checking SSL for', ssl.domain); - await letsEncrypt(ssl.domain, ssl.id, ssl.isCoolify); + if ( + certificates.includes(ssl.domain) || + certificates.includes(ssl.domain.replace('www.', '')) + ) { + console.log(`Certificate for ${ssl.domain} already exists`); + } else { + console.log('Generating SSL for', ssl.domain); + await letsEncrypt(ssl.domain, ssl.id, ssl.isCoolify); + } } else { - console.log('Checking SSL for', ssl.domain); + if ( + certificates.includes(ssl.domain) || + certificates.includes(ssl.domain.replace('www.', '')) + ) { + console.log(`Certificate for ${ssl.domain} already exists`); + } else { + console.log('Generating SSL for', ssl.domain); + } } } } diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index 8d5922450..09b030328 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -12,7 +12,7 @@ if (!session.userId) { return {}; } - const endpoint = `/teams.json`; + const endpoint = `/dashboard.json`; const res = await fetch(endpoint); if (res.ok) { @@ -434,13 +434,12 @@
- + {#if $session.teamId === '0'} {/if} +
diff --git a/src/routes/applications/[id]/configuration/destination.svelte b/src/routes/applications/[id]/configuration/destination.svelte index 2c796b5ed..1b0c6df5c 100644 --- a/src/routes/applications/[id]/configuration/destination.svelte +++ b/src/routes/applications/[id]/configuration/destination.svelte @@ -29,7 +29,7 @@
Select a Git Source
- {#if !filteredSources || filteredSources.length === 0} + {#if !filteredSources || ownSources.length === 0}
No configurable Git Source found
{:else} -
- {#each filteredSources as source} +
+ {#each ownSources as source} +
+
handleSubmit(source.id)}> + +
+
+ {/each} +
+ + {#if otherSources.length > 0 && $session.teamId === '0'} +
Other Sources
+ {/if} +
+ {#each otherSources as source}
handleSubmit(source.id)}>

Paste .env file