diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8c0d613c2..6bc8b4792 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -19,7 +19,7 @@ jobs:
packages: write
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set Build Variables
run: |
@@ -42,20 +42,22 @@ jobs:
cat package.json
- name: Login to DockerHub
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker images
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v7
+ env:
+ DOCKER_BUILD_SUMMARY: false
with:
context: .
file: dev/build/Dockerfile
@@ -77,7 +79,7 @@ jobs:
find _dist/wiki/ -printf "%P\n" | tar -czf wiki-js.tar.gz --no-recursion -C _dist/wiki/ -T -
- name: Upload a Build Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: drop
path: wiki-js.tar.gz
@@ -92,7 +94,7 @@ jobs:
dbtype: [postgres, mysql, mariadb, sqlite]
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set Test Variables
run: |
@@ -115,21 +117,13 @@ jobs:
arm:
name: ARM Build
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04-arm
needs: [cypress]
permissions:
packages: write
- strategy:
- matrix:
- include:
- - platform: linux/arm64
- docker: arm64
- # - platform: linux/arm/v7
- # docker: armv7
-
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set Version Variables
run: |
@@ -142,26 +136,26 @@ jobs:
fi
- name: Set up QEMU
- uses: docker/setup-qemu-action@v3
+ uses: docker/setup-qemu-action@v4
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@v4
- name: Login to DockerHub
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Download a Build Artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v8
with:
name: drop
path: drop
@@ -172,16 +166,18 @@ jobs:
tar -xzf $GITHUB_WORKSPACE/drop/wiki-js.tar.gz -C $GITHUB_WORKSPACE/build --exclude=node_modules
- name: Build and push Docker images
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v7
+ env:
+ DOCKER_BUILD_SUMMARY: false
with:
context: .
file: dev/build-arm/Dockerfile
- platforms: ${{ matrix.platform }}
+ platforms: linux/arm64
provenance: false
push: true
tags: |
- requarks/wiki:canary-${{ matrix.docker }}-${{ env.REL_VERSION_STRICT }}
- ghcr.io/requarks/wiki:canary-${{ matrix.docker }}-${{ env.REL_VERSION_STRICT }}
+ requarks/wiki:canary-arm64-${{ env.REL_VERSION_STRICT }}
+ ghcr.io/requarks/wiki:canary-arm64-${{ env.REL_VERSION_STRICT }}
windows:
name: Windows Build
@@ -190,12 +186,12 @@ jobs:
steps:
- name: Setup Node.js environment
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
- node-version: 20.x
+ node-version: 24.x
- name: Download a Build Artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v8
with:
name: drop
path: drop
@@ -218,10 +214,10 @@ jobs:
Copy-Item patch-extractfile.json win\node_modules\extract-files\package.json -Force
- name: Create Bundle
- run: tar -czf wiki-js-windows.tar.gz -C $env:GITHUB_WORKSPACE\win .
+ run: tar -czf $env:GITHUB_WORKSPACE\wiki-js-windows.tar.gz -C $env:GITHUB_WORKSPACE\win .
- name: Upload a Build Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: drop-win
path: wiki-js-windows.tar.gz
@@ -241,13 +237,13 @@ jobs:
echo "REL_VERSION_STRICT=${GITHUB_REF_NAME#?}" >> $GITHUB_ENV
- name: Login to DockerHub
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
@@ -282,13 +278,13 @@ jobs:
echo "REL_VERSION_STRICT=${GITHUB_REF_NAME#?}" >> $GITHUB_ENV
- name: Login to DockerHub
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
@@ -328,13 +324,13 @@ jobs:
docker manifest push -p ghcr.io/requarks/wiki:latest
- name: Download Linux Build
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v8
with:
name: drop
path: drop
- name: Download Windows Build
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v8
with:
name: drop-win
path: drop-win
@@ -348,7 +344,7 @@ jobs:
writeToFile: false
- name: Update GitHub Release
- uses: ncipollo/release-action@v1.12.0
+ uses: ncipollo/release-action@v1.21.0
with:
allowUpdates: true
draft: false
@@ -370,7 +366,7 @@ jobs:
# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
- name: Notify Telegram Channel
- uses: appleboy/telegram-action@v0.1.1
+ uses: appleboy/telegram-action@v1.0.1
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
@@ -392,7 +388,7 @@ jobs:
# needs: [release]
# steps:
- # - uses: actions/checkout@v4
+ # - uses: actions/checkout@v6
# - name: Set Version Variables
# run: |
diff --git a/.github/workflows/helm.yml b/.github/workflows/helm.yml
index 5c27af1ed..9543c0762 100644
--- a/.github/workflows/helm.yml
+++ b/.github/workflows/helm.yml
@@ -16,11 +16,12 @@ jobs:
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v6
- name: Package and Push Chart
run: |
+ export CHARTVER=$(yq '.version' dev/helm/Chart.yaml)
helm plugin install https://github.com/chartmuseum/helm-push.git
helm repo add chartmuseum https://charts.js.wiki
- helm cm-push --version="2.2.${{github.run_number}}" --username="${{secrets.HELM_REPO_USERNAME}}" --password="${{secrets.HELM_REPO_PASSWORD}}" dev/helm/ chartmuseum
+ helm cm-push --version="$CHARTVER" --username="${{secrets.HELM_REPO_USERNAME}}" --password="${{secrets.HELM_REPO_PASSWORD}}" dev/helm/ chartmuseum
helm repo remove chartmuseum
diff --git a/.github/workflows/packer.yml b/.github/workflows/packer.yml
index 4ef42f316..ed1c94958 100644
--- a/.github/workflows/packer.yml
+++ b/.github/workflows/packer.yml
@@ -14,13 +14,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v6
- name: Install Packer
run: |
- curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
- sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
- sudo apt-get update && sudo apt-get install packer
+ wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
+ sudo apt update && sudo apt install packer
- name: Build Droplet Image
env:
@@ -28,4 +28,5 @@ jobs:
WIKI_APP_VERSION: ${{ github.event.inputs.version }}
working-directory: dev/packer
run: |
+ packer plugins install github.com/digitalocean/digitalocean
packer build digitalocean.json
diff --git a/.nvmrc b/.nvmrc
index 860cc5000..821e3957b 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-v18.17.1
+v24.12.0
diff --git a/.vscode/settings.json b/.vscode/settings.json
index dc1a054c6..75e3a4478 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -8,7 +8,7 @@
"vue"
],
"editor.codeActionsOnSave": {
- "source.fixAll.eslint": true
+ "source.fixAll.eslint": "explicit"
},
"i18n-ally.localesPaths": [
"server/locales"
diff --git a/README.md b/README.md
index 5a25b9c2e..9b2b9f1cf 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,6 @@
- [Feature Requests](https://feedback.js.wiki/wiki)
- Chat with us on [Discord](https://discord.gg/rcxt9QS2jd)
- [Translations](https://docs.requarks.io/dev/translations) *(We need your help!)*
-- [E2E Testing Results](https://dashboard.cypress.io/projects/r7qxah/runs)
- [Special Thanks](#special-thanks)
- [Contribute](#contributors)
@@ -91,68 +90,74 @@ Support this project by becoming a sponsor. Your name will show up in the Contri
@@ -506,9 +511,6 @@ This project exists thanks to all the people who contribute. [[Contribute]](http

[Icons8](https://icons8.com/) for providing access to their beautiful icon sets.
-
-[Localazy](https://localazy.com/) for providing access to their great localization service.
-

[Lokalise](https://lokalise.com/) for providing access to their great localization tool.
diff --git a/client/client-app.js b/client/client-app.js
index 40f4cc60d..cdf27a804 100644
--- a/client/client-app.js
+++ b/client/client-app.js
@@ -103,7 +103,7 @@ const graphQLLink = ApolloLink.from([
// Handle renewed JWT
const newJWT = resp.headers.get('new-jwt')
if (newJWT) {
- Cookies.set('jwt', newJWT, { expires: 365 })
+ Cookies.set('jwt', newJWT, { expires: 365, secure: window.location.protocol === 'https:' })
}
return resp
}
@@ -114,7 +114,11 @@ const graphQLWSLink = new WebSocketLink({
uri: graphQLWSEndpoint,
options: {
reconnect: true,
- lazy: true
+ lazy: true,
+ connectionParams: () => {
+ const token = Cookies.get('jwt')
+ return token ? { token } : {}
+ }
}
})
@@ -148,30 +152,30 @@ Vue.prototype.Velocity = Velocity
// Register Vue Components
// ====================================
-Vue.component('admin', () => import(/* webpackChunkName: "admin" */ './components/admin.vue'))
-Vue.component('comments', () => import(/* webpackChunkName: "comments" */ './components/comments.vue'))
-Vue.component('editor', () => import(/* webpackPrefetch: -100, webpackChunkName: "editor" */ './components/editor.vue'))
-Vue.component('history', () => import(/* webpackChunkName: "history" */ './components/history.vue'))
-Vue.component('loader', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/loader.vue'))
-Vue.component('login', () => import(/* webpackPrefetch: true, webpackChunkName: "login" */ './components/login.vue'))
-Vue.component('nav-header', () => import(/* webpackMode: "eager" */ './components/common/nav-header.vue'))
-Vue.component('new-page', () => import(/* webpackChunkName: "new-page" */ './components/new-page.vue'))
-Vue.component('notify', () => import(/* webpackMode: "eager" */ './components/common/notify.vue'))
-Vue.component('not-found', () => import(/* webpackChunkName: "not-found" */ './components/not-found.vue'))
-Vue.component('page-selector', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/page-selector.vue'))
-Vue.component('page-source', () => import(/* webpackChunkName: "source" */ './components/source.vue'))
-Vue.component('profile', () => import(/* webpackChunkName: "profile" */ './components/profile.vue'))
-Vue.component('register', () => import(/* webpackChunkName: "register" */ './components/register.vue'))
-Vue.component('search-results', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/search-results.vue'))
-Vue.component('social-sharing', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/social-sharing.vue'))
-Vue.component('tags', () => import(/* webpackChunkName: "tags" */ './components/tags.vue'))
-Vue.component('unauthorized', () => import(/* webpackChunkName: "unauthorized" */ './components/unauthorized.vue'))
-Vue.component('v-card-chin', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/v-card-chin.vue'))
-Vue.component('v-card-info', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/v-card-info.vue'))
-Vue.component('welcome', () => import(/* webpackChunkName: "welcome" */ './components/welcome.vue'))
-
-Vue.component('nav-footer', () => import(/* webpackChunkName: "theme" */ './themes/' + siteConfig.theme + '/components/nav-footer.vue'))
-Vue.component('page', () => import(/* webpackChunkName: "theme" */ './themes/' + siteConfig.theme + '/components/page.vue'))
+Vue.component('Admin', () => import(/* webpackChunkName: "admin" */ './components/admin.vue'))
+Vue.component('Comments', () => import(/* webpackChunkName: "comments" */ './components/comments.vue'))
+Vue.component('Editor', () => import(/* webpackPrefetch: -100, webpackChunkName: "editor" */ './components/editor.vue'))
+Vue.component('History', () => import(/* webpackChunkName: "history" */ './components/history.vue'))
+Vue.component('Loader', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/loader.vue'))
+Vue.component('Login', () => import(/* webpackPrefetch: true, webpackChunkName: "login" */ './components/login.vue'))
+Vue.component('NavHeader', () => import(/* webpackMode: "eager" */ './components/common/nav-header.vue'))
+Vue.component('NewPage', () => import(/* webpackChunkName: "new-page" */ './components/new-page.vue'))
+Vue.component('Notify', () => import(/* webpackMode: "eager" */ './components/common/notify.vue'))
+Vue.component('NotFound', () => import(/* webpackChunkName: "not-found" */ './components/not-found.vue'))
+Vue.component('PageSelector', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/page-selector.vue'))
+Vue.component('PageSource', () => import(/* webpackChunkName: "source" */ './components/source.vue'))
+Vue.component('Profile', () => import(/* webpackChunkName: "profile" */ './components/profile.vue'))
+Vue.component('Register', () => import(/* webpackChunkName: "register" */ './components/register.vue'))
+Vue.component('SearchResults', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/search-results.vue'))
+Vue.component('SocialSharing', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/social-sharing.vue'))
+Vue.component('Tags', () => import(/* webpackChunkName: "tags" */ './components/tags.vue'))
+Vue.component('Unauthorized', () => import(/* webpackChunkName: "unauthorized" */ './components/unauthorized.vue'))
+Vue.component('VCardChin', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/v-card-chin.vue'))
+Vue.component('VCardInfo', () => import(/* webpackPrefetch: true, webpackChunkName: "ui-extra" */ './components/common/v-card-info.vue'))
+Vue.component('Welcome', () => import(/* webpackChunkName: "welcome" */ './components/welcome.vue'))
+
+Vue.component('NavFooter', () => import(/* webpackChunkName: "theme" */ './themes/' + siteConfig.theme + '/components/nav-footer.vue'))
+Vue.component('Page', () => import(/* webpackChunkName: "theme" */ './themes/' + siteConfig.theme + '/components/page.vue'))
let bootstrap = () => {
// ====================================
diff --git a/client/components/admin/admin-groups-edit-permissions.vue b/client/components/admin/admin-groups-edit-permissions.vue
index 91b1b6841..62304129b 100644
--- a/client/components/admin/admin-groups-edit-permissions.vue
+++ b/client/components/admin/admin-groups-edit-permissions.vue
@@ -149,28 +149,28 @@ export default {
items: [
{
permission: 'write:users',
- hint: 'Can create or authorize new users, but not modify existing ones',
+ hint: 'Can create or authorize new users, but not modify existing ones. Can only assign to non-administrative groups',
warning: false,
restrictedForSystem: true,
disabled: false
},
{
permission: 'manage:users',
- hint: 'Can manage all users (but not users with administrative permissions)',
+ hint: 'Can create, authorize and modify ANY users. Can only assign to non-administrative groups',
warning: false,
restrictedForSystem: true,
disabled: false
},
{
permission: 'write:groups',
- hint: 'Can manage groups and assign CONTENT permissions / page rules',
+ hint: 'Can manage groups and set CONTENT permissions / page rules. Can only assign users to non-administrative groups',
warning: false,
restrictedForSystem: true,
disabled: false
},
{
permission: 'manage:groups',
- hint: 'Can manage groups and assign ANY permissions (but not manage:system) / page rules',
+ hint: 'Can manage groups and set ANY permissions (but not manage:system) / page rules. Can assign users to ANY groups (except groups with the manage:system permission)',
warning: true,
restrictedForSystem: true,
disabled: false
@@ -203,7 +203,7 @@ export default {
},
{
permission: 'manage:system',
- hint: 'Can manage and access everything. Root administrator.',
+ hint: 'Can manage and access everything. Root administrator',
warning: true,
restrictedForSystem: true,
disabled: true
diff --git a/client/components/admin/admin-pages-edit.vue b/client/components/admin/admin-pages-edit.vue
index cd43533bf..aef5126c8 100644
--- a/client/components/admin/admin-pages-edit.vue
+++ b/client/components/admin/admin-pages-edit.vue
@@ -39,14 +39,14 @@
v-list-item-icon
v-icon(color='indigo') mdi-pencil
v-list-item-title Edit
- v-list-item(@click='', disabled)
- v-list-item-icon
- v-icon(color='grey') mdi-cube-scan
- v-list-item-title Re-Render
- v-list-item(@click='', disabled)
- v-list-item-icon
- v-icon(color='grey') mdi-earth-remove
- v-list-item-title Unpublish
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-icon
+ //- v-icon(color='grey') mdi-cube-scan
+ //- v-list-item-title Re-Render
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-icon
+ //- v-icon(color='grey') mdi-earth-remove
+ //- v-list-item-title Unpublish
v-list-item(:href='`/s/` + page.locale + `/` + page.path')
v-list-item-icon
v-icon(color='indigo') mdi-code-tags
@@ -55,14 +55,14 @@
v-list-item-icon
v-icon(color='indigo') mdi-history
v-list-item-title View History
- v-list-item(@click='', disabled)
- v-list-item-icon
- v-icon(color='grey') mdi-content-duplicate
- v-list-item-title Duplicate
- v-list-item(@click='', disabled)
- v-list-item-icon
- v-icon(color='grey') mdi-content-save-move-outline
- v-list-item-title Move / Rename
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-icon
+ //- v-icon(color='grey') mdi-content-duplicate
+ //- v-list-item-title Duplicate
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-icon
+ //- v-icon(color='grey') mdi-content-save-move-outline
+ //- v-list-item-title Move / Rename
v-dialog(v-model='deletePageDialog', max-width='500')
template(v-slot:activator='{ on }')
v-list-item(v-on='on')
diff --git a/client/components/admin/admin-pages.vue b/client/components/admin/admin-pages.vue
index 0ca26de1b..3f056eef3 100644
--- a/client/components/admin/admin-pages.vue
+++ b/client/components/admin/admin-pages.vue
@@ -10,9 +10,9 @@
v-spacer
v-btn.animated.fadeInDown.wait-p1s(icon, color='grey', outlined, @click='refresh')
v-icon.grey--text mdi-refresh
- v-btn.animated.fadeInDown.mx-3(color='primary', outlined, @click='recyclebin', disabled)
- v-icon(left) mdi-delete-outline
- span Recycle Bin
+ //- v-btn.animated.fadeInDown.mx-3(color='primary', outlined, @click='recyclebin', disabled)
+ //- v-icon(left) mdi-delete-outline
+ //- span Recycle Bin
v-btn.animated.fadeInDown(color='primary', depressed, large, to='pages/visualize')
v-icon(left) mdi-graph
span Visualize
diff --git a/client/components/admin/admin-users-create.vue b/client/components/admin/admin-users-create.vue
index 7128149e7..a03500678 100644
--- a/client/components/admin/admin-users-create.vue
+++ b/client/components/admin/admin-users-create.vue
@@ -70,13 +70,13 @@
v-model='mustChangePwd'
hide-details
)
- v-checkbox(
- color='primary'
- label='Send a welcome email'
- hide-details
- v-model='sendWelcomeEmail'
- disabled
- )
+ //- v-checkbox(
+ //- color='primary'
+ //- label='Send a welcome email'
+ //- hide-details
+ //- v-model='sendWelcomeEmail'
+ //- disabled
+ //- )
v-card-chin
v-spacer
v-btn(text, @click='isShown = false') Cancel
diff --git a/client/components/admin/admin-users-edit.vue b/client/components/admin/admin-users-edit.vue
index a9e200706..fb224fbd2 100644
--- a/client/components/admin/admin-users-edit.vue
+++ b/client/components/admin/admin-users-edit.vue
@@ -337,12 +337,12 @@
.caption.grey--text.mt-3 {{$t('profile:activity.lastLoginOn')}}
.body-2: strong {{ user.lastLoginAt | moment('LLLL') }}
- v-card.mt-3.animated.fadeInUp.wait-p6s
- v-toolbar(color='teal', dense, dark, flat)
- v-icon.mr-2 mdi-file-document-box-multiple-outline
- span Content
- v-card-text
- em.caption.grey--text Coming soon
+ //- v-card.mt-3.animated.fadeInUp.wait-p6s
+ //- v-toolbar(color='teal', dense, dark, flat)
+ //- v-icon.mr-2 mdi-file-document-box-multiple-outline
+ //- span Content
+ //- v-card-text
+ //- em.caption.grey--text Coming soon
v-dialog(v-model='deleteUserDialog', max-width='500')
v-card
diff --git a/client/components/common/nav-header.vue b/client/components/common/nav-header.vue
index d8fc3c806..e5f7acdfe 100644
--- a/client/components/common/nav-header.vue
+++ b/client/components/common/nav-header.vue
@@ -15,7 +15,7 @@
prepend-inner-icon='mdi-magnify'
:loading='searchIsLoading'
@keyup.enter='searchEnter'
- autocomplete='none'
+ autocomplete='off'
)
v-layout(row)
v-flex(xs5, md4)
@@ -68,7 +68,7 @@
@blur='searchBlur'
@keyup.down='searchMove(`down`)'
@keyup.up='searchMove(`up`)'
- autocomplete='none'
+ autocomplete='off'
)
v-tooltip(bottom)
template(v-slot:activator='{ on }')
@@ -476,7 +476,11 @@ export default {
window.location.assign('/logout')
},
goHome () {
- window.location.assign('/')
+ if (this.locales && this.locales.length > 0) {
+ window.location.assign(`/${this.locale}/home`)
+ } else {
+ window.location.assign('/')
+ }
}
}
}
diff --git a/client/components/editor/editor-asciidoc.vue b/client/components/editor/editor-asciidoc.vue
index 296b2414b..126ba370e 100644
--- a/client/components/editor/editor-asciidoc.vue
+++ b/client/components/editor/editor-asciidoc.vue
@@ -228,7 +228,8 @@ export default {
})
this.previewHTML = DOMPurify.sanitize($.html(), {
- ADD_TAGS: ['foreignObject']
+ ADD_TAGS: ['foreignObject'],
+ HTML_INTEGRATION_POINTS: { foreignobject: true }
})
},
/**
diff --git a/client/components/editor/editor-markdown.vue b/client/components/editor/editor-markdown.vue
index 4ca6e192c..baee118d0 100644
--- a/client/components/editor/editor-markdown.vue
+++ b/client/components/editor/editor-markdown.vue
@@ -454,7 +454,8 @@ export default {
// this.$store.set('editor/content', newContent)
this.processMarkers(this.cm.firstLine(), this.cm.lastLine())
this.previewHTML = DOMPurify.sanitize(md.render(newContent), {
- ADD_TAGS: ['foreignObject']
+ ADD_TAGS: ['foreignObject'],
+ HTML_INTEGRATION_POINTS: { foreignobject: true }
})
this.$nextTick(() => {
tabsetHelper.format()
diff --git a/client/components/editor/editor-modal-media.vue b/client/components/editor/editor-modal-media.vue
index 100a36df8..67efe1222 100644
--- a/client/components/editor/editor-modal-media.vue
+++ b/client/components/editor/editor-modal-media.vue
@@ -83,31 +83,31 @@
v-btn(icon, v-on='on', tile, small, @click.left='currentFileId = props.item.id')
v-icon(color='grey darken-2') mdi-dots-horizontal
v-list(nav, style='border-top: 5px solid #444;')
- v-list-item(@click='', disabled)
- v-list-item-avatar(size='24')
- v-icon(color='teal') mdi-text-short
- v-list-item-content {{$t('common:actions.properties')}}
- template(v-if='props.item.kind === `IMAGE`')
- v-list-item(@click='previewDialog = true', disabled)
- v-list-item-avatar(size='24')
- v-icon(color='green') mdi-image-search-outline
- v-list-item-content {{$t('common:actions.preview')}}
- v-list-item(@click='', disabled)
- v-list-item-avatar(size='24')
- v-icon(color='indigo') mdi-crop-rotate
- v-list-item-content {{$t('common:actions.edit')}}
- v-list-item(@click='', disabled)
- v-list-item-avatar(size='24')
- v-icon(color='purple') mdi-flash-circle
- v-list-item-content {{$t('common:actions.optimize')}}
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-avatar(size='24')
+ //- v-icon(color='teal') mdi-text-short
+ //- v-list-item-content {{$t('common:actions.properties')}}
+ //- template(v-if='props.item.kind === `IMAGE`')
+ //- v-list-item(@click='previewDialog = true', disabled)
+ //- v-list-item-avatar(size='24')
+ //- v-icon(color='green') mdi-image-search-outline
+ //- v-list-item-content {{$t('common:actions.preview')}}
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-avatar(size='24')
+ //- v-icon(color='indigo') mdi-crop-rotate
+ //- v-list-item-content {{$t('common:actions.edit')}}
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-avatar(size='24')
+ //- v-icon(color='purple') mdi-flash-circle
+ //- v-list-item-content {{$t('common:actions.optimize')}}
v-list-item(@click='openRenameDialog')
v-list-item-avatar(size='24')
v-icon(color='orange') mdi-keyboard-outline
v-list-item-content {{$t('common:actions.rename')}}
- v-list-item(@click='', disabled)
- v-list-item-avatar(size='24')
- v-icon(color='blue') mdi-file-move
- v-list-item-content {{$t('common:actions.move')}}
+ //- v-list-item(@click='', disabled)
+ //- v-list-item-avatar(size='24')
+ //- v-icon(color='blue') mdi-file-move
+ //- v-list-item-content {{$t('common:actions.move')}}
v-list-item(@click='deleteDialog = true')
v-list-item-avatar(size='24')
v-icon(color='red') mdi-file-hidden
@@ -154,25 +154,25 @@
v-spacer
v-btn.px-4(color='teal', dark, @click='upload') {{$t('common:actions.upload')}}
- v-card.mt-3.radius-7.animated.fadeInRight.wait-p4s(:light='!$vuetify.theme.dark', :dark='$vuetify.theme.dark')
- v-card-text.pb-0
- v-toolbar.radius-7(:color='$vuetify.theme.dark ? `teal` : `teal lighten-5`', dense, flat)
- v-icon.mr-3(:color='$vuetify.theme.dark ? `white` : `teal`') mdi-cloud-download
- .body-2(:class='$vuetify.theme.dark ? `white--text` : `teal--text`') {{$t('editor:assets.fetchImage')}}
- v-spacer
- v-chip(label, color='white', small).teal--text coming soon
- v-text-field.mt-3(
- v-model='remoteImageUrl'
- outlined
- color='teal'
- single-line
- placeholder='https://example.com/image.jpg'
- )
- v-divider
- v-card-actions.pa-3
- .caption.grey--text.text-darken-2 Max 5 MB
- v-spacer
- v-btn.px-4(color='teal', disabled) {{$t('common:actions.fetch')}}
+ //- v-card.mt-3.radius-7.animated.fadeInRight.wait-p4s(:light='!$vuetify.theme.dark', :dark='$vuetify.theme.dark')
+ //- v-card-text.pb-0
+ //- v-toolbar.radius-7(:color='$vuetify.theme.dark ? `teal` : `teal lighten-5`', dense, flat)
+ //- v-icon.mr-3(:color='$vuetify.theme.dark ? `white` : `teal`') mdi-cloud-download
+ //- .body-2(:class='$vuetify.theme.dark ? `white--text` : `teal--text`') {{$t('editor:assets.fetchImage')}}
+ //- v-spacer
+ //- v-chip(label, color='white', small).teal--text coming soon
+ //- v-text-field.mt-3(
+ //- v-model='remoteImageUrl'
+ //- outlined
+ //- color='teal'
+ //- single-line
+ //- placeholder='https://example.com/image.jpg'
+ //- )
+ //- v-divider
+ //- v-card-actions.pa-3
+ //- .caption.grey--text.text-darken-2 Max 5 MB
+ //- v-spacer
+ //- v-btn.px-4(color='teal', disabled) {{$t('common:actions.fetch')}}
v-card.mt-3.radius-7.animated.fadeInRight.wait-p4s(:light='!$vuetify.theme.dark', :dark='$vuetify.theme.dark')
v-card-text.pb-0
diff --git a/client/components/editor/editor-modal-properties.vue b/client/components/editor/editor-modal-properties.vue
index 0738b333f..a6ed1af3f 100644
--- a/client/components/editor/editor-modal-properties.vue
+++ b/client/components/editor/editor-modal-properties.vue
@@ -21,7 +21,7 @@
v-tab {{$t('editor:props.info')}}
v-tab {{$t('editor:props.scheduling')}}
v-tab(:disabled='!hasScriptPermission') {{$t('editor:props.scripts')}}
- v-tab(disabled) {{$t('editor:props.social')}}
+ //- v-tab(disabled) {{$t('editor:props.social')}}
v-tab(:disabled='!hasStylePermission') {{$t('editor:props.styles')}}
v-tab-item(transition='fade-transition', reverse-transition='fade-transition')
v-card-text.pt-5
@@ -196,42 +196,42 @@
.editor-props-codeeditor-hint
.caption {{$t('editor:props.htmlHint')}}
- v-tab-item(transition='fade-transition', reverse-transition='fade-transition')
- v-card-text
- .overline {{$t('editor:props.socialFeatures')}}
- v-switch(
- :label='$t(`editor:props.allowComments`)'
- v-model='isPublished'
- color='primary'
- :hint='$t(`editor:props.allowCommentsHint`)'
- persistent-hint
- inset
- )
- v-switch(
- :label='$t(`editor:props.allowRatings`)'
- v-model='isPublished'
- color='primary'
- :hint='$t(`editor:props.allowRatingsHint`)'
- persistent-hint
- disabled
- inset
- )
- v-switch(
- :label='$t(`editor:props.displayAuthor`)'
- v-model='isPublished'
- color='primary'
- :hint='$t(`editor:props.displayAuthorHint`)'
- persistent-hint
- inset
- )
- v-switch(
- :label='$t(`editor:props.displaySharingBar`)'
- v-model='isPublished'
- color='primary'
- :hint='$t(`editor:props.displaySharingBarHint`)'
- persistent-hint
- inset
- )
+ //- v-tab-item(transition='fade-transition', reverse-transition='fade-transition')
+ //- v-card-text
+ //- .overline {{$t('editor:props.socialFeatures')}}
+ //- v-switch(
+ //- :label='$t(`editor:props.allowComments`)'
+ //- v-model='isPublished'
+ //- color='primary'
+ //- :hint='$t(`editor:props.allowCommentsHint`)'
+ //- persistent-hint
+ //- inset
+ //- )
+ //- v-switch(
+ //- :label='$t(`editor:props.allowRatings`)'
+ //- v-model='isPublished'
+ //- color='primary'
+ //- :hint='$t(`editor:props.allowRatingsHint`)'
+ //- persistent-hint
+ //- disabled
+ //- inset
+ //- )
+ //- v-switch(
+ //- :label='$t(`editor:props.displayAuthor`)'
+ //- v-model='isPublished'
+ //- color='primary'
+ //- :hint='$t(`editor:props.displayAuthorHint`)'
+ //- persistent-hint
+ //- inset
+ //- )
+ //- v-switch(
+ //- :label='$t(`editor:props.displaySharingBar`)'
+ //- v-model='isPublished'
+ //- color='primary'
+ //- :hint='$t(`editor:props.displaySharingBarHint`)'
+ //- persistent-hint
+ //- inset
+ //- )
v-tab-item(:transition='false', :reverse-transition='false')
.editor-props-codeeditor-title
@@ -276,10 +276,10 @@ export default {
currentTab: 0,
cm: null,
rules: {
- required: value => !!value || 'This field is required.',
- path: value => {
- return filenamePattern.test(value) || 'Invalid path. Please ensure it does not contain special characters, or begin/end in a slash or hashtag string.'
- }
+ required: value => !!value || 'This field is required.',
+ path: value => {
+ return filenamePattern.test(value) || 'Invalid path. Please ensure it does not contain special characters, or begin/end in a slash or hashtag string.'
+ }
}
}
},
@@ -334,7 +334,7 @@ export default {
this.loadEditor(this.$refs.codejs, 'html')
}, 100)
})
- } else if (newValue === 4) {
+ } else if (newValue === 3) {
this.$nextTick(() => {
setTimeout(() => {
this.loadEditor(this.$refs.codecss, 'css')
diff --git a/client/components/login.vue b/client/components/login.vue
index f74a4744f..0bbaa2a5e 100644
--- a/client/components/login.vue
+++ b/client/components/login.vue
@@ -641,19 +641,25 @@ export default {
} else {
this.loaderColor = 'green darken-1'
this.loaderTitle = this.$t('auth:loginSuccess')
- Cookies.set('jwt', respObj.jwt, { expires: 365 })
+ Cookies.set('jwt', respObj.jwt, { expires: 365, secure: window.location.protocol === 'https:' })
_.delay(() => {
const loginRedirect = Cookies.get('loginRedirect')
+ const isValidRedirect = loginRedirect && loginRedirect.startsWith('/') && !loginRedirect.startsWith('//') && !loginRedirect.includes('://')
if (loginRedirect === '/' && respObj.redirect) {
Cookies.remove('loginRedirect')
window.location.replace(respObj.redirect)
- } else if (loginRedirect) {
+ } else if (isValidRedirect) {
Cookies.remove('loginRedirect')
window.location.replace(loginRedirect)
- } else if (respObj.redirect) {
- window.location.replace(respObj.redirect)
} else {
- window.location.replace('/')
+ if (loginRedirect) {
+ Cookies.remove('loginRedirect')
+ }
+ if (respObj.redirect) {
+ window.location.replace(respObj.redirect)
+ } else {
+ window.location.replace('/')
+ }
}
}, 1000)
}
diff --git a/client/components/profile/profile.vue b/client/components/profile/profile.vue
index 345476d27..dfb0bba82 100644
--- a/client/components/profile/profile.vue
+++ b/client/components/profile/profile.vue
@@ -129,41 +129,43 @@
//- v-btn(color='purple darken-4', disabled).ml-0 Enable 2FA
//- v-btn(color='purple darken-4', dark, depressed, disabled).ml-0 Disable 2FA
template(v-if='user.providerKey === `local`')
- v-divider.mt-3
- v-subheader.pl-0: span.subtitle-2 {{$t('profile:auth.changePassword')}}
- v-text-field(
- ref='iptCurrentPass'
- v-model='currentPass'
- outlined
- :label='$t(`profile:auth.currentPassword`)'
- type='password'
- prepend-inner-icon='mdi-form-textbox-password'
- )
- v-text-field(
- ref='iptNewPass'
- v-model='newPass'
- outlined
- :label='$t(`profile:auth.newPassword`)'
- type='password'
- prepend-inner-icon='mdi-form-textbox-password'
- autocomplete='off'
- counter='255'
- loading
- )
- password-strength(slot='progress', v-model='newPass')
- v-text-field(
- ref='iptVerifyPass'
- v-model='verifyPass'
- outlined
- :label='$t(`profile:auth.verifyPassword`)'
- type='password'
- prepend-inner-icon='mdi-form-textbox-password'
- autocomplete='off'
- hide-details
- )
+ form#change-password-form(@submit.prevent='changePassword')
+ v-divider.mt-3
+ v-subheader.pl-0: span.subtitle-2 {{$t('profile:auth.changePassword')}}
+ v-text-field(
+ ref='iptCurrentPass'
+ v-model='currentPass'
+ outlined
+ :label='$t(`profile:auth.currentPassword`)'
+ type='password'
+ prepend-inner-icon='mdi-form-textbox-password'
+ autocomplete='current-password'
+ )
+ v-text-field(
+ ref='iptNewPass'
+ v-model='newPass'
+ outlined
+ :label='$t(`profile:auth.newPassword`)'
+ type='password'
+ prepend-inner-icon='mdi-form-textbox-password'
+ autocomplete='off'
+ counter='255'
+ loading
+ )
+ password-strength(slot='progress', v-model='newPass')
+ v-text-field(
+ ref='iptVerifyPass'
+ v-model='verifyPass'
+ outlined
+ :label='$t(`profile:auth.verifyPassword`)'
+ type='password'
+ prepend-inner-icon='mdi-form-textbox-password'
+ autocomplete='off'
+ hide-details
+ )
v-card-chin(v-if='user.providerKey === `local`')
v-spacer
- v-btn.px-4(color='purple darken-4', dark, depressed, @click='changePassword', :loading='changePassLoading')
+ v-btn.px-4(color='purple darken-4', dark, depressed, :loading='changePassLoading', type='submit', form='change-password-form')
v-icon(left) mdi-progress-check
span {{$t('profile:auth.changePassword')}}
v-flex(lg6 xs12)
@@ -755,7 +757,7 @@ export default {
})
const resp = _.get(respRaw, 'data.users.updateProfile.responseResult', {})
if (resp.succeeded) {
- Cookies.set('jwt', _.get(respRaw, 'data.users.updateProfile.jwt', ''), { expires: 365 })
+ Cookies.set('jwt', _.get(respRaw, 'data.users.updateProfile.jwt', ''), { expires: 365, secure: window.location.protocol === 'https:' })
this.$store.set('user/name', this.user.name)
this.$store.commit('showNotification', {
message: this.$t('profile:save.success'),
@@ -863,7 +865,7 @@ export default {
this.currentPass = ''
this.newPass = ''
this.verifyPass = ''
- Cookies.set('jwt', _.get(respRaw, 'data.users.changePassword.jwt', ''), { expires: 365 })
+ Cookies.set('jwt', _.get(respRaw, 'data.users.changePassword.jwt', ''), { expires: 365, secure: window.location.protocol === 'https:' })
this.$store.commit('showNotification', {
message: this.$t('profile:auth.changePassSuccess'),
style: 'success',
diff --git a/client/themes/default/components/page.vue b/client/themes/default/components/page.vue
index 0d1f6473f..822e739fc 100644
--- a/client/themes/default/components/page.vue
+++ b/client/themes/default/components/page.vue
@@ -367,6 +367,8 @@ import _ from 'lodash'
import ClipboardJS from 'clipboard'
import Vue from 'vue'
+/* global siteLangs */
+
Vue.component('Tabset', Tabset)
Prism.plugins.autoloader.languages_path = '/_assets/js/prism/'
@@ -493,6 +495,7 @@ export default {
},
data() {
return {
+ locales: siteLangs,
navShown: false,
navExpanded: false,
upBtnShown: false,
@@ -537,13 +540,14 @@ export default {
}
},
breadcrumbs() {
- return [{ path: '/', name: 'Home' }].concat(_.reduce(this.path.split('/'), (result, value, key) => {
- result.push({
- path: _.get(_.last(result), 'path', `/${this.locale}`) + `/${value}`,
- name: value
- })
- return result
- }, []))
+ return [{ path: '/', name: 'Home' }].concat(
+ _.reduce(this.path.split('/'), (result, value) => {
+ result.push({
+ path: _.get(_.last(result), 'path', this.locales.length > 0 ? `/${this.locale}` : '') + `/${value}`,
+ name: value
+ })
+ return result
+ }, []))
},
pageUrl () { return window.location.href },
upBtnPosition () {
@@ -649,7 +653,11 @@ export default {
},
methods: {
goHome () {
- window.location.assign('/')
+ if (this.locales && this.locales.length > 0) {
+ window.location.assign(`/${this.locale}/home`)
+ } else {
+ window.location.assign('/')
+ }
},
toggleNavigation () {
this.navOpen = !this.navOpen
diff --git a/client/themes/default/scss/app.scss b/client/themes/default/scss/app.scss
index c01faf124..88380963f 100644
--- a/client/themes/default/scss/app.scss
+++ b/client/themes/default/scss/app.scss
@@ -685,7 +685,7 @@
display:inline-block;
vertical-align:top;
padding-top:0;
-
+
&:first-child {
width: 100%;
}
@@ -764,8 +764,17 @@
.diagram {
margin-top: 1rem;
overflow: auto;
- svg:first-child {
- direction: ltr;
+
+ svg {
+ color-scheme: light !important;
+
+ &:first-child {
+ direction: ltr;
+ }
+
+ @at-root .theme--dark & {
+ color-scheme: dark !important;
+ }
}
}
@@ -1275,6 +1284,8 @@
color: #000;
box-shadow: none;
text-shadow: none;
+ white-space: pre-wrap !important;
+ overflow-wrap: break-word !important;
}
}
}
diff --git a/dev/build-arm/Dockerfile b/dev/build-arm/Dockerfile
index 19342ee35..61fa23be6 100644
--- a/dev/build-arm/Dockerfile
+++ b/dev/build-arm/Dockerfile
@@ -1,7 +1,7 @@
# =========================
# --- BUILD NPM MODULES ---
# =========================
-FROM node:20-alpine AS build
+FROM node:24-alpine AS build
RUN apk add yarn g++ make cmake python3 --no-cache
@@ -16,7 +16,7 @@ RUN yarn patch-package
# ===============
# --- Release ---
# ===============
-FROM node:20-alpine
+FROM node:24-alpine
LABEL maintainer="requarks.io"
RUN apk add bash curl git openssh gnupg sqlite --no-cache && \
diff --git a/dev/build/Dockerfile b/dev/build/Dockerfile
index fa95ac991..072fad818 100644
--- a/dev/build/Dockerfile
+++ b/dev/build/Dockerfile
@@ -1,7 +1,7 @@
# ====================
# --- Build Assets ---
# ====================
-FROM node:20-alpine AS assets
+FROM node:24-alpine AS assets
RUN apk add yarn g++ make cmake python3 --no-cache
@@ -25,7 +25,7 @@ RUN yarn patch-package
# ===============
# --- Release ---
# ===============
-FROM node:20-alpine
+FROM node:24-alpine
LABEL maintainer="requarks.io"
RUN apk add bash curl git openssh gnupg sqlite --no-cache && \
@@ -53,4 +53,4 @@ EXPOSE 3443
# HEALTHCHECK --interval=30s --timeout=30s --start-period=30s --retries=3 CMD curl -f http://localhost:3000/healthz
-CMD ["node", "server"]
+CMD ["node", "--no-deprecation", "server"]
diff --git a/dev/containers/Dockerfile b/dev/containers/Dockerfile
index 5d4048802..148edc6dc 100644
--- a/dev/containers/Dockerfile
+++ b/dev/containers/Dockerfile
@@ -1,7 +1,7 @@
# -- DEV DOCKERFILE --
# -- DO NOT USE IN PRODUCTION! --
-FROM node:18
+FROM node:24
LABEL maintainer "requarks.io"
RUN apt-get update && \
diff --git a/dev/containers/docker-compose.yml b/dev/containers/docker-compose.yml
index 147d81aef..9fe1fa619 100644
--- a/dev/containers/docker-compose.yml
+++ b/dev/containers/docker-compose.yml
@@ -5,7 +5,7 @@ version: "3"
services:
db:
container_name: wiki-db
- image: postgres:15-alpine
+ image: postgres:17-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
diff --git a/dev/helm/Chart.lock b/dev/helm/Chart.lock
deleted file mode 100644
index d383d6e44..000000000
--- a/dev/helm/Chart.lock
+++ /dev/null
@@ -1,6 +0,0 @@
-dependencies:
-- name: postgresql
- repository: https://charts.bitnami.com/bitnami
- version: 8.10.14
-digest: sha256:db7c1e0bc9ec0ed45520521bd76bb390d04711fd0f04affaadafa1dc498ce68b
-generated: "2020-07-21T20:34:41.41180748-04:00"
diff --git a/dev/helm/Chart.yaml b/dev/helm/Chart.yaml
index 458defa31..83ba6cd1a 100644
--- a/dev/helm/Chart.yaml
+++ b/dev/helm/Chart.yaml
@@ -1,11 +1,7 @@
apiVersion: v2
name: wiki
-# This is the chart version. This version number should be incremented each time you make changes
-# to the chart and its templates, including the app version.
-version: 2.3.0
-# This is the version number of the application being deployed. This version number should be
-# incremented each time you make changes to the application.
-AppVersion: latest
+version: '3.0.0'
+appVersion: '2'
description: The most powerful and extensible open source Wiki software.
keywords:
- wiki
@@ -14,29 +10,8 @@ keywords:
- docs
- reference
- editor
-# A chart can be either an 'application' or a 'library' chart.
-#
-# Application charts are a collection of templates that can be packaged into versioned archives
-# to be deployed.
-#
-# Library charts provide useful utilities or functions for the chart developer. They're included as
-# a dependency of application charts to inject those utilities and functions into the rendering
-# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
-dependencies:
- - name: postgresql
- version: 8.10.14
- repository: https://charts.bitnami.com/bitnami
- condition: postgresql.enabled
-home: https://wiki.js.org
+home: https://js.wiki
icon: https://cdn.js.wiki/images/wikijs-butterfly.svg
sources:
- - https://github.com/Requarks/wiki
-maintainers:
- - name: Nicolas Giard
- email: github@ngpixel.com
- url: https://github.com/NGPixel
- - name: James Greenhill
- email: james@fuziontech.net
- url: https://github.com/fuziontech
-engine: gotpl
+ - https://github.com/requarks/wiki
diff --git a/dev/helm/README.md b/dev/helm/README.md
index c1b73e227..762594b16 100644
--- a/dev/helm/README.md
+++ b/dev/helm/README.md
@@ -43,7 +43,7 @@ Wiki.js is an open source project that has been made possible due to the generou
This chart bootstraps a Wiki.js deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
-It also optionally packages the [PostgreSQL](https://github.com/kubernetes/charts/tree/master/stable/postgresql) as the database but you are free to bring your own.
+It also optionally deploys PostgreSQL as the database using the official PostgreSQL image from Docker Hub, but you are free to bring your own database.
## Prerequisites
@@ -59,7 +59,7 @@ $ helm repo add requarks https://charts.js.wiki
To install the chart with the release name `my-release` run the following:
-### Using Helm 3:
+### Using Helm 3/4:
```console
$ helm install my-release requarks/wiki
```
@@ -95,7 +95,7 @@ The following table lists the configurable parameters of the Wiki.js chart and t
| Parameter | Description | Default |
| ------------------------------- | ------------------------------- | ---------------------------------------------------------- |
| `image.repository` | Wiki.js image | `requarks/wiki` |
-| `image.tag` | Wiki.js image tag | `latest` |
+| `image.tag` | Wiki.js image tag | `2` |
| `imagePullPolicy` | Image pull policy | `IfNotPresent` |
| `replicacount` | Number of Wiki.js pods to run | `1` |
| `revisionHistoryLimit` | Total number of revision history points | `10` |
@@ -119,20 +119,33 @@ The following table lists the configurable parameters of the Wiki.js chart and t
| `sideload.resources.limits` | Resource limits for the sideload container | `nil` |
| `sideload.resources.requests` | Resource requests for the sideload container | `nil` |
| `nodeExtraCaCerts` | Trusted certificates path | `nil` |
+| `externalPostgresql.databaseURL` | External postgres connection string | `nil` |
| `postgresql.enabled` | Deploy postgres server (see below) | `true` |
| `postgresql.postgresqlDatabase` | Postgres database name | `wiki` |
| `postgresql.postgresqlUser` | Postgres username | `postgres` |
-| `postgresql.postgresqlHost` | External postgres host | `nil` |
-| `postgresql.postgresqlPassword` | External postgres password | `nil` |
+| `postgresql.postgresqlHost` | Postgres host | `nil` |
+| `postgresql.postgresqlPassword` | Postgres password | `nil` |
| `postgresql.existingSecret` | Provide an existing `Secret` for postgres | `nil` |
| `postgresql.existingSecretKey` | The postgres password key in the existing `Secret` | `postgresql-password` |
-| `postgresql.postgresqlPort` | External postgres port | `5432` |
+| `postgresql.existingSecretUserKey` | The postgres username key in the existing `Secret` | `postgresql-username` |
+| `postgresql.postgresqlPort` | Postgres port | `5432` |
| `postgresql.ssl` | Enable external postgres SSL connection | `false` |
| `postgresql.ca` | Certificate of Authority content for postgres | `nil` |
| `postgresql.persistence.enabled` | Enable postgres persistence using PVC | `true` |
| `postgresql.persistence.existingClaim` | Provide an existing `PersistentVolumeClaim` for postgres | `nil` |
| `postgresql.persistence.storageClass` | Postgres PVC Storage Class (example: `nfs`) | `nil` |
-| `postgresql.persistence.size` | Postgers PVC Storage Request | `8Gi` |
+| `postgresql.persistence.size` | Postgres PVC Storage Request | `8Gi` |
+| `postgresql.persistence.accessMode` | Postgres Persistent Volume Access Mode | `ReadWriteOnce` |
+| `postgresql.image.repository` | PostgreSQL image repository | `postgres` |
+| `postgresql.image.tag` | PostgreSQL image tag | `18` |
+| `postgresql.image.pullPolicy` | PostgreSQL image pull policy | `IfNotPresent` |
+| `postgresql.resources` | PostgreSQL resource requests/limits | `{}` |
+| `postgresql.nodeSelector` | PostgreSQL node selector labels | `{}` |
+| `postgresql.tolerations` | PostgreSQL toleration labels | `[]` |
+| `postgresql.affinity` | PostgreSQL affinity settings | `{}` |
+| `postgresql.service.type` | PostgreSQL service type | `ClusterIP` |
+| `postgresql.service.port` | PostgreSQL service port | `5432` |
+| `postgresql.service.annotations` | PostgreSQL service annotations | `{}` |
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
@@ -150,25 +163,44 @@ $ helm install --name my-release -f values.yaml requarks/wiki
> **Tip**: You can use the default [values.yaml](values.yaml)
-## PostgresSQL
+## PostgreSQL
-By default, PostgreSQL is installed as part of the chart.
+By default, PostgreSQL is installed as part of the chart using the official PostgreSQL image from Docker Hub (version 18).
### Using an external PostgreSQL server
-To use an external PostgreSQL server, set `postgresql.enabled` to `false` and then set `postgresql.postgresqlHost` and `postgresql.postgresqlPassword`. To use an existing `Secret`, set `postgresql.existingSecret`. The other options (`postgresql.postgresqlDatabase`, `postgresql.postgresqlUser`, `postgresql.postgresqlPort` and `postgresql.existingSecretKey`) may also want changing from their default values.
+To use an external PostgreSQL server, set `postgresql.enabled` to `false`, then use either:
-To use an SSL connection you can set `postgresql.ssl` to `true` and if needed the path to a Certificate of Authority can be set using `postgresql.ca` to `/path/to/ca`. Default `postgresql.ssl` value is `false`.
+#### Connection String
-If `postgresql.existingSecret` is not specified, you also need to add the following Helm template to your deployment in order to create the postgresql `Secret`:
+Set `externalPostgresql.databaseURL` to the full PostgreSQL connection string.
-```yaml
-kind: Secret
-apiVersion: v1
-metadata:
- name: {{ template "wiki.postgresql.secret" . }}
-data:
- {{ template "wiki.postgresql.secretKey" . }}: "{{ .Values.postgresql.postgresqlPassword | b64enc }}"
+#### Connection Parameters
+
+Set `externalPostgresql.host`, `externalPostgres.port`, `externalPostgres.database`, `externalPostgres.username`, `externalPostgres.existingSecret` *(secret name)* and `externalPostgres.existingSecretKey` *(key in the secret containing the password)*
+
+Ensure the secret specified in `externalPostgresql.existingSecret` already exists, with a password set at the path specified in `externalPostgres.existingSecretKey`.
+
+To use an SSL connection you can set `externalPostgresql.ssl` to `true` and if needed the path to a Certificate of Authority can be set using `externalPostgresql.ca` to `/path/to/ca`. Default `externalPostgresql.ssl` value is `false`.
+
+### Using an existing PostgreSQL secret with built-in PostgreSQL
+
+When using the built-in PostgreSQL (default behavior with `postgresql.enabled: true`), you can still use an existing Kubernetes secret for the database credentials by setting:
+
+- `postgresql.existingSecret`: Name of the existing secret containing the credentials
+- `postgresql.existingSecretKey`: Key in the secret containing the password (defaults to `postgresql-password`)
+- `postgresql.existingSecretUserKey`: Key in the secret containing the username (defaults to `postgresql-username`)
+Example usage:
+```bash
+# Create your existing secret
+kubectl create secret generic my-postgres-secret \
+ --from-literal=postgresql-username=postgres \
+ --from-literal=postgresql-password=yourpassword
+
+# Deploy with existing secret
+helm install my-release requarks/wiki \
+ --set postgresql.enabled=true \
+ --set postgresql.existingSecret=my-postgres-secret
```
## Persistence
diff --git a/dev/helm/charts/postgresql-6.5.0.tgz b/dev/helm/charts/postgresql-6.5.0.tgz
deleted file mode 100644
index acc79962c..000000000
Binary files a/dev/helm/charts/postgresql-6.5.0.tgz and /dev/null differ
diff --git a/dev/helm/templates/NOTES.txt b/dev/helm/templates/NOTES.txt
index 93c0d3565..a28c69648 100644
--- a/dev/helm/templates/NOTES.txt
+++ b/dev/helm/templates/NOTES.txt
@@ -19,3 +19,16 @@
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80
{{- end }}
+
+{{- if .Values.postgresql.enabled }}
+2. PostgreSQL database has been deployed as part of this release:
+ - Database: {{ .Values.postgresql.postgresqlDatabase }}
+ - User: {{ .Values.postgresql.postgresqlUser }}
+ - Service: {{ include "wiki.postgresql.fullname" . }}
+ - Version: {{ .Values.postgresql.image.tag }}
+ - Persistence: {{ .Values.postgresql.persistence.enabled | ternary "Enabled" "Disabled" }}
+{{- end }}
+
+{{- if not .Values.postgresql.enabled }}
+2. External PostgreSQL setup detected. Ensure your database is accessible at the configured host.
+{{- end }}
diff --git a/dev/helm/templates/_helpers.tpl b/dev/helm/templates/_helpers.tpl
index 193ceab78..1684409a7 100644
--- a/dev/helm/templates/_helpers.tpl
+++ b/dev/helm/templates/_helpers.tpl
@@ -63,15 +63,18 @@ Create the name of the service account to use
{{- end -}}
{{/*
-Create a default fully qualified app name.
-We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+PostgreSQL fullname
*/}}
{{- define "wiki.postgresql.fullname" -}}
-{{- if .Values.postgresql.fullnameOverride -}}
-{{- .Values.postgresql.fullnameOverride | trunc 63 | trimSuffix "-" -}}
-{{- else -}}
-{{ printf "%s-%s" .Release.Name "postgresql"}}
+{{- printf "%s-%s" (include "wiki.fullname" .) "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
+
+{{/*
+PostgreSQL selector labels
+*/}}
+{{- define "wiki.postgresql.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "wiki.name" . }}-postgresql
+app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{/*
@@ -79,9 +82,9 @@ Set postgres host
*/}}
{{- define "wiki.postgresql.host" -}}
{{- if .Values.postgresql.enabled -}}
-{{- template "wiki.postgresql.fullname" . -}}
+{{- include "wiki.postgresql.fullname" . -}}
{{- else -}}
-{{- .Values.postgresql.postgresqlHost | quote -}}
+{{- .Values.postgresql.postgresqlHost | default "localhost" | quote -}}
{{- end -}}
{{- end -}}
@@ -89,10 +92,25 @@ Set postgres host
Set postgres secret
*/}}
{{- define "wiki.postgresql.secret" -}}
-{{- if .Values.postgresql.enabled -}}
-{{- template "wiki.postgresql.fullname" . -}}
+{{- if and .Values.postgresql.enabled .Values.postgresql.existingSecret -}}
+ {{- .Values.postgresql.existingSecret -}}
+{{- else if .Values.postgresql.enabled -}}
+ {{- include "wiki.postgresql.fullname" . -}}
{{- else -}}
-{{- template "wiki.fullname" . -}}
+ {{- template "wiki.fullname" . -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Set postgres secretUserKey
+*/}}
+{{- define "wiki.postgresql.secretUserKey" -}}
+{{- if and .Values.postgresql.enabled .Values.postgresql.existingSecret -}}
+ {{- default "postgresql-username" .Values.postgresql.existingSecretUserKey | quote -}}
+{{- else if .Values.postgresql.enabled -}}
+ "postgresql-username"
+{{- else -}}
+ {{- default "postgresql-username" .Values.postgresql.existingSecretUserKey | quote -}}
{{- end -}}
{{- end -}}
@@ -100,9 +118,24 @@ Set postgres secret
Set postgres secretKey
*/}}
{{- define "wiki.postgresql.secretKey" -}}
-{{- if .Values.postgresql.enabled -}}
-"postgresql-password"
+{{- if and .Values.postgresql.enabled .Values.postgresql.existingSecret -}}
+ {{- default "postgresql-password" .Values.postgresql.existingSecretKey | quote -}}
+{{- else if .Values.postgresql.enabled -}}
+ "postgresql-password"
+{{- else -}}
+ {{- default "postgresql-password" .Values.postgresql.existingSecretKey | quote -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Set postgres secretDatabaseKey
+*/}}
+{{- define "wiki.postgresql.secretDatabaseKey" -}}
+{{- if and .Values.postgresql.enabled .Values.postgresql.existingSecret -}}
+ {{- default "postgresql-database" .Values.postgresql.existingSecretDatabaseKey | quote -}}
+{{- else if .Values.postgresql.enabled -}}
+ "postgresql-database"
{{- else -}}
-{{- default "postgresql-password" .Values.postgresql.existingSecretKey | quote -}}
+ {{- default "postgresql-database" .Values.postgresql.existingSecretDatabaseKey | quote -}}
{{- end -}}
{{- end -}}
diff --git a/dev/helm/templates/deployment.yaml b/dev/helm/templates/deployment.yaml
index 4a7e3b8a6..f817f22d2 100644
--- a/dev/helm/templates/deployment.yaml
+++ b/dev/helm/templates/deployment.yaml
@@ -29,7 +29,7 @@ spec:
- name: {{ .Chart.Name }}-sideload
securityContext:
{{- toYaml .Values.sideload.securityContext | nindent 12 }}
- image: "{{ .Values.image.repository }}:{{ default "latest" .Values.image.tag }}"
+ image: "{{ .Values.image.repository }}:{{ default "2" .Values.image.tag }}"
imagePullPolicy: {{ default "IfNotPresent" .Values.image.imagePullPolicy }}
env:
{{- toYaml .Values.sideload.env | nindent 12 }}
@@ -42,7 +42,7 @@ spec:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
- image: "{{ .Values.image.repository }}:{{ default "latest" .Values.image.tag }}"
+ image: "{{ .Values.image.repository }}:{{ default "2" .Values.image.tag }}"
imagePullPolicy: {{ default "IfNotPresent" .Values.image.imagePullPolicy }}
env:
{{- if .Values.nodeExtraCaCerts }}
@@ -56,15 +56,22 @@ spec:
value: {{ .Values.externalPostgresql.databaseURL }}
- name: NODE_TLS_REJECT_UNAUTHORIZED
value: {{ default "1" .Values.externalPostgresql.NODE_TLS_REJECT_UNAUTHORIZED | quote }}
- {{- else }}
+ {{- else if .Values.postgresql.enabled }}
- name: DB_HOST
value: {{ template "wiki.postgresql.host" . }}
- name: DB_PORT
value: "{{ default "5432" .Values.postgresql.postgresqlPort }}"
- name: DB_NAME
- value: {{ default "wiki" .Values.postgresql.postgresqlDatabase }}
+ value: {{ default "wiki" .Values.postgresql.postgresqlDatabase | quote }}
- name: DB_USER
- value: {{ default "wiki" .Values.postgresql.postgresqlUser }}
+ {{- if .Values.postgresql.existingSecret }}
+ valueFrom:
+ secretKeyRef:
+ name: {{ .Values.postgresql.existingSecret }}
+ key: {{ template "wiki.postgresql.secretUserKey" . }}
+ {{- else }}
+ value: {{ default "postgres" .Values.postgresql.postgresqlUser }}
+ {{- end }}
- name: DB_SSL
value: "{{ default "false" .Values.postgresql.ssl }}"
- name: DB_SSL_CA
@@ -72,15 +79,33 @@ spec:
- name: DB_PASS
valueFrom:
secretKeyRef:
- {{- if .Values.postgresql.existingSecret }}
- name: {{ .Values.postgresql.existingSecret }}
- {{- else }}
name: {{ template "wiki.postgresql.secret" . }}
- {{- end }}
key: {{ template "wiki.postgresql.secretKey" . }}
+ {{- else if .Values.externalPostgresql }}
+ # External PostgreSQL configuration
+ - name: DB_HOST
+ value: {{ required "External PostgreSQL host is required when postgresql.enabled is false" .Values.externalPostgresql.host | quote }}
+ - name: DB_PORT
+ value: {{ required "External PostgreSQL port is required when postgresql.enabled is false" .Values.externalPostgresql.port | quote }}
+ - name: DB_NAME
+ value: {{ required "External PostgreSQL database name is required when postgresql.enabled is false" .Values.externalPostgresql.database | quote }}
+ - name: DB_USER
+ value: {{ required "External PostgreSQL user is required when postgresql.enabled is false" .Values.externalPostgresql.username | quote }}
+ - name: DB_PASS
+ valueFrom:
+ secretKeyRef:
+ name: {{ required "External PostgreSQL secret name is required when postgresql.enabled is false" .Values.externalPostgresql.existingSecret | quote }}
+ key: {{ required "External PostgreSQL secret key is required when postgresql.enabled is false" .Values.externalPostgresql.existingSecretKey | quote }}
+ - name: DB_SSL
+ value: "{{ default "false" .Values.externalPostgresql.ssl }}"
+ - name: DB_SSL_CA
+ value: "{{ default "" .Values.externalPostgresql.ca }}"
{{- end }}
- name: HA_ACTIVE
value: {{ .Values.replicaCount | int | le 2 | quote }}
+ {{- with .Values.extraEnvVars }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
{{- with .Values.volumeMounts }}
volumeMounts:
{{- toYaml . | nindent 12 }}
diff --git a/dev/helm/templates/postgresql-pvc.yaml b/dev/helm/templates/postgresql-pvc.yaml
new file mode 100644
index 000000000..fb3bd1854
--- /dev/null
+++ b/dev/helm/templates/postgresql-pvc.yaml
@@ -0,0 +1,21 @@
+{{- if and .Values.postgresql.enabled .Values.postgresql.persistence.enabled -}}
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: {{ include "wiki.postgresql.fullname" . }}
+ labels:
+ {{- include "wiki.labels" . | nindent 4 }}
+spec:
+ accessModes:
+ - {{ .Values.postgresql.persistence.accessMode | quote }}
+ resources:
+ requests:
+ storage: {{ .Values.postgresql.persistence.size | quote }}
+ {{- if .Values.postgresql.persistence.storageClass }}
+ {{- if (eq "-" .Values.postgresql.persistence.storageClass) }}
+ storageClassName: ""
+ {{- else }}
+ storageClassName: {{ .Values.postgresql.persistence.storageClass | quote }}
+ {{- end }}
+ {{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/dev/helm/templates/postgresql-secret.yaml b/dev/helm/templates/postgresql-secret.yaml
new file mode 100644
index 000000000..26a1da75b
--- /dev/null
+++ b/dev/helm/templates/postgresql-secret.yaml
@@ -0,0 +1,12 @@
+{{- if and .Values.postgresql.enabled (not .Values.postgresql.existingSecret) -}}
+apiVersion: v1
+kind: Secret
+metadata:
+ name: {{ include "wiki.postgresql.fullname" . }}
+ labels:
+ {{- include "wiki.labels" . | nindent 4 }}
+type: Opaque
+data:
+ postgresql-password: {{ .Values.postgresql.postgresqlPassword | b64enc | quote }}
+ postgresql-username: {{ .Values.postgresql.postgresqlUser | b64enc | quote }}
+{{- end }}
diff --git a/dev/helm/templates/postgresql-service.yaml b/dev/helm/templates/postgresql-service.yaml
new file mode 100644
index 000000000..4e87c33b3
--- /dev/null
+++ b/dev/helm/templates/postgresql-service.yaml
@@ -0,0 +1,21 @@
+{{- if .Values.postgresql.enabled -}}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "wiki.postgresql.fullname" . }}
+ labels:
+ {{- include "wiki.labels" . | nindent 4 }}
+ {{- with .Values.postgresql.service.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ type: {{ .Values.postgresql.service.type }}
+ ports:
+ - port: {{ .Values.postgresql.service.port }}
+ targetPort: 5432
+ protocol: TCP
+ name: postgresql
+ selector:
+ {{- include "wiki.postgresql.selectorLabels" . | nindent 4 }}
+{{- end }}
\ No newline at end of file
diff --git a/dev/helm/templates/postgresql-statefulset.yaml b/dev/helm/templates/postgresql-statefulset.yaml
new file mode 100644
index 000000000..4d035295e
--- /dev/null
+++ b/dev/helm/templates/postgresql-statefulset.yaml
@@ -0,0 +1,101 @@
+{{- if .Values.postgresql.enabled -}}
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: {{ include "wiki.postgresql.fullname" . }}
+ labels:
+ {{- include "wiki.labels" . | nindent 4 }}
+spec:
+ serviceName: {{ include "wiki.postgresql.fullname" . }}
+ replicas: 1
+ selector:
+ matchLabels:
+ {{- include "wiki.postgresql.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ labels:
+ {{- include "wiki.postgresql.selectorLabels" . | nindent 8 }}
+ spec:
+ {{- with .Values.postgresql.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.postgresql.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.postgresql.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - name: postgresql
+ image: {{ .Values.postgresql.image.repository }}:{{ .Values.postgresql.image.tag }}
+ imagePullPolicy: {{ .Values.postgresql.image.pullPolicy }}
+ ports:
+ - containerPort: 5432
+ name: postgresql
+ env:
+ - name: POSTGRES_DB
+ value: {{ .Values.postgresql.postgresqlDatabase | quote }}
+ - name: POSTGRES_USER
+ {{- if .Values.postgresql.existingSecret }}
+ valueFrom:
+ secretKeyRef:
+ name: {{ .Values.postgresql.existingSecret }}
+ key: {{ default "postgresql-username" .Values.postgresql.existingSecretUserKey | quote }}
+ {{- else }}
+ valueFrom:
+ secretKeyRef:
+ name: {{ include "wiki.postgresql.fullname" . }}
+ key: postgresql-username
+ {{- end }}
+ - name: POSTGRES_PASSWORD
+ {{- if .Values.postgresql.existingSecret }}
+ valueFrom:
+ secretKeyRef:
+ name: {{ .Values.postgresql.existingSecret }}
+ key: {{ default "postgresql-password" .Values.postgresql.existingSecretKey | quote }}
+ {{- else }}
+ valueFrom:
+ secretKeyRef:
+ name: {{ include "wiki.postgresql.fullname" . }}
+ key: postgresql-password
+ {{- end }}
+ - name: PGDATA
+ value: /var/lib/postgresql/data/pgdata
+ livenessProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - exec pg_isready -U {{ .Values.postgresql.postgresqlUser }} -d {{ .Values.postgresql.postgresqlDatabase }}
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ readinessProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - exec pg_isready -U {{ .Values.postgresql.postgresqlUser }} -d {{ .Values.postgresql.postgresqlDatabase }}
+ initialDelaySeconds: 5
+ periodSeconds: 5
+ timeoutSeconds: 3
+ failureThreshold: 6
+ resources:
+ {{- toYaml .Values.postgresql.resources | nindent 12 }}
+ volumeMounts:
+ - name: postgresql-data
+ mountPath: /var/lib/postgresql/data
+ subPath: postgresql
+ volumes:
+ - name: postgresql-data
+ {{- if .Values.postgresql.persistence.enabled }}
+ persistentVolumeClaim:
+ claimName: {{ include "wiki.postgresql.fullname" . }}
+ {{- else }}
+ emptyDir: {}
+ {{- end }}
+{{- end }}
diff --git a/dev/helm/templates/service.yaml b/dev/helm/templates/service.yaml
index 62bcff25b..688f6b572 100644
--- a/dev/helm/templates/service.yaml
+++ b/dev/helm/templates/service.yaml
@@ -19,8 +19,4 @@ spec:
targetPort: http
protocol: TCP
name: http
- - port: {{ default "443" .Values.service.httpsPort}}
- targetPort: http
- protocol: TCP
- name: https
selector: {{- include "wiki.selectorLabels" . | nindent 4}}
diff --git a/dev/helm/values.yaml b/dev/helm/values.yaml
index 8e5e36670..9d65b2a82 100644
--- a/dev/helm/values.yaml
+++ b/dev/helm/values.yaml
@@ -3,7 +3,7 @@
# Declare variables to be passed into your templates.
replicaCount: 1
-revisionHistoryLimit: 10
+revisionHistoryLimit: 2
image:
repository: requarks/wiki
@@ -61,7 +61,6 @@ service:
# Annotations applied for services such as externalDNS or
# service type LoadBalancer
# type: LoadBalancer
- # httpsPort: 443
# annotations: {}
# loadBalancerIP: 172.16.0.1
@@ -108,7 +107,7 @@ volumes: []
sideload:
enabled: false
# Git-Repo containing all locales.json-files you need:
- repoURL: https://github.com/Requarks/wiki-localization
+ repoURL: https://github.com/requarks/wiki-localization
## This can be helpfull if you have internet access over a http proxy:
env: []
@@ -138,6 +137,17 @@ sideload:
## Append extra trusted certificates for node process from extra volume via NODE_EXTRA_CA_CERTS variable
# nodeExtraCaCerts: "/path/to/certs.pem"
+## Additional environment variables to set
+extraEnvVars: []
+# extraEnvVars:
+# - name: CUSTOM_VAR
+# value: "custom_value"
+# - name: SECRET_VAR
+# valueFrom:
+# secretKeyRef:
+# name: my-secret
+# key: secret-key
+
## This will override the postgresql chart values
# externalPostgresql:
# # note: ?sslmode=require => ?ssl=true
@@ -145,47 +155,52 @@ sideload:
# # For self signed CAs, like DigitalOcean
# NODE_TLS_REJECT_UNAUTHORIZED: "0"
-## Configuration values for the postgresql dependency.
-## ref: https://github.com/kubernetes/charts/blob/master/stable/postgresql/README.md
+## Configuration for the custom PostgreSQL 18 deployment
##
postgresql:
- ## Use the PostgreSQL chart dependency.
- ## Set to false if bringing your own PostgreSQL, and set secret value postgresql-uri.
- ##
enabled: true
## ssl enforce SSL communication with PostgresSQL
## Default to false
##
- # ssl: false
+ ssl: false
## ca Certificate of Authority
## Default to empty, point to location of CA
##
# ca: "path to ca"
## postgresqlHost override postgres database host
- ## Default to postgres
+ ## Default to the service name of the custom PostgreSQL deployment
##
- # postgresqlHost: postgres
+ postgresqlHost: "{{ include \"wiki.postgresql.fullname\" . }}"
## postgresqlPort port for postgres
## Default to 5432
##
- # postgresqlPort: 5432
- ## PostgreSQL fullname Override
- ## Default to wiki-postgresql unless fullname override is set for Chart
- ##
- fullnameOverride: ""
+ postgresqlPort: 5432
## PostgreSQL User to create.
##
postgresqlUser: postgres
## PostgreSQL Database to create.
##
postgresqlDatabase: wiki
+ ## PostgreSQL password (will be stored in a secret)
+ ##
+ postgresqlPassword: "postgres"
+
+ ## Use existing secret for PostgreSQL credentials
+ ## If set, the chart will not create a new secret and will use the existing one
+ ##
+ # existingSecret: "my-existing-postgres-secret"
+
+ ## Key in the existing secret containing the password
+ ##
+ # existingSecretKey: "postgresql-password"
+
+ ## Key in the existing secret containing the username (defaults to "postgresql-username")
+ ##
+ # existingSecretUserKey: "postgresql-username"
+
## Persistent Volume Storage configuration.
## ref: https://kubernetes.io/docs/user-guide/persistent-volumes
##
- replication:
- ## Enable PostgreSQL replication (primary/secondary)
- ##
- enabled: false
persistence:
## Enable PostgreSQL persistence using Persistent Volume Claims.
##
@@ -204,3 +219,34 @@ postgresql:
## Persistent Volume Storage Size.
##
size: 8Gi
+
+ ## PostgreSQL Image Configuration
+ image:
+ repository: postgres
+ tag: "18"
+ pullPolicy: IfNotPresent
+
+ ## PostgreSQL Resources Configuration
+ resources: {}
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
+
+ ## PostgreSQL Node Selector, Tolerations and Affinity
+ nodeSelector: {}
+ tolerations: []
+ affinity: {}
+
+ ## PostgreSQL Service Configuration
+ service:
+ type: ClusterIP
+ port: 5432
+ # Additional service annotations
+ annotations: {}
diff --git a/dev/packer/digitalocean.json b/dev/packer/digitalocean.json
index 0bd1523eb..14b3f2631 100644
--- a/dev/packer/digitalocean.json
+++ b/dev/packer/digitalocean.json
@@ -2,10 +2,9 @@
"variables": {
"do_api_token": "{{env `DIGITALOCEAN_API_TOKEN`}}",
"image_name": "wikijs-snapshot-{{timestamp}}",
- "apt_packages": "apt-transport-https ca-certificates curl jq linux-image-extra-virtual software-properties-common gnupg-agent openssl ",
+ "apt_packages": "software-properties-common",
"application_name": "Wiki.js",
- "application_version": "{{env `WIKI_APP_VERSION`}}",
- "docker_compose_version": "1.29.2"
+ "application_version": "{{env `WIKI_APP_VERSION`}}"
},
"sensitive-variables": [
"do_api_token"
@@ -14,7 +13,7 @@
{
"type": "digitalocean",
"api_token": "{{user `do_api_token`}}",
- "image": "ubuntu-20-04-x64",
+ "image": "ubuntu-24-04-x64",
"region": "tor1",
"size": "s-1vcpu-1gb",
"ssh_username": "root",
@@ -73,11 +72,8 @@
],
"scripts": [
"scripts/010-docker.sh",
- "scripts/011-docker-compose.sh",
- "scripts/012-grub-opts.sh",
- "scripts/013-docker-dns.sh",
- "scripts/014-ufw-docker.sh",
- "scripts/020-application-tag.sh",
+ "scripts/011-ufw-docker.sh",
+ "scripts/020-force-ssh-logout.sh",
"scripts/900-cleanup.sh",
"scripts/999-img-check.sh"
]
diff --git a/dev/packer/scripts/001-onboot.sh b/dev/packer/scripts/001-onboot.sh
index 2e4f9e4f5..0a0804d12 100644
--- a/dev/packer/scripts/001-onboot.sh
+++ b/dev/packer/scripts/001-onboot.sh
@@ -1,15 +1,18 @@
#!/bin/bash
-# Scripts in this directory will be executed by cloud-init on the first boot of droplets
-# created from your image. Things ike generating passwords, configuration requiring IP address
-# or other items that will be unique to each instance should be done in scripts here.
-
+# Generate PostgreSQL password
openssl rand -base64 32 > /etc/wiki/.db-secret
+# Start containers
if [[ -z $DATABASE_URL ]]; then
docker start db
fi
docker start wiki
docker start wiki-update-companion
-# docker start nginx-proxy
-# docker start watchtower
+
+# Remove the ssh force logout command
+sed -e '/Match User root/d' \
+ -e '/.*ForceCommand.*droplet.*/d' \
+ -i /etc/ssh/sshd_config
+
+systemctl restart ssh
diff --git a/dev/packer/scripts/010-docker.sh b/dev/packer/scripts/010-docker.sh
index c83681bc6..db5955a56 100644
--- a/dev/packer/scripts/010-docker.sh
+++ b/dev/packer/scripts/010-docker.sh
@@ -1,17 +1,33 @@
#!/bin/bash
-curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-apt -qqy update
-apt -qqy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' install docker-ce docker-ce-cli containerd.io
+# Add Docker's official GPG key:
+sudo install -m 0755 -d /etc/apt/keyrings
+sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
+sudo chmod a+r /etc/apt/keyrings/docker.asc
+
+# Add the repository to Apt sources:
+sudo tee /etc/apt/sources.list.d/docker.sources < /var/log/ufw.log
diff --git a/dev/packer/scripts/012-grub-opts.sh b/dev/packer/scripts/012-grub-opts.sh
deleted file mode 100644
index 9a336bb0f..000000000
--- a/dev/packer/scripts/012-grub-opts.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-sed -e 's|GRUB_CMDLINE_LINUX="|GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1|g' \
- -i /etc/default/grub
-
-update-grub
diff --git a/dev/packer/scripts/013-docker-dns.sh b/dev/packer/scripts/013-docker-dns.sh
deleted file mode 100644
index 80fa11fe0..000000000
--- a/dev/packer/scripts/013-docker-dns.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-sed -e 's|#DOCKER_OPTS|DOCKER_OPTS|g' \
- -i /etc/default/docker
diff --git a/dev/packer/scripts/014-ufw-docker.sh b/dev/packer/scripts/014-ufw-docker.sh
deleted file mode 100644
index 481994585..000000000
--- a/dev/packer/scripts/014-ufw-docker.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-sudo ufw allow ssh
-sudo ufw allow http
-sudo ufw allow https
-
-sudo ufw --force enable
-
-cat /dev/null > /var/log/ufw.log
diff --git a/dev/packer/scripts/020-application-tag.sh b/dev/packer/scripts/020-application-tag.sh
deleted file mode 100644
index 7d04593f8..000000000
--- a/dev/packer/scripts/020-application-tag.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-################################
-## PART: Write the application tag
-##
-## vi: syntax=sh expandtab ts=4
-
-build_date=$(date +%Y-%m-%d)
-distro="$(lsb_release -s -i)"
-distro_release="$(lsb_release -s -r)"
-distro_codename="$(lsb_release -s -c)"
-distro_arch="$(uname -m)"
-
-mkdir -p /var/lib/digitalocean
-
-cat >> /var/lib/digitalocean/application.info <> /etc/ssh/sshd_config < /root/.bash_history
@@ -36,12 +42,4 @@ The secure erase will complete successfully when you see:${NC}
dd: writing to '/zerofile': No space left on device\n
Beginning secure erase now\n"
-dd if=/dev/zero of=/zerofile &
- PID=$!
- while [ -d /proc/$PID ]
- do
- printf "."
- sleep 5
- done
-sync; rm /zerofile; sync
-cat /dev/null > /var/log/lastlog; cat /dev/null > /var/log/wtmp
+dd if=/dev/zero of=/zerofile bs=4096 || rm /zerofile
diff --git a/dev/packer/scripts/999-img-check.sh b/dev/packer/scripts/999-img-check.sh
index 6473b6628..cec950ff6 100644
--- a/dev/packer/scripts/999-img-check.sh
+++ b/dev/packer/scripts/999-img-check.sh
@@ -4,7 +4,7 @@
# © 2021-2022 DigitalOcean LLC.
# This code is licensed under Apache 2.0 license (see LICENSE.md for details)
-VERSION="v. 1.8"
+VERSION="v. 1.8.1"
RUNDATE=$( date )
# Script should be run with SUDO
@@ -75,7 +75,7 @@ function checkAgent {
echo -en "\e[41m[FAIL]\e[0m DigitalOcean directory detected.\n"
((FAIL++))
STATUS=2
- if [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]]; then
+ if [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]] || [[ $OS == "AlmaLinux" ]] || [[ $OS == "CloudLinux" ]]; then
echo "To uninstall the agent: 'sudo yum remove droplet-agent'"
echo "To remove the DO directory: 'find /opt/digitalocean/ -type d -empty -delete'"
elif [[ $OS == "Ubuntu" ]] || [[ $OS == "Debian" ]]; then
@@ -357,7 +357,7 @@ function checkFirewall {
# shellcheck disable=SC2031
((WARN++))
fi
- elif [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]]; then
+ elif [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]] || [[ $OS == "AlmaLinux" ]] || [[ $OS == "CloudLinux" ]]; then
if [ -f /usr/lib/systemd/system/csf.service ]; then
fw="csf"
if [[ $(systemctl status $fw >/dev/null 2>&1) ]]; then
@@ -456,7 +456,7 @@ function checkUpdates {
echo -en "\e[32m[PASS]\e[0m There are no pending security updates for this image.\n\n"
((PASS++))
fi
- elif [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]]; then
+ elif [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]] || [[ $OS == "AlmaLinux" ]] || [[ $OS == "CloudLinux" ]]; then
echo -en "\nChecking for available security updates, this may take a minute...\n\n"
update_count=$(yum check-update --security --quiet | wc -l)
@@ -506,7 +506,7 @@ osv=0
if [[ $OS == "Ubuntu" ]]; then
ost=1
- if [[ $VER == "22.04" ]] || [[ $VER == "20.04" ]] || [[ $VER == "18.04" ]] || [[ $VER == "16.04" ]]; then
+ if [[ $VER == "24.04" ]] || [[ $VER == "22.10" ]] || [[ $VER == "22.04" ]] || [[ $VER == "20.04" ]] || [[ $VER == "18.04" ]] || [[ $VER == "16.04" ]]; then
osv=1
fi
@@ -521,7 +521,13 @@ elif [[ "$OS" =~ Debian.* ]]; then
;;
11)
osv=1
- ;;
+ ;;
+ 12)
+ osv=1
+ ;;
+ 13)
+ osv=1
+ ;;
*)
osv=2
;;
@@ -542,12 +548,28 @@ elif [[ $OS == "CentOS Stream" ]]; then
ost=1
if [[ $VER == "8" ]]; then
osv=1
+ elif [[ $VER == "9" ]]; then
+ osv=1
else
osv=2
fi
elif [[ $OS == "Rocky Linux" ]]; then
ost=1
- if [[ $VER =~ 8\. ]]; then
+ if [[ $VER =~ 8\. ]] || [[ $VER =~ 9\. ]]; then
+ osv=1
+ else
+ osv=2
+ fi
+elif [[ $OS == "AlmaLinux" ]]; then
+ ost=1
+ if [[ "$VER" =~ 8.* ]] || [[ "$VER" =~ 9.* ]]; then
+ osv=1
+ else
+ osv=2
+ fi
+elif [[ $OS == "CloudLinux" ]]; then
+ ost=1
+ if [[ "$VER" =~ 8.* ]] || [[ "$VER" =~ 9.* ]]; then
osv=1
else
osv=2
@@ -599,6 +621,12 @@ checkRoot
checkAgent
+# Source GPU compatibility check
+if [ -f "$(dirname "$0")/check_gpu_support.sh" ]; then
+ source "$(dirname "$0")/check_gpu_support.sh"
+else
+ echo "GPU check script not found. Skipping GPU compatibility checks."
+fi
# Summary
echo -en "\n\n---------------------------------------------------------------------------------------------------\n"
@@ -625,4 +653,4 @@ elif [[ $STATUS == 1 ]]; then
else
echo -en "Some critical tests failed. These items must be resolved and this scan re-run before you submit your image to the DigitalOcean Marketplace.\n\n"
exit 1
-fi
\ No newline at end of file
+fi
diff --git a/package.json b/package.json
index 64c1c4d51..10ede3a37 100644
--- a/package.json
+++ b/package.json
@@ -1,15 +1,15 @@
{
"name": "wiki",
"version": "2.0.0",
- "releaseDate": "2019-01-01T01:01:01.000Z",
+ "releaseDate": "2026-01-01T01:01:01.000Z",
"description": "A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown",
"main": "wiki.js",
"dev": true,
"scripts": {
"start": "node server",
- "dev": "NODE_OPTIONS=--openssl-legacy-provider node dev",
- "build": "NODE_OPTIONS=--openssl-legacy-provider webpack --profile --config dev/webpack/webpack.prod.js",
- "watch": "NODE_OPTIONS=--openssl-legacy-provider webpack --config dev/webpack/webpack.dev.js",
+ "dev": "cross-env NODE_OPTIONS=--openssl-legacy-provider node dev",
+ "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider webpack --profile --config dev/webpack/webpack.prod.js",
+ "watch": "cross-env NODE_OPTIONS=--openssl-legacy-provider webpack --config dev/webpack/webpack.dev.js",
"test": "eslint --format codeframe --ext .js,.vue . && pug-lint server/views && jest",
"cypress:open": "cypress open",
"postinstall": "patch-package"
@@ -34,10 +34,10 @@
},
"homepage": "https://github.com/Requarks/wiki#readme",
"engines": {
- "node": ">=10.12"
+ "node": ">=20"
},
"dependencies": {
- "@azure/storage-blob": "12.12.0",
+ "@azure/storage-blob": "12.29.1",
"@exlinc/keycloak-passport": "1.0.2",
"@joplin/turndown-plugin-gfm": "1.0.45",
"@root/csr": "0.8.1",
@@ -51,7 +51,7 @@
"apollo-server-express": "2.25.2",
"asciidoctor": "2.2.6",
"auto-load": "3.0.4",
- "aws-sdk": "2.1309.0",
+ "aws-sdk": "2.1693.0",
"azure-search-client": "3.1.5",
"bcryptjs-then": "1.0.1",
"bluebird": "3.7.2",
@@ -60,18 +60,18 @@
"cheerio": "1.0.0-rc.5",
"chokidar": "3.5.3",
"chromium-pickle-js": "0.2.0",
- "clean-css": "5.3.2",
+ "clean-css": "5.3.3",
"command-exists": "1.2.9",
- "compression": "1.7.4",
+ "compression": "1.8.1",
"connect-session-knex": "2.0.0",
- "cookie-parser": "1.4.6",
+ "cookie-parser": "1.4.7",
"cors": "2.8.5",
"cuint": "0.2.2",
"custom-error-instance": "2.1.2",
"dependency-graph": "0.11.0",
"diff": "4.0.2",
"diff2html": "3.1.14",
- "dompurify": "2.4.3",
+ "dompurify": "3.3.1",
"dotize": "0.3.0",
"elasticsearch6": "npm:@elastic/elasticsearch@6",
"elasticsearch7": "npm:@elastic/elasticsearch@7",
@@ -80,7 +80,7 @@
"eventemitter2": "6.4.9",
"express": "4.18.2",
"express-brute": "1.0.1",
- "express-session": "1.17.3",
+ "express-session": "1.18.2",
"file-type": "15.0.1",
"filesize": "6.1.0",
"fs-extra": "9.0.1",
@@ -96,11 +96,11 @@
"i18next-express-middleware": "2.0.0",
"i18next-node-fs-backend": "2.1.3",
"image-size": "0.9.2",
- "js-base64": "3.7.4",
+ "js-base64": "3.7.8",
"js-binary": "1.2.0",
"js-yaml": "3.14.0",
"jsdom": "16.4.0",
- "jsonwebtoken": "9.0.0",
+ "jsonwebtoken": "9.0.3",
"katex": "0.12.0",
"klaw": "3.0.0",
"knex": "0.21.7",
@@ -124,21 +124,21 @@
"markdown-it-task-lists": "2.1.1",
"mathjax": "3.2.2",
"mime-types": "2.1.35",
- "moment": "2.29.4",
- "moment-timezone": "0.5.40",
+ "moment": "2.30.1",
+ "moment-timezone": "0.6.0",
"mongodb": "3.6.5",
"ms": "2.1.3",
"mssql": "6.2.3",
"multer": "1.4.4",
- "mysql2": "3.1.0",
+ "mysql2": "3.16.0",
"nanoid": "3.2.0",
"node-2fa": "1.1.2",
"node-cache": "5.1.2",
"nodemailer": "6.9.1",
"objection": "2.2.18",
"passport": "0.4.1",
- "passport-auth0": "1.4.3",
- "passport-azure-ad": "4.3.4",
+ "passport-auth0": "1.4.5",
+ "passport-azure-ad": "4.3.5",
"passport-cas": "0.1.1",
"passport-discord": "0.1.4",
"passport-dropbox-oauth2": "1.1.0",
@@ -150,47 +150,47 @@
"passport-ldapauth": "3.0.1",
"passport-local": "1.0.0",
"passport-microsoft": "0.1.0",
- "passport-oauth2": "1.6.1",
+ "passport-oauth2": "1.8.0",
"passport-okta-oauth": "0.0.1",
- "passport-openidconnect": "0.1.1",
+ "passport-openidconnect": "0.1.2",
"passport-saml": "3.2.4",
- "passport-slack-oauth2": "1.1.1",
+ "passport-slack-oauth2": "1.2.0",
"passport-twitch-strategy": "2.2.0",
- "patch-package": "8.0.0",
+ "patch-package": "8.0.1",
"pem-jwk": "2.0.0",
- "pg": "8.9.0",
+ "pg": "8.16.3",
"pg-hstore": "2.3.4",
- "pg-pubsub": "0.5.0",
- "pg-query-stream": "4.3.0",
- "pg-tsquery": "8.4.1",
+ "pg-pubsub": "0.8.1",
+ "pg-query-stream": "4.10.3",
+ "pg-tsquery": "8.4.2",
"postinstall-postinstall": "2.1.0",
- "pug": "3.0.2",
- "punycode": "2.3.0",
+ "pug": "3.0.3",
+ "punycode": "2.3.1",
"qr-image": "3.2.0",
"raven": "2.6.4",
- "remove-markdown": "0.5.0",
+ "remove-markdown": "0.6.2",
"request": "2.88.2",
"request-promise": "4.2.6",
"safe-regex": "2.1.1",
"sanitize-filename": "1.6.3",
"scim-query-filter-parser": "2.0.4",
- "semver": "7.3.8",
- "serve-favicon": "2.5.0",
- "simple-git": "3.16.0",
+ "semver": "7.7.3",
+ "serve-favicon": "2.5.1",
+ "simple-git": "3.30.0",
"solr-node": "1.2.1",
- "sqlite3": "5.1.4",
+ "sqlite3": "5.1.7",
"ssh2": "1.11.0",
"ssh2-promise": "1.0.3",
"striptags": "3.2.0",
"subscriptions-transport-ws": "0.9.18",
"tar-fs": "2.1.1",
- "turndown": "7.1.1",
+ "turndown": "7.2.2",
"twemoji": "14.0.2",
"uslug": "1.0.4",
"uuid": "9.0.0",
"validate.js": "0.13.1",
"winston": "3.8.2",
- "xss": "1.0.14",
+ "xss": "1.0.15",
"yargs": "17.6.2"
},
"devDependencies": {
@@ -240,6 +240,7 @@
"codemirror-asciidoc": "1.0.4",
"copy-webpack-plugin": "6.2.1",
"core-js": "3.6.5",
+ "cross-env": "10.0.0",
"css-loader": "4.3.0",
"cssnano": "4.1.10",
"cypress": "5.3.0",
diff --git a/server/controllers/auth.js b/server/controllers/auth.js
index 9d691087f..733486be0 100644
--- a/server/controllers/auth.js
+++ b/server/controllers/auth.js
@@ -4,8 +4,8 @@ const express = require('express')
const ExpressBrute = require('express-brute')
const BruteKnex = require('../helpers/brute-knex')
const router = express.Router()
-const moment = require('moment')
const _ = require('lodash')
+const commonHelper = require('../helpers/common')
const bruteforce = new ExpressBrute(new BruteKnex({
createTable: true,
@@ -70,19 +70,25 @@ router.all('/login/:strategy/callback', async (req, res, next) => {
const authResult = await WIKI.models.users.login({
strategy: req.params.strategy
}, { req, res })
- res.cookie('jwt', authResult.jwt, { expires: moment().add(1, 'y').toDate() })
+ res.cookie('jwt', authResult.jwt, commonHelper.getCookieOpts())
const loginRedirect = req.cookies['loginRedirect']
+ const isValidRedirect = loginRedirect && loginRedirect.startsWith('/') && !loginRedirect.startsWith('//') && !loginRedirect.includes('://')
if (loginRedirect === '/' && authResult.redirect) {
res.clearCookie('loginRedirect')
res.redirect(authResult.redirect)
- } else if (loginRedirect) {
+ } else if (isValidRedirect) {
res.clearCookie('loginRedirect')
res.redirect(loginRedirect)
- } else if (authResult.redirect) {
- res.redirect(authResult.redirect)
} else {
- res.redirect('/')
+ if (loginRedirect) {
+ res.clearCookie('loginRedirect')
+ }
+ if (authResult.redirect) {
+ res.redirect(authResult.redirect)
+ } else {
+ res.redirect('/')
+ }
}
} catch (err) {
next(err)
@@ -94,8 +100,7 @@ router.all('/login/:strategy/callback', async (req, res, next) => {
*/
router.post('/login', bruteforce.prevent, async (req, res, next) => {
_.set(res.locals, 'pageMeta.title', 'Login')
-
- if (req.query.legacy || req.get('user-agent').indexOf('Trident') >= 0) {
+ if (req.query.legacy || (req.get('user-agent') && req.get('user-agent').indexOf('Trident') >= 0)) {
try {
const authResult = await WIKI.models.users.login({
strategy: req.body.strategy,
@@ -103,7 +108,7 @@ router.post('/login', bruteforce.prevent, async (req, res, next) => {
password: req.body.pass
}, { req, res })
req.brute.reset()
- res.cookie('jwt', authResult.jwt, { expires: moment().add(1, 'y').toDate() })
+ res.cookie('jwt', authResult.jwt, commonHelper.getCookieOpts())
res.redirect('/')
} catch (err) {
const { formStrategies, socialStrategies } = await WIKI.models.authentication.getStrategiesForLegacyClient()
@@ -153,7 +158,7 @@ router.get('/verify/:token', bruteforce.prevent, async (req, res, next) => {
res.redirect('/login')
} else {
const result = await WIKI.models.users.refreshToken(usr)
- res.cookie('jwt', result.token, { expires: moment().add(1, 'years').toDate() })
+ res.cookie('jwt', result.token, commonHelper.getCookieOpts())
res.redirect('/')
}
} catch (err) {
diff --git a/server/controllers/common.js b/server/controllers/common.js
index 55cc4d333..dec6fa3aa 100644
--- a/server/controllers/common.js
+++ b/server/controllers/common.js
@@ -75,12 +75,12 @@ router.get(['/d', '/d/*'], async (req, res, next) => {
if (versionId > 0) {
if (!WIKI.auth.checkAccess(req.user, ['read:history'], pageArgs)) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'downloadVersion' })
+ return res.status(403).render('unauthorized', { action: 'downloadVersion' })
}
} else {
if (!WIKI.auth.checkAccess(req.user, ['read:source'], pageArgs)) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'download' })
+ return res.status(403).render('unauthorized', { action: 'download' })
}
}
@@ -142,7 +142,7 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
// -> EDIT MODE
if (!(effectivePermissions.pages.write || effectivePermissions.pages.manage)) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'edit' })
+ return res.status(403).render('unauthorized', { action: 'edit' })
}
// -> Get page tags
@@ -166,7 +166,7 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
// -> CREATE MODE
if (!effectivePermissions.pages.write) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'create' })
+ return res.status(403).render('unauthorized', { action: 'create' })
}
_.set(res.locals, 'pageMeta.title', `New Page`)
@@ -206,7 +206,7 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
}
if (!WIKI.auth.checkAccess(req.user, ['read:history'], { path: pageVersion.path, locale: pageVersion.locale })) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'sourceVersion' })
+ return res.status(403).render('unauthorized', { action: 'sourceVersion' })
}
page.content = Buffer.from(pageVersion.content).toString('base64')
page.editorKey = pageVersion.editor
@@ -221,7 +221,7 @@ router.get(['/e', '/e/*'], async (req, res, next) => {
}
if (!WIKI.auth.checkAccess(req.user, ['read:source'], { path: pageOriginal.path, locale: pageOriginal.locale })) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'source' })
+ return res.status(403).render('unauthorized', { action: 'source' })
}
page.content = Buffer.from(pageOriginal.content).toString('base64')
page.editorKey = pageOriginal.editorKey
@@ -304,7 +304,7 @@ router.get(['/i', '/i/:id'], async (req, res, next) => {
tags: page.tags
})) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'view' })
+ return res.status(403).render('unauthorized', { action: 'view' })
}
if (WIKI.config.lang.namespacing) {
@@ -319,7 +319,7 @@ router.get(['/i', '/i/:id'], async (req, res, next) => {
*/
router.get(['/p', '/p/*'], (req, res, next) => {
if (!req.user || req.user.id < 1 || req.user.id === 2) {
- return res.render('unauthorized', { action: 'view' })
+ return res.status(403).render('unauthorized', { action: 'view' })
}
_.set(res.locals, 'pageMeta.title', 'User Profile')
@@ -355,12 +355,12 @@ router.get(['/s', '/s/*'], async (req, res, next) => {
if (versionId > 0) {
if (!effectivePermissions.history.read) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'sourceVersion' })
+ return res.status(403).render('unauthorized', { action: 'sourceVersion' })
}
} else {
if (!effectivePermissions.source.read) {
_.set(res.locals, 'pageMeta.title', 'Unauthorized')
- return res.render('unauthorized', { action: 'source' })
+ return res.status(403).render('unauthorized', { action: 'source' })
}
}
@@ -507,7 +507,7 @@ router.get('/*', async (req, res, next) => {
injectCode.body = `${injectCode.body}\n${page.extra.js}`
}
- if (req.query.legacy || req.get('user-agent').indexOf('Trident') >= 0) {
+ if (req.query.legacy || (req.get('user-agent') && req.get('user-agent').indexOf('Trident') >= 0)) {
// -> Convert page TOC
if (_.isString(page.toc)) {
page.toc = JSON.parse(page.toc)
diff --git a/server/core/auth.js b/server/core/auth.js
index 91ef21016..ec0dd720b 100644
--- a/server/core/auth.js
+++ b/server/core/auth.js
@@ -4,10 +4,11 @@ const _ = require('lodash')
const jwt = require('jsonwebtoken')
const ms = require('ms')
const { DateTime } = require('luxon')
-const Promise = require('bluebird')
-const crypto = Promise.promisifyAll(require('crypto'))
+const crypto = require('crypto')
const pem2jwk = require('pem-jwk').pem2jwk
+const randomBytesAsync = require('util').promisify(crypto.randomBytes)
+const commonHelper = require('../helpers/common')
const securityHelper = require('../helpers/security')
/* global WIKI */
@@ -82,7 +83,7 @@ module.exports = {
const strategy = require(`../modules/authentication/${stg.strategyKey}/authentication.js`)
stg.config.callbackURL = `${WIKI.config.host}/login/${stg.key}/callback`
- stg.config.key = stg.key;
+ stg.config.key = stg.key
strategy.init(passport, stg.config)
strategy.config = stg.config
@@ -154,7 +155,7 @@ module.exports = {
if (req.get('content-type') === 'application/json') {
res.set('new-jwt', newToken.token)
} else {
- res.cookie('jwt', newToken.token, { expires: DateTime.utc().plus({ days: 365 }).toJSDate() })
+ res.cookie('jwt', newToken.token, commonHelper.getCookieOpts())
}
// Avoid caching this response
@@ -316,6 +317,49 @@ module.exports = {
return true
},
+ /**
+ * Check if user (requester) can perform user assignment to a group with elevated permissions
+ *
+ * @param {User} requester The user attempting to perform the assignment
+ * @param {Array} groupIds List of group IDs to be assigned
+ * @returns {Boolean}
+ */
+ async checkAssignUserToGroupAccess(requester, groupIds = []) {
+ if (!groupIds || groupIds.length < 1) {
+ return true
+ }
+
+ const requesterPermissions = requester.permissions ? requester.permissions : requester.getGlobalPermissions()
+
+ // System Admin
+ if (requesterPermissions.includes('manage:system')) {
+ return true
+ }
+
+ // Ensure basic user management permission
+ if (!requesterPermissions.some(p => ['write:users', 'manage:users', 'write:groups', 'manage:groups'].includes(p))) {
+ return false
+ }
+
+ const groups = await WIKI.models.groups.query().whereIn('id', groupIds)
+ return groups.every(grp => {
+ // Check group for manage:system permission
+ if (grp.permissions.includes('manage:system')) {
+ return false
+ }
+
+ // Check group for administrative permissions
+ if (grp.permissions.some(p => {
+ const permType = _.last(p.split(':'))
+ return ['users', 'groups', 'navigation', 'theme', 'api'].includes(permType)
+ }) && !requesterPermissions.includes('manage:groups')) {
+ return false
+ }
+
+ return true
+ })
+ },
+
/**
* Check and apply Page Rule specificity
*
@@ -366,7 +410,7 @@ module.exports = {
async regenerateCertificates () {
WIKI.logger.info('Regenerating certificates...')
- _.set(WIKI.config, 'sessionSecret', (await crypto.randomBytesAsync(32)).toString('hex'))
+ _.set(WIKI.config, 'sessionSecret', (await randomBytesAsync(32)).toString('hex'))
const certs = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
publicKeyEncoding: {
diff --git a/server/core/db.js b/server/core/db.js
index b729282a4..f6a9d7080 100644
--- a/server/core/db.js
+++ b/server/core/db.js
@@ -91,6 +91,13 @@ module.exports = {
dbConfig.ssl = sslOptions
}
+ // Prune host and port if socketPath is configured
+ if (WIKI.config.db.socketPath) {
+ const { host, port, ...prunedConfig } = dbConfig
+ dbConfig = prunedConfig
+ dbConfig.socketPath = WIKI.config.db.socketPath.toString()
+ }
+
// Fix mysql boolean handling...
dbConfig.typeCast = (field, next) => {
if (field.type === 'TINY' && field.length === 1) {
diff --git a/server/core/servers.js b/server/core/servers.js
index 95046e657..d2b2b79f3 100644
--- a/server/core/servers.js
+++ b/server/core/servers.js
@@ -4,6 +4,8 @@ const https = require('https')
const { ApolloServer } = require('apollo-server-express')
const Promise = require('bluebird')
const _ = require('lodash')
+const jwt = require('jsonwebtoken')
+const cookie = require('cookie')
/* global WIKI */
@@ -125,7 +127,35 @@ module.exports = {
context: ({ req, res }) => ({ req, res }),
subscriptions: {
onConnect: (connectionParams, webSocket) => {
+ let token = _.get(connectionParams, 'token', null)
+ if (!token) {
+ const cookieHeader = _.get(webSocket, 'upgradeReq.headers.cookie', '')
+ if (cookieHeader) {
+ const cookies = cookie.parse(cookieHeader)
+ token = cookies.jwt || null
+ }
+ }
+
+ if (!token) {
+ throw new Error('Unauthorized')
+ }
+
+ try {
+ const user = jwt.verify(token, WIKI.config.certs.public, {
+ audience: WIKI.config.auth.audience,
+ issuer: 'urn:wiki.js',
+ algorithms: ['RS256']
+ })
+
+ if (!_.includes(user.permissions, 'manage:system')) {
+ throw new Error('Forbidden')
+ }
+
+ return { user }
+ } catch (err) {
+ throw new Error('Unauthorized')
+ }
},
path: '/graphql-subscriptions'
}
diff --git a/server/core/system.js b/server/core/system.js
index 5d606fc7d..d04b4a292 100644
--- a/server/core/system.js
+++ b/server/core/system.js
@@ -4,8 +4,8 @@ const Promise = require('bluebird')
const fs = require('fs-extra')
const path = require('path')
const zlib = require('zlib')
-const stream = require('stream')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Readable, Transform } = require('node:stream')
/* global WIKI */
@@ -121,7 +121,7 @@ module.exports = {
await pipeline(
WIKI.models.knex.select('filename', 'folderId', 'data').from('assets').join('assetData', 'assets.id', '=', 'assetData.id').stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (asset, enc, cb) => {
const filename = (asset.folderId && asset.folderId > 0) ? `${_.get(assetFolders, asset.folderId)}/${asset.filename}` : asset.filename
@@ -150,7 +150,7 @@ module.exports = {
const commentsProgressMultiplier = progressMultiplier / Math.ceil(commentsCount / 50)
WIKI.logger.info(`Found ${commentsCount} comments to export. Streaming to file...`)
- const rs = stream.Readable({ objectMode: true })
+ const rs = Readable({ objectMode: true })
rs._read = () => {}
const fetchCommentsBatch = async (offset) => {
@@ -177,7 +177,7 @@ module.exports = {
let marker = 0
await pipeline(
rs,
- new stream.Transform({
+ new Transform({
objectMode: true,
transform (chunk, encoding, callback) {
marker++
@@ -225,7 +225,7 @@ module.exports = {
const pagesProgressMultiplier = progressMultiplier / Math.ceil(pagesCount / 10)
WIKI.logger.info(`Found ${pagesCount} pages history to export. Streaming to file...`)
- const rs = stream.Readable({ objectMode: true })
+ const rs = Readable({ objectMode: true })
rs._read = () => {}
const fetchPagesBatch = async (offset) => {
@@ -255,7 +255,7 @@ module.exports = {
let marker = 0
await pipeline(
rs,
- new stream.Transform({
+ new Transform({
objectMode: true,
transform (chunk, encoding, callback) {
marker++
@@ -307,7 +307,7 @@ module.exports = {
const pagesProgressMultiplier = progressMultiplier / Math.ceil(pagesCount / 10)
WIKI.logger.info(`Found ${pagesCount} pages to export. Streaming to file...`)
- const rs = stream.Readable({ objectMode: true })
+ const rs = Readable({ objectMode: true })
rs._read = () => {}
const fetchPagesBatch = async (offset) => {
@@ -337,7 +337,7 @@ module.exports = {
let marker = 0
await pipeline(
rs,
- new stream.Transform({
+ new Transform({
objectMode: true,
transform (chunk, encoding, callback) {
marker++
@@ -400,7 +400,7 @@ module.exports = {
const usersProgressMultiplier = progressMultiplier / Math.ceil(usersCount / 50)
WIKI.logger.info(`Found ${usersCount} users to export. Streaming to file...`)
- const rs = stream.Readable({ objectMode: true })
+ const rs = Readable({ objectMode: true })
rs._read = () => {}
const fetchUsersBatch = async (offset) => {
@@ -427,7 +427,7 @@ module.exports = {
let marker = 0
await pipeline(
rs,
- new stream.Transform({
+ new Transform({
objectMode: true,
transform (chunk, encoding, callback) {
marker++
diff --git a/server/graph/resolvers/group.js b/server/graph/resolvers/group.js
index 1e2959794..8cc847c16 100644
--- a/server/graph/resolvers/group.js
+++ b/server/graph/resolvers/group.js
@@ -45,15 +45,23 @@ module.exports = {
throw new gql.GraphQLError('Invalid Group ID')
}
- // Check assigned permissions for write:groups
+ // Check assigned permissions for manage:users / write:groups
if (
- WIKI.auth.checkExclusiveAccess(req.user, ['write:groups'], ['manage:groups', 'manage:system']) &&
+ WIKI.auth.checkExclusiveAccess(req.user, ['manage:users', 'write:groups'], ['manage:groups', 'manage:system']) &&
grp.permissions.some(p => {
const resType = _.last(p.split(':'))
return ['users', 'groups', 'navigation', 'theme', 'api', 'system'].includes(resType)
})
) {
- throw new gql.GraphQLError('You are not authorized to assign a user to this elevated group.')
+ throw new gql.GraphQLError('You are not authorized to assign a user to this administrative group.')
+ }
+
+ // Check assigned permissions for manage:groups
+ if (
+ WIKI.auth.checkExclusiveAccess(req.user, ['manage:groups'], ['manage:system']) &&
+ grp.permissions.some(p => _.last(p.split(':')) === 'system')
+ ) {
+ throw new gql.GraphQLError('You are not authorized to assign a user to a group with the manage:system permission.')
}
// Check for valid user
@@ -170,7 +178,7 @@ module.exports = {
return ['users', 'groups', 'navigation', 'theme', 'api', 'system'].includes(resType)
})
) {
- throw new gql.GraphQLError('You are not authorized to manage this group or assign these permissions.')
+ throw new gql.GraphQLError('You are not authorized to manage this group or assign these administrative permissions.')
}
// Check assigned permissions for manage:groups
diff --git a/server/graph/resolvers/system.js b/server/graph/resolvers/system.js
index 51e57637b..d28ab04cf 100644
--- a/server/graph/resolvers/system.js
+++ b/server/graph/resolvers/system.js
@@ -1,6 +1,5 @@
const _ = require('lodash')
-const Promise = require('bluebird')
-const getos = Promise.promisify(require('getos'))
+const getos = require('getos')
const os = require('os')
const filesize = require('filesize')
const path = require('path')
@@ -11,6 +10,8 @@ const request = require('request-promise')
const crypto = require('crypto')
const nanoid = require('nanoid/non-secure').customAlphabet('1234567890abcdef', 10)
+const getosAsync = require('util').promisify(getos)
+
/* global WIKI */
const dbTypes = {
@@ -371,7 +372,7 @@ module.exports = {
async operatingSystem () {
let osLabel = `${os.type()} (${os.platform()}) ${os.release()} ${os.arch()}`
if (os.platform() === 'linux') {
- const osInfo = await getos()
+ const osInfo = await getosAsync()
osLabel = `${os.type()} - ${osInfo.dist} (${osInfo.codename || os.platform()}) ${osInfo.release || os.release()} ${os.arch()}`
}
return osLabel
diff --git a/server/graph/resolvers/user.js b/server/graph/resolvers/user.js
index a94aef8a5..19b9f42ba 100644
--- a/server/graph/resolvers/user.js
+++ b/server/graph/resolvers/user.js
@@ -62,8 +62,12 @@ module.exports = {
}
},
UserMutation: {
- async create (obj, args) {
+ async create (obj, args, context) {
try {
+ if (!(await WIKI.auth.checkAssignUserToGroupAccess(context.req.user, args.groups))) {
+ throw new Error('You are not authorized to create a user with an assignment to an administrative group.')
+ }
+
await WIKI.models.users.createNewUser(args)
return {
@@ -94,12 +98,16 @@ module.exports = {
}
}
},
- async update (obj, args) {
+ async update (obj, args, context) {
try {
+ if (!(await WIKI.auth.checkAssignUserToGroupAccess(context.req.user, args.groups))) {
+ throw new Error('You are not authorized to modify / assign a user from / to an administrative group.')
+ }
+
await WIKI.models.users.updateUser(args)
return {
- responseResult: graphHelper.generateSuccess('User created successfully')
+ responseResult: graphHelper.generateSuccess('User updated successfully')
}
} catch (err) {
return graphHelper.generateError(err)
diff --git a/server/graph/schemas/group.graphql b/server/graph/schemas/group.graphql
index b1f99ade6..67898e851 100644
--- a/server/graph/schemas/group.graphql
+++ b/server/graph/schemas/group.graphql
@@ -18,7 +18,7 @@ type GroupQuery {
list(
filter: String
orderBy: String
- ): [GroupMinimal] @auth(requires: ["write:groups", "manage:groups", "manage:system"])
+ ): [GroupMinimal] @auth(requires: ["write:users", "manage:users", "write:groups", "manage:groups", "manage:system"])
single(
id: Int!
@@ -49,12 +49,12 @@ type GroupMutation {
assignUser(
groupId: Int!
userId: Int!
- ): DefaultResponse @auth(requires: ["write:groups", "manage:groups", "manage:system"])
+ ): DefaultResponse @auth(requires: ["manage:users", "write:groups", "manage:groups", "manage:system"])
unassignUser(
groupId: Int!
userId: Int!
- ): DefaultResponse @auth(requires: ["write:groups", "manage:groups", "manage:system"])
+ ): DefaultResponse @auth(requires: ["manage:users", "write:groups", "manage:groups", "manage:system"])
}
# -----------------------------------------------
diff --git a/server/helpers/common.js b/server/helpers/common.js
index e2a38a350..21cd577da 100644
--- a/server/helpers/common.js
+++ b/server/helpers/common.js
@@ -1,4 +1,7 @@
+/* global WIKI */
+
const _ = require('lodash')
+const { DateTime } = require('luxon')
module.exports = {
/**
@@ -38,5 +41,11 @@ module.exports = {
})
return result
}, {})
+ },
+ getCookieOpts () {
+ return {
+ expires: DateTime.utc().plus({ days: 365 }).toJSDate(),
+ ...(WIKI.config.host.startsWith('https://') ? { secure: true } : {})
+ }
}
}
diff --git a/server/models/users.js b/server/models/users.js
index 8191621db..8996206d6 100644
--- a/server/models/users.js
+++ b/server/models/users.js
@@ -502,7 +502,7 @@ module.exports = class User extends Model {
if (!usr.isActive) {
throw new WIKI.Error.AuthAccountBanned()
}
-
+
await WIKI.models.users.query().patch({
password: newPassword,
mustChangePwd: false
diff --git a/server/modules/authentication/azure/authentication.js b/server/modules/authentication/azure/authentication.js
index a983d1486..ec2164a31 100644
--- a/server/modules/authentication/azure/authentication.js
+++ b/server/modules/authentication/azure/authentication.js
@@ -48,6 +48,19 @@ module.exports = {
picture: ''
}
})
+ if (conf.mapGroups) {
+ const groups = _.get(profile, '_json.groups')
+ if (groups && _.isArray(groups)) {
+ const currentGroups = (await user.$relatedQuery('groups').select('groups.id')).map(g => g.id)
+ const expectedGroups = Object.values(WIKI.auth.groups).filter(g => groups.includes(g.name)).map(g => g.id)
+ for (const groupId of _.difference(expectedGroups, currentGroups)) {
+ await user.$relatedQuery('groups').relate(groupId)
+ }
+ for (const groupId of _.difference(currentGroups, expectedGroups)) {
+ await user.$relatedQuery('groups').unrelate().where('groupId', groupId)
+ }
+ }
+ }
cb(null, user)
} catch (err) {
cb(err, null)
diff --git a/server/modules/authentication/azure/definition.yml b/server/modules/authentication/azure/definition.yml
index ad7d41ebc..5c22d7279 100644
--- a/server/modules/authentication/azure/definition.yml
+++ b/server/modules/authentication/azure/definition.yml
@@ -27,3 +27,9 @@ props:
title: Cookie Encryption Key String
hint: Random string with 44-character length. Setting this enables workaround for Chrome's SameSite cookies.
order: 3
+ mapGroups:
+ type: Boolean
+ title: Map Groups
+ hint: Map groups matching names from the groups claim value
+ default: false
+ order: 4
diff --git a/server/modules/authentication/github/authentication.js b/server/modules/authentication/github/authentication.js
index 49ac76093..aa0fee0e1 100644
--- a/server/modules/authentication/github/authentication.js
+++ b/server/modules/authentication/github/authentication.js
@@ -27,6 +27,14 @@ module.exports = {
passport.use(conf.key,
new GitHubStrategy(githubConfig, async (req, accessToken, refreshToken, profile, cb) => {
try {
+ WIKI.logger.info(`GitHub OAuth: Processing profile for user ${profile.id || profile.username}`)
+
+ // Ensure email is available - passport-github2 should fetch it automatically with user:email scope
+ // but we'll log a warning if it's missing
+ if (!profile.emails || (Array.isArray(profile.emails) && profile.emails.length === 0)) {
+ WIKI.logger.warn(`GitHub OAuth: No email found in profile for user ${profile.id || profile.username}. Make sure 'user:email' scope is granted.`)
+ }
+
const user = await WIKI.models.users.processProfile({
providerKey: req.params.strategy,
profile: {
@@ -34,9 +42,19 @@ module.exports = {
picture: _.get(profile, 'photos[0].value', '')
}
})
+
+ WIKI.logger.info(`GitHub OAuth: Successfully authenticated user ${user.email}`)
cb(null, user)
} catch (err) {
- cb(err, null)
+ WIKI.logger.warn(`GitHub OAuth: Authentication failed for strategy ${req.params.strategy}:`, err)
+ // Provide more user-friendly error messages
+ if (err.message && err.message.includes('email')) {
+ cb(new Error('GitHub authentication failed: Email address is required but not available. Please ensure your GitHub account has a verified email address and grant email access permissions.'), null)
+ } else if (err instanceof WIKI.Error.AuthAccountBanned) {
+ cb(err, null)
+ } else {
+ cb(new Error(`GitHub authentication failed: ${err.message || 'Unknown error'}`), null)
+ }
}
}
))
diff --git a/server/modules/authentication/google/authentication.js b/server/modules/authentication/google/authentication.js
index 3af03cb2c..3c8b17f71 100644
--- a/server/modules/authentication/google/authentication.js
+++ b/server/modules/authentication/google/authentication.js
@@ -16,9 +16,13 @@ module.exports = {
passReqToCallback: true
}, async (req, accessToken, refreshToken, profile, cb) => {
try {
- if (conf.hostedDomain && conf.hostedDomain != profile._json.hd) {
- throw new Error('Google authentication should have been performed with domain ' + conf.hostedDomain)
+ WIKI.logger.info(`Google OAuth: Processing profile for user ${profile.id || profile.displayName}`)
+
+ // Validate hosted domain if configured
+ if (conf.hostedDomain && profile._json.hd !== conf.hostedDomain) {
+ throw new Error(`Google authentication failed: User must be from domain ${conf.hostedDomain}, but got ${profile._json.hd || 'unknown'}`)
}
+
const user = await WIKI.models.users.processProfile({
providerKey: req.params.strategy,
profile: {
@@ -26,9 +30,21 @@ module.exports = {
picture: _.get(profile, 'photos[0].value', '')
}
})
+
+ WIKI.logger.info(`Google OAuth: Successfully authenticated user ${user.email}`)
cb(null, user)
} catch (err) {
- cb(err, null)
+ WIKI.logger.warn(`Google OAuth: Authentication failed for strategy ${req.params.strategy}:`, err)
+ // Provide more user-friendly error messages
+ if (err.message && err.message.includes('domain')) {
+ cb(new Error(`Google authentication failed: ${err.message}`), null)
+ } else if (err.message && err.message.includes('email')) {
+ cb(new Error('Google authentication failed: Email address is required but not available. Please ensure your Google account has a verified email address.'), null)
+ } else if (err instanceof WIKI.Error.AuthAccountBanned) {
+ cb(err, null)
+ } else {
+ cb(new Error(`Google authentication failed: ${err.message || 'Unknown error'}`), null)
+ }
}
})
diff --git a/server/modules/authentication/keycloak/definition.yml b/server/modules/authentication/keycloak/definition.yml
index 97453b840..b3f1d0df7 100644
--- a/server/modules/authentication/keycloak/definition.yml
+++ b/server/modules/authentication/keycloak/definition.yml
@@ -35,17 +35,17 @@ props:
authorizationURL:
type: String
title: Authorization Endpoint URL
- hint: e.g. https://KEYCLOAK-HOST/auth/realms/YOUR-REALM/protocol/openid-connect/auth
+ hint: e.g. https://KEYCLOAK-HOST/realms/YOUR-REALM/protocol/openid-connect/auth
order: 5
tokenURL:
type: String
title: Token Endpoint URL
- hint: e.g. https://KEYCLOAK-HOST/auth/realms/YOUR-REALM/protocol/openid-connect/token
+ hint: e.g. https://KEYCLOAK-HOST/realms/YOUR-REALM/protocol/openid-connect/token
order: 6
userInfoURL:
type: String
title: User Info Endpoint URL
- hint: e.g. https://KEYCLOAK-HOST/auth/realms/YOUR-REALM/protocol/openid-connect/userinfo
+ hint: e.g. https://KEYCLOAK-HOST/realms/YOUR-REALM/protocol/openid-connect/userinfo
order: 7
logoutUpstream:
type: Boolean
@@ -55,7 +55,7 @@ props:
logoutURL:
type: String
title: Logout Endpoint URL
- hint: e.g. https://KEYCLOAK-HOST/auth/realms/YOUR-REALM/protocol/openid-connect/logout
+ hint: e.g. https://KEYCLOAK-HOST/realms/YOUR-REALM/protocol/openid-connect/logout
order: 9
logoutUpstreamRedirectLegacy:
type: Boolean
diff --git a/server/modules/authentication/oauth2/authentication.js b/server/modules/authentication/oauth2/authentication.js
index ce66c3db0..6ac3e830f 100644
--- a/server/modules/authentication/oauth2/authentication.js
+++ b/server/modules/authentication/oauth2/authentication.js
@@ -22,13 +22,15 @@ module.exports = {
state: conf.enableCSRFProtection
}, async (req, accessToken, refreshToken, profile, cb) => {
try {
+ const picture = _.get(profile, conf.pictureClaim, '')
const user = await WIKI.models.users.processProfile({
providerKey: req.params.strategy,
profile: {
...profile,
id: _.get(profile, conf.userIdClaim),
displayName: _.get(profile, conf.displayNameClaim, '???'),
- email: _.get(profile, conf.emailClaim)
+ email: _.get(profile, conf.emailClaim),
+ picture: picture
}
})
if (conf.mapGroups) {
diff --git a/server/modules/authentication/oauth2/definition.yml b/server/modules/authentication/oauth2/definition.yml
index 0e5996294..254bec0df 100644
--- a/server/modules/authentication/oauth2/definition.yml
+++ b/server/modules/authentication/oauth2/definition.yml
@@ -54,38 +54,45 @@ props:
default: email
maxWidth: 500
order: 8
+ pictureClaim:
+ type: String
+ title: Picture Claim
+ hint: Field containing the user avatar URL
+ default: picture
+ maxWidth: 500
+ order: 9
mapGroups:
type: Boolean
title: Map Groups
hint: Map groups matching names from the groups claim value
default: false
- order: 9
+ order: 10
groupsClaim:
type: String
title: Groups Claim
hint: Field containing the group names
default: groups
maxWidth: 500
- order: 10
+ order: 11
logoutURL:
type: String
title: Logout URL
hint: (optional) Logout URL on the OAuth2 provider where the user will be redirected to complete the logout process.
- order: 11
+ order: 12
scope:
type: String
title: Scope
hint: (optional) Application Client permission scopes.
- order: 12
+ order: 13
useQueryStringForAccessToken:
type: Boolean
default: false
title: Pass access token via GET query string to User Info Endpoint
hint: (optional) Pass the access token in an `access_token` parameter attached to the GET query string of the User Info Endpoint URL. Otherwise the access token will be passed in the Authorization header.
- order: 13
+ order: 14
enableCSRFProtection:
type: Boolean
default: true
title: Enable CSRF protection
hint: Pass a nonce state parameter during authentication to protect against CSRF attacks.
- order: 14
+ order: 15
diff --git a/server/modules/authentication/oidc/authentication.js b/server/modules/authentication/oidc/authentication.js
index 4c7383e4b..bfda8c2fd 100644
--- a/server/modules/authentication/oidc/authentication.js
+++ b/server/modules/authentication/oidc/authentication.js
@@ -24,6 +24,7 @@ module.exports = {
acrValues: conf.acrValues
}, async (req, iss, uiProfile, idProfile, context, idToken, accessToken, refreshToken, params, cb) => {
const profile = Object.assign({}, idProfile, uiProfile)
+ const picture = _.get(profile, '_json.' + conf.pictureClaim, '')
try {
const user = await WIKI.models.users.processProfile({
@@ -31,7 +32,8 @@ module.exports = {
profile: {
...profile,
email: _.get(profile, '_json.' + conf.emailClaim),
- displayName: _.get(profile, '_json.' + conf.displayNameClaim, '')
+ displayName: _.get(profile, '_json.' + conf.displayNameClaim, ''),
+ picture: picture
}
})
if (conf.mapGroups) {
diff --git a/server/modules/authentication/oidc/definition.yml b/server/modules/authentication/oidc/definition.yml
index 774575c1b..266ea7e9f 100644
--- a/server/modules/authentication/oidc/definition.yml
+++ b/server/modules/authentication/oidc/definition.yml
@@ -62,26 +62,33 @@ props:
default: displayName
maxWidth: 500
order: 9
+ pictureClaim:
+ type: String
+ title: Picture Claim
+ hint: Field containing the user avatar URL
+ default: picture
+ maxWidth: 500
+ order: 10
mapGroups:
type: Boolean
title: Map Groups
hint: Map groups matching names from the groups claim value
default: false
- order: 10
+ order: 11
groupsClaim:
type: String
title: Groups Claim
hint: Field containing the group names
default: groups
maxWidth: 500
- order: 11
+ order: 12
logoutURL:
type: String
title: Logout URL
hint: (optional) Logout URL on the OAuth2 provider where the user will be redirected to complete the logout process.
- order: 12
+ order: 13
acrValues:
type: String
title: ACR Values
hint: (optional) Authentication Context Class Reference
- order: 13
+ order: 14
diff --git a/server/modules/authentication/rocketchat/authentication.js b/server/modules/authentication/rocketchat/authentication.js
index c966326ee..d15c4ce9f 100644
--- a/server/modules/authentication/rocketchat/authentication.js
+++ b/server/modules/authentication/rocketchat/authentication.js
@@ -12,7 +12,26 @@ module.exports = {
init (passport, conf) {
const siteURL = conf.siteURL.slice(-1) === '/' ? conf.siteURL.slice(0, -1) : conf.siteURL
- OAuth2Strategy.prototype.userProfile = function (accessToken, cb) {
+ const strategyInstance = new OAuth2Strategy({
+ authorizationURL: `${siteURL}/oauth/authorize`,
+ tokenURL: `${siteURL}/oauth/token`,
+ clientID: conf.clientId,
+ clientSecret: conf.clientSecret,
+ callbackURL: conf.callbackURL,
+ passReqToCallback: true
+ }, async (req, accessToken, refreshToken, profile, cb) => {
+ try {
+ const user = await WIKI.models.users.processProfile({
+ providerKey: req.params.strategy,
+ profile
+ })
+ cb(null, user)
+ } catch (err) {
+ cb(err, null)
+ }
+ })
+
+ strategyInstance.userProfile = function (accessToken, cb) {
this._oauth2.get(`${siteURL}/api/v1/me`, accessToken, (err, body, res) => {
if (err) {
WIKI.logger.warn('Rocket.chat - Failed to fetch user profile.')
@@ -33,26 +52,7 @@ module.exports = {
})
}
- passport.use(conf.key,
- new OAuth2Strategy({
- authorizationURL: `${siteURL}/oauth/authorize`,
- tokenURL: `${siteURL}/oauth/token`,
- clientID: conf.clientId,
- clientSecret: conf.clientSecret,
- callbackURL: conf.callbackURL,
- passReqToCallback: true
- }, async (req, accessToken, refreshToken, profile, cb) => {
- try {
- const user = await WIKI.models.users.processProfile({
- providerKey: req.params.strategy,
- profile
- })
- cb(null, user)
- } catch (err) {
- cb(err, null)
- }
- })
- )
+ passport.use(conf.key, strategyInstance)
},
logout (conf) {
if (!conf.logoutURL) {
diff --git a/server/modules/rendering/html-security/renderer.js b/server/modules/rendering/html-security/renderer.js
index 3bf9b2dc0..b57aaf1b8 100644
--- a/server/modules/rendering/html-security/renderer.js
+++ b/server/modules/rendering/html-security/renderer.js
@@ -34,7 +34,8 @@ module.exports = {
input = DOMPurify.sanitize(input, {
ADD_ATTR: allowedAttrs,
- ADD_TAGS: allowedTags
+ ADD_TAGS: allowedTags,
+ HTML_INTEGRATION_POINTS: { foreignobject: true }
})
}
return input
diff --git a/server/modules/search/algolia/engine.js b/server/modules/search/algolia/engine.js
index e13b3c4a5..16380a544 100644
--- a/server/modules/search/algolia/engine.js
+++ b/server/modules/search/algolia/engine.js
@@ -1,8 +1,7 @@
const _ = require('lodash')
const algoliasearch = require('algoliasearch')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
/* global WIKI */
@@ -192,7 +191,7 @@ module.exports = {
isPublished: true,
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (chunk, enc, cb) => processDocument(cb, chunk),
flush: async (cb) => processDocument(cb)
diff --git a/server/modules/search/aws/engine.js b/server/modules/search/aws/engine.js
index e703e5c36..862637045 100644
--- a/server/modules/search/aws/engine.js
+++ b/server/modules/search/aws/engine.js
@@ -1,8 +1,7 @@
const _ = require('lodash')
const AWS = require('aws-sdk')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
/* global WIKI */
@@ -353,7 +352,7 @@ module.exports = {
isPublished: true,
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (chunk, enc, cb) => processDocument(cb, chunk),
flush: async (cb) => processDocument(cb)
diff --git a/server/modules/search/azure/engine.js b/server/modules/search/azure/engine.js
index 7dffcd075..b5e9b16cf 100644
--- a/server/modules/search/azure/engine.js
+++ b/server/modules/search/azure/engine.js
@@ -1,9 +1,8 @@
const _ = require('lodash')
const { SearchService, QueryType } = require('azure-search-client')
const request = require('request-promise')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
/* global WIKI */
@@ -215,7 +214,7 @@ module.exports = {
isPublished: true,
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: (chunk, enc, cb) => {
cb(null, {
diff --git a/server/modules/search/elasticsearch/engine.js b/server/modules/search/elasticsearch/engine.js
index 0daf00374..5ad710b0c 100644
--- a/server/modules/search/elasticsearch/engine.js
+++ b/server/modules/search/elasticsearch/engine.js
@@ -1,8 +1,7 @@
const _ = require('lodash')
-const stream = require('stream')
-const Promise = require('bluebird')
const fs = require('fs')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
/* global WIKI */
@@ -135,7 +134,7 @@ module.exports = {
} catch (err) {
WIKI.logger.error(`(SEARCH/ELASTICSEARCH) Create Index Error: `, _.get(err, 'meta.body.error', err))
}
- }
+ }
} catch (err) {
WIKI.logger.error(`(SEARCH/ELASTICSEARCH) Index Check Error: `, _.get(err, 'meta.body.error', err))
}
@@ -392,7 +391,7 @@ module.exports = {
isPublished: true,
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (chunk, enc, cb) => processDocument(cb, chunk),
flush: async (cb) => processDocument(cb)
diff --git a/server/modules/search/postgres/engine.js b/server/modules/search/postgres/engine.js
index c0abee175..cfbf927df 100644
--- a/server/modules/search/postgres/engine.js
+++ b/server/modules/search/postgres/engine.js
@@ -1,7 +1,6 @@
const tsquery = require('pg-tsquery')()
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
/* global WIKI */
@@ -23,6 +22,9 @@ module.exports = {
async init() {
WIKI.logger.info(`(SEARCH/POSTGRES) Initializing...`)
+ // -> Ensure pg_trgm extension is available (required for similarity search)
+ await WIKI.models.knex.raw('CREATE EXTENSION IF NOT EXISTS pg_trgm')
+
// -> Create Search Index
const indexExists = await WIKI.models.knex.schema.hasTable('pagesVector')
if (!indexExists) {
@@ -45,7 +47,6 @@ module.exports = {
CREATE TABLE "pagesWords" AS SELECT word FROM ts_stat(
'SELECT to_tsvector(''simple'', "title") || to_tsvector(''simple'', "description") || to_tsvector(''simple'', "content") FROM "pagesVector"'
)`)
- await WIKI.models.knex.raw('CREATE EXTENSION IF NOT EXISTS pg_trgm')
await WIKI.models.knex.raw(`CREATE INDEX "pageWords_idx" ON "pagesWords" USING GIN (word gin_trgm_ops)`)
}
@@ -81,8 +82,12 @@ module.exports = {
${qryEnd}
`, qryParams)
if (results.rows.length < 5) {
- const suggestResults = await WIKI.models.knex.raw(`SELECT word, word <-> ? AS rank FROM "pagesWords" WHERE similarity(word, ?) > 0.2 ORDER BY rank LIMIT 5;`, [q, q])
- suggestions = suggestResults.rows.map(r => r.word)
+ try {
+ const suggestResults = await WIKI.models.knex.raw(`SELECT word, word <-> ? AS rank FROM "pagesWords" WHERE similarity(word, ?) > 0.2 ORDER BY rank LIMIT 5;`, [q, q])
+ suggestions = suggestResults.rows.map(r => r.word)
+ } catch (err) {
+ WIKI.logger.warn(`Search Engine Suggestion Error (pg_trgm extension may be missing): ${err.message}`)
+ }
}
return {
results: results.rows,
@@ -160,7 +165,7 @@ module.exports = {
isPublished: true,
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (page, enc, cb) => {
const content = WIKI.models.pages.cleanHTML(page.render)
diff --git a/server/modules/storage/azure/storage.js b/server/modules/storage/azure/storage.js
index f7320146f..0380c3af3 100644
--- a/server/modules/storage/azure/storage.js
+++ b/server/modules/storage/azure/storage.js
@@ -1,7 +1,6 @@
const { BlobServiceClient, StorageSharedKeyCredential } = require('@azure/storage-blob')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
const pageHelper = require('../../../helpers/page.js')
const _ = require('lodash')
@@ -129,7 +128,7 @@ module.exports = {
WIKI.models.knex.column('path', 'localeCode', 'title', 'description', 'contentType', 'content', 'isPublished', 'updatedAt', 'createdAt').select().from('pages').where({
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (page, enc, cb) => {
const filePath = getFilePath(page, 'path')
@@ -147,7 +146,7 @@ module.exports = {
await pipeline(
WIKI.models.knex.column('filename', 'folderId', 'data').select().from('assets').join('assetData', 'assets.id', '=', 'assetData.id').stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (asset, enc, cb) => {
const filename = (asset.folderId && asset.folderId > 0) ? `${_.get(assetFolders, asset.folderId)}/${asset.filename}` : asset.filename
diff --git a/server/modules/storage/digitalocean/definition.yml b/server/modules/storage/digitalocean/definition.yml
index 8d900783e..2b5ec8378 100644
--- a/server/modules/storage/digitalocean/definition.yml
+++ b/server/modules/storage/digitalocean/definition.yml
@@ -22,6 +22,7 @@ props:
- sfo2.digitaloceanspaces.com
- sfo3.digitaloceanspaces.com
- sgp1.digitaloceanspaces.com
+ - tor1.digitaloceanspaces.com
order: 1
bucket:
type: String
diff --git a/server/modules/storage/disk/common.js b/server/modules/storage/disk/common.js
index 9ed0b9863..c1980fd0f 100644
--- a/server/modules/storage/disk/common.js
+++ b/server/modules/storage/disk/common.js
@@ -1,8 +1,7 @@
const fs = require('fs-extra')
const path = require('path')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('stream/promises')
+const { Transform } = require('stream')
const klaw = require('klaw')
const mime = require('mime-types').lookup
const _ = require('lodash')
@@ -22,7 +21,7 @@ module.exports = {
return !_.includes(f, '.git')
}
}),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (file, enc, cb) => {
const relPath = file.path.substr(fullPath.length + 1)
diff --git a/server/modules/storage/disk/storage.js b/server/modules/storage/disk/storage.js
index 8e4e46616..7e0300e52 100644
--- a/server/modules/storage/disk/storage.js
+++ b/server/modules/storage/disk/storage.js
@@ -2,10 +2,9 @@ const fs = require('fs-extra')
const path = require('path')
const tar = require('tar-fs')
const zlib = require('zlib')
-const stream = require('stream')
const _ = require('lodash')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
const moment = require('moment')
const pageHelper = require('../../../helpers/page')
@@ -130,7 +129,7 @@ module.exports = {
WIKI.models.knex.column('id', 'path', 'localeCode', 'title', 'description', 'contentType', 'content', 'isPublished', 'updatedAt', 'createdAt', 'editorKey').select().from('pages').where({
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (page, enc, cb) => {
const pageObject = await WIKI.models.pages.query().findById(page.id)
@@ -153,7 +152,7 @@ module.exports = {
await pipeline(
WIKI.models.knex.column('filename', 'folderId', 'data').select().from('assets').join('assetData', 'assets.id', '=', 'assetData.id').stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (asset, enc, cb) => {
const filename = (asset.folderId && asset.folderId > 0) ? `${_.get(assetFolders, asset.folderId)}/${asset.filename}` : asset.filename
diff --git a/server/modules/storage/git/storage.js b/server/modules/storage/git/storage.js
index fcb197bc0..54a7a4b6e 100644
--- a/server/modules/storage/git/storage.js
+++ b/server/modules/storage/git/storage.js
@@ -2,9 +2,8 @@ const path = require('path')
const sgit = require('simple-git')
const fs = require('fs-extra')
const _ = require('lodash')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
const klaw = require('klaw')
const os = require('os')
@@ -441,7 +440,7 @@ module.exports = {
return !_.includes(f, '.git')
}
}),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (file, enc, cb) => {
const relPath = file.path.substr(this.repoPath.length + 1)
@@ -476,7 +475,7 @@ module.exports = {
WIKI.models.knex.column('id', 'path', 'localeCode', 'title', 'description', 'contentType', 'content', 'isPublished', 'updatedAt', 'createdAt', 'editorKey').select().from('pages').where({
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (page, enc, cb) => {
const pageObject = await WIKI.models.pages.query().findById(page.id)
@@ -500,7 +499,7 @@ module.exports = {
await pipeline(
WIKI.models.knex.column('filename', 'folderId', 'data').select().from('assets').join('assetData', 'assets.id', '=', 'assetData.id').stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (asset, enc, cb) => {
const filename = (asset.folderId && asset.folderId > 0) ? `${_.get(assetFolders, asset.folderId)}/${asset.filename}` : asset.filename
diff --git a/server/modules/storage/s3/common.js b/server/modules/storage/s3/common.js
index fa1bc5dcd..90aea1b66 100644
--- a/server/modules/storage/s3/common.js
+++ b/server/modules/storage/s3/common.js
@@ -1,7 +1,6 @@
const S3 = require('aws-sdk/clients/s3')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
const _ = require('lodash')
const pageHelper = require('../../../helpers/page.js')
@@ -22,7 +21,7 @@ const getFilePath = (page, pathKey) => {
module.exports = class S3CompatibleStorage {
constructor(storageName) {
this.storageName = storageName
- this.bucketName = ""
+ this.bucketName = ''
}
async activated() {
// not used
@@ -136,7 +135,7 @@ module.exports = class S3CompatibleStorage {
WIKI.models.knex.column('path', 'localeCode', 'title', 'description', 'contentType', 'content', 'isPublished', 'updatedAt', 'createdAt').select().from('pages').where({
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (page, enc, cb) => {
const filePath = getFilePath(page, 'path')
@@ -152,7 +151,7 @@ module.exports = class S3CompatibleStorage {
await pipeline(
WIKI.models.knex.column('filename', 'folderId', 'data').select().from('assets').join('assetData', 'assets.id', '=', 'assetData.id').stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (asset, enc, cb) => {
const filename = (asset.folderId && asset.folderId > 0) ? `${_.get(assetFolders, asset.folderId)}/${asset.filename}` : asset.filename
diff --git a/server/modules/storage/sftp/storage.js b/server/modules/storage/sftp/storage.js
index 49d5ae1d9..8ce204971 100644
--- a/server/modules/storage/sftp/storage.js
+++ b/server/modules/storage/sftp/storage.js
@@ -1,9 +1,8 @@
const SSH2Promise = require('ssh2-promise')
const _ = require('lodash')
const path = require('path')
-const stream = require('stream')
-const Promise = require('bluebird')
-const pipeline = Promise.promisify(stream.pipeline)
+const { pipeline } = require('node:stream/promises')
+const { Transform } = require('node:stream')
const pageHelper = require('../../../helpers/page.js')
/* global WIKI */
@@ -118,7 +117,7 @@ module.exports = {
WIKI.models.knex.column('path', 'localeCode', 'title', 'description', 'contentType', 'content', 'isPublished', 'updatedAt', 'createdAt').select().from('pages').where({
isPrivate: false
}).stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (page, enc, cb) => {
const filePath = getFilePath(page, 'path')
@@ -135,7 +134,7 @@ module.exports = {
await pipeline(
WIKI.models.knex.column('filename', 'folderId', 'data').select().from('assets').join('assetData', 'assets.id', '=', 'assetData.id').stream(),
- new stream.Transform({
+ new Transform({
objectMode: true,
transform: async (asset, enc, cb) => {
const filename = (asset.folderId && asset.folderId > 0) ? `${_.get(assetFolders, asset.folderId)}/${asset.filename}` : asset.filename
diff --git a/server/setup.js b/server/setup.js
index 44da308b6..9763fc038 100644
--- a/server/setup.js
+++ b/server/setup.js
@@ -5,13 +5,14 @@ const compression = require('compression')
const express = require('express')
const favicon = require('serve-favicon')
const http = require('http')
-const Promise = require('bluebird')
const fs = require('fs-extra')
const _ = require('lodash')
-const crypto = Promise.promisifyAll(require('crypto'))
+const crypto = require('crypto')
const pem2jwk = require('pem-jwk').pem2jwk
const semver = require('semver')
+const randomBytesAsync = require('util').promisify(crypto.randomBytes)
+
/* global WIKI */
module.exports = () => {
@@ -119,7 +120,7 @@ module.exports = () => {
analyticsService: '',
analyticsId: ''
})
- _.set(WIKI.config, 'sessionSecret', (await crypto.randomBytesAsync(32)).toString('hex'))
+ _.set(WIKI.config, 'sessionSecret', (await randomBytesAsync(32)).toString('hex'))
_.set(WIKI.config, 'telemetry', {
isEnabled: req.body.telemetry === true,
clientId: uuid()
diff --git a/yarn.lock b/yarn.lock
index 17e8fbd59..8414feb3d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -199,39 +199,43 @@
dependencies:
tslib "^1.9.3"
-"@azure/core-asynciterator-polyfill@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz#dcccebb88406e5c76e0e1d52e8cc4c43a68b3ee7"
- integrity sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==
-
-"@azure/core-auth@^1.3.0":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.3.2.tgz#6a2c248576c26df365f6c7881ca04b7f6d08e3d0"
- integrity sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==
+"@azure/abort-controller@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d"
+ integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==
+ dependencies:
+ tslib "^2.6.2"
+
+"@azure/core-auth@^1.10.0", "@azure/core-auth@^1.9.0":
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.10.1.tgz#68a17fa861ebd14f6fd314055798355ef6bedf1b"
+ integrity sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==
+ dependencies:
+ "@azure/abort-controller" "^2.1.2"
+ "@azure/core-util" "^1.13.0"
+ tslib "^2.6.2"
+
+"@azure/core-client@^1.10.0", "@azure/core-client@^1.9.3":
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.10.1.tgz#83d78f97d647ab22e6811a7a68bb4223e7a1d019"
+ integrity sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==
+ dependencies:
+ "@azure/abort-controller" "^2.1.2"
+ "@azure/core-auth" "^1.10.0"
+ "@azure/core-rest-pipeline" "^1.22.0"
+ "@azure/core-tracing" "^1.3.0"
+ "@azure/core-util" "^1.13.0"
+ "@azure/logger" "^1.3.0"
+ tslib "^2.6.2"
+
+"@azure/core-http-compat@^2.2.0":
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/@azure/core-http-compat/-/core-http-compat-2.3.1.tgz#2182e39a31c062800d4e3ad69bcf0109d87713dc"
+ integrity sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==
dependencies:
- "@azure/abort-controller" "^1.0.0"
- tslib "^2.2.0"
-
-"@azure/core-http@^2.0.0":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-2.2.4.tgz#df5a5b4138dbbc4299879f2fc6f257d0a5f0401e"
- integrity sha512-QmmJmexXKtPyc3/rsZR/YTLDvMatzbzAypJmLzvlfxgz/SkgnqV/D4f6F2LsK6tBj1qhyp8BoXiOebiej0zz3A==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-asynciterator-polyfill" "^1.0.0"
- "@azure/core-auth" "^1.3.0"
- "@azure/core-tracing" "1.0.0-preview.13"
- "@azure/logger" "^1.0.0"
- "@types/node-fetch" "^2.5.0"
- "@types/tunnel" "^0.0.3"
- form-data "^4.0.0"
- node-fetch "^2.6.7"
- process "^0.11.10"
- tough-cookie "^4.0.0"
- tslib "^2.2.0"
- tunnel "^0.0.6"
- uuid "^8.3.0"
- xml2js "^0.4.19"
+ "@azure/abort-controller" "^2.1.2"
+ "@azure/core-client" "^1.10.0"
+ "@azure/core-rest-pipeline" "^1.22.0"
"@azure/core-lro@^2.2.0":
version "2.2.4"
@@ -243,12 +247,25 @@
"@azure/logger" "^1.0.0"
tslib "^2.2.0"
-"@azure/core-paging@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.1.1.tgz#9639d2d5b6631d481d81040504e0e26c003f47b1"
- integrity sha512-hqEJBEGKan4YdOaL9ZG/GRG6PXaFd/Wb3SSjQW4LWotZzgl6xqG00h6wmkrpd2NNkbBkD1erLHBO3lPHApv+iQ==
+"@azure/core-paging@^1.6.2":
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.6.2.tgz#40d3860dc2df7f291d66350b2cfd9171526433e7"
+ integrity sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==
dependencies:
- "@azure/core-asynciterator-polyfill" "^1.0.0"
+ tslib "^2.6.2"
+
+"@azure/core-rest-pipeline@^1.19.1", "@azure/core-rest-pipeline@^1.22.0":
+ version "1.22.2"
+ resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz#7e14f21d25ab627cd07676adb5d9aacd8e2e95cc"
+ integrity sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==
+ dependencies:
+ "@azure/abort-controller" "^2.1.2"
+ "@azure/core-auth" "^1.10.0"
+ "@azure/core-tracing" "^1.3.0"
+ "@azure/core-util" "^1.13.0"
+ "@azure/logger" "^1.3.0"
+ "@typespec/ts-http-runtime" "^0.3.0"
+ tslib "^2.6.2"
"@azure/core-tracing@1.0.0-preview.13":
version "1.0.0-preview.13"
@@ -258,6 +275,30 @@
"@opentelemetry/api" "^1.0.1"
tslib "^2.2.0"
+"@azure/core-tracing@^1.2.0", "@azure/core-tracing@^1.3.0":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.3.1.tgz#e971045c901ea9c110616b0e1db272507781d5f6"
+ integrity sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==
+ dependencies:
+ tslib "^2.6.2"
+
+"@azure/core-util@^1.11.0", "@azure/core-util@^1.13.0":
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.13.1.tgz#6dff2ff6d3c9c6430c6f4d3b3e65de531f10bafe"
+ integrity sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==
+ dependencies:
+ "@azure/abort-controller" "^2.1.2"
+ "@typespec/ts-http-runtime" "^0.3.0"
+ tslib "^2.6.2"
+
+"@azure/core-xml@^1.4.5":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@azure/core-xml/-/core-xml-1.5.0.tgz#cd82d511d7bcc548d206f5627c39724c5d5a4434"
+ integrity sha512-D/sdlJBMJfx7gqoj66PKVmhDDaU6TKA49ptcolxdas29X7AfvLTmfAGLjAcIMBK7UZ2o4lygHIqVckOlQU3xWw==
+ dependencies:
+ fast-xml-parser "^5.0.7"
+ tslib "^2.8.1"
+
"@azure/logger@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.0.tgz#48b371dfb34288c8797e5c104f6c4fb45bf1772c"
@@ -265,6 +306,14 @@
dependencies:
tslib "^1.9.3"
+"@azure/logger@^1.1.4", "@azure/logger@^1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.3.0.tgz#5501cf85d4f52630602a8cc75df76568c969a827"
+ integrity sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==
+ dependencies:
+ "@typespec/ts-http-runtime" "^0.3.0"
+ tslib "^2.6.2"
+
"@azure/ms-rest-azure-env@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@azure/ms-rest-azure-env/-/ms-rest-azure-env-1.1.2.tgz#8505873afd4a1227ec040894a64fdd736b4a101f"
@@ -293,19 +342,40 @@
"@azure/ms-rest-js" "^1.8.7"
adal-node "^0.1.28"
-"@azure/storage-blob@12.12.0":
- version "12.12.0"
- resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.12.0.tgz#25e277c885692d5adcd8c2a949789b2837a74c59"
- integrity sha512-o/Mf6lkyYG/eBW4/hXB9864RxVNmAkcKHjsGR6Inlp5hupa3exjSyH2KjO3tLO//YGA+tS+17hM2bxRl9Sn16g==
+"@azure/storage-blob@12.29.1":
+ version "12.29.1"
+ resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.29.1.tgz#d9588b3f56f3621f92936fa3e7f268e00a34548a"
+ integrity sha512-7ktyY0rfTM0vo7HvtK6E3UvYnI9qfd6Oz6z/+92VhGRveWng3kJwMKeUpqmW/NmwcDNbxHpSlldG+vsUnRFnBg==
dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-http" "^2.0.0"
+ "@azure/abort-controller" "^2.1.2"
+ "@azure/core-auth" "^1.9.0"
+ "@azure/core-client" "^1.9.3"
+ "@azure/core-http-compat" "^2.2.0"
"@azure/core-lro" "^2.2.0"
- "@azure/core-paging" "^1.1.1"
- "@azure/core-tracing" "1.0.0-preview.13"
- "@azure/logger" "^1.0.0"
+ "@azure/core-paging" "^1.6.2"
+ "@azure/core-rest-pipeline" "^1.19.1"
+ "@azure/core-tracing" "^1.2.0"
+ "@azure/core-util" "^1.11.0"
+ "@azure/core-xml" "^1.4.5"
+ "@azure/logger" "^1.1.4"
+ "@azure/storage-common" "^12.1.1"
events "^3.0.0"
- tslib "^2.2.0"
+ tslib "^2.8.1"
+
+"@azure/storage-common@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@azure/storage-common/-/storage-common-12.1.1.tgz#cd0768188f7cf8ea7202d584067ad5f3eba89744"
+ integrity sha512-eIOH1pqFwI6UmVNnDQvmFeSg0XppuzDLFeUNO/Xht7ODAzRLgGDh7h550pSxoA+lPDxBl1+D2m/KG3jWzCUjTg==
+ dependencies:
+ "@azure/abort-controller" "^2.1.2"
+ "@azure/core-auth" "^1.9.0"
+ "@azure/core-http-compat" "^2.2.0"
+ "@azure/core-rest-pipeline" "^1.19.1"
+ "@azure/core-tracing" "^1.2.0"
+ "@azure/core-util" "^1.11.0"
+ "@azure/logger" "^1.1.4"
+ events "^3.3.0"
+ tslib "^2.8.1"
"@babel/cli@^7.12.1":
version "7.12.1"
@@ -2795,6 +2865,11 @@
tslib "^2.4.0"
undici "^6.12.0"
+"@epic-web/invariant@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@epic-web/invariant/-/invariant-1.0.0.tgz#1073e5dee6dd540410784990eb73e4acd25c9813"
+ integrity sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==
+
"@eslint/eslintrc@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.0.tgz#bc7e3c4304d4c8720968ccaee793087dfb5fe6b4"
@@ -3289,26 +3364,16 @@
resolved "https://registry.yarnpkg.com/@log4js-node/log4js-api/-/log4js-api-1.0.2.tgz#7a8143fb33f077df3e579dca7f18fea74a02ec8b"
integrity sha512-6SJfx949YEWooh/CUPpJ+F491y4BYJmknz4hUN1+RHvKoUEynKbRmhnwbk/VLmh4OthLLDNCyWXfbh4DG1cTXA==
-"@mapbox/node-pre-gyp@^1.0.0":
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz#09a8781a3a036151cdebbe8719d6f8b25d4058bc"
- integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==
- dependencies:
- detect-libc "^2.0.0"
- https-proxy-agent "^5.0.0"
- make-dir "^3.1.0"
- node-fetch "^2.6.7"
- nopt "^5.0.0"
- npmlog "^5.0.1"
- rimraf "^3.0.2"
- semver "^7.3.5"
- tar "^6.1.11"
-
"@mdi/font@5.8.55":
version "5.8.55"
resolved "https://registry.yarnpkg.com/@mdi/font/-/font-5.8.55.tgz#1464155bcbc8a6e4af6dffd611fe8e38e09af285"
integrity sha512-8mrwfFBsmj+D67ZiGQSe5TU/lcWCtDyli2eshQ2fvLCZGRPqFMM23YQp4+JMOTpk5yMZKTeAwNWIYfITy76OHA==
+"@mixmark-io/domino@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@mixmark-io/domino/-/domino-2.2.0.tgz#4e8ec69bf1afeb7a14f0628b7e2c0f35bdb336c3"
+ integrity sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==
+
"@nicolo-ribaudo/chokidar-2@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8.tgz#eef8d9b47e8dc589499f14d656e8d2dd978c3d14"
@@ -3835,13 +3900,6 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
-"@types/node-fetch@^2.5.0":
- version "2.5.4"
- resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.4.tgz#5245b6d8841fc3a6208b82291119bc11c4e0ce44"
- integrity sha512-Oz6id++2qAOFuOlE1j0ouk1dzl3mmI1+qINPNBhi9nt/gVOz0G+13Ao6qjhdF0Ys+eOkhu6JnFmt38bR3H0POQ==
- dependencies:
- "@types/node" "*"
-
"@types/node@*", "@types/node@>=6":
version "12.7.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04"
@@ -3867,19 +3925,6 @@
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
-"@types/pg-types@*":
- version "1.11.5"
- resolved "https://registry.yarnpkg.com/@types/pg-types/-/pg-types-1.11.5.tgz#1eebbe62b6772fcc75c18957a90f933d155e005b"
- integrity sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==
-
-"@types/pg@^7.4.14":
- version "7.14.1"
- resolved "https://registry.yarnpkg.com/@types/pg/-/pg-7.14.1.tgz#40358b57c34970f750f6a26e2a5463c9f4758136"
- integrity sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==
- dependencies:
- "@types/node" "*"
- "@types/pg-types" "*"
-
"@types/prettier@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.0.tgz#dc85454b953178cc6043df5208b9e949b54a3bc4"
@@ -3954,6 +3999,11 @@
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02"
integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==
+"@types/trusted-types@^2.0.7":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
+ integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==
+
"@types/tunnel@0.0.0":
version "0.0.0"
resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.0.tgz#c2a42943ee63c90652a5557b8c4e56cda77f944e"
@@ -3961,13 +4011,6 @@
dependencies:
"@types/node" "*"
-"@types/tunnel@^0.0.3":
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.3.tgz#f109e730b072b3136347561fc558c9358bb8c6e9"
- integrity sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==
- dependencies:
- "@types/node" "*"
-
"@types/uglify-js@*":
version "3.0.4"
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
@@ -4039,6 +4082,15 @@
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d"
integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==
+"@typespec/ts-http-runtime@^0.3.0":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz#1048df6182b02bec8962a9cffd1c5ee1a129541f"
+ integrity sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==
+ dependencies:
+ http-proxy-agent "^7.0.0"
+ https-proxy-agent "^7.0.0"
+ tslib "^2.6.2"
+
"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81"
@@ -4395,7 +4447,7 @@ abstract-logging@^2.0.0:
resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839"
integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==
-accepts@^1.3.5, accepts@~1.3.5, accepts@~1.3.7:
+accepts@^1.3.5, accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
@@ -4486,6 +4538,11 @@ agent-base@6, agent-base@^6.0.2:
dependencies:
debug "4"
+agent-base@^7.1.0, agent-base@^7.1.2:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
+ integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
+
agentkeepalive@^4.1.3:
version "4.2.1"
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717"
@@ -5106,14 +5163,6 @@ arch@^2.1.2:
resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf"
integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==
-are-we-there-yet@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c"
- integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==
- dependencies:
- delegates "^1.0.0"
- readable-stream "^3.6.0"
-
are-we-there-yet@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d"
@@ -5392,10 +5441,10 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
-aws-sdk@2.1309.0:
- version "2.1309.0"
- resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1309.0.tgz#2bc6e25af6da39a6c9c48080a43b35596a58a2c5"
- integrity sha512-EC/EtDDWDoJnovvmNlJqvojNJMbFZ78HESzgFiond5vzPS+FIWnWgGJ1ZVvIWU9O4X5I8cEMckwHCTfVYNcZxA==
+aws-sdk@2.1693.0:
+ version "2.1693.0"
+ resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1693.0.tgz#fda38671af3dc5fa8117e9aa09cf6ce37e34010e"
+ integrity sha512-cJmb8xEnVLT+R6fBS5sn/EFJiX7tUnDaPtOPZ1vFbOJtd0fnZn/Ky2XGgsvvoeliWeH7mL3TWSX5zXXGSQV6gQ==
dependencies:
buffer "4.9.2"
events "1.1.1"
@@ -5406,13 +5455,18 @@ aws-sdk@2.1309.0:
url "0.10.3"
util "^0.12.4"
uuid "8.0.0"
- xml2js "0.4.19"
+ xml2js "0.6.2"
aws-sign2@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+aws-ssl-profiles@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz#157dd77e9f19b1d123678e93f120e6f193022641"
+ integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==
+
aws4@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
@@ -5426,13 +5480,14 @@ axios@^0.19.0:
follow-redirects "1.5.10"
is-buffer "^2.0.2"
-axios@^0.27.2:
- version "0.27.2"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
- integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
+axios@^1.7.4:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687"
+ integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==
dependencies:
- follow-redirects "^1.14.9"
- form-data "^4.0.0"
+ follow-redirects "^1.15.6"
+ form-data "^4.0.4"
+ proxy-from-env "^1.1.0"
azure-search-client@3.1.5:
version "3.1.5"
@@ -5756,6 +5811,13 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
bl@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5"
@@ -6011,7 +6073,7 @@ buffer-crc32@~0.2.3:
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
-buffer-equal-constant-time@1.0.1:
+buffer-equal-constant-time@1.0.1, buffer-equal-constant-time@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
@@ -6026,11 +6088,6 @@ buffer-json@^2.0.0:
resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23"
integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==
-buffer-writer@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
- integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
-
buffer-xor@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
@@ -6062,6 +6119,14 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
bufferutil@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7"
@@ -6104,11 +6169,6 @@ busboy@^0.3.1:
dependencies:
dicer "0.3.0"
-bytes@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
- integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-
bytes@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
@@ -6228,6 +6288,14 @@ cachedir@^2.3.0:
resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
+call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+ integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+ dependencies:
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -6604,10 +6672,10 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-clean-css@5.3.2:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224"
- integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==
+clean-css@5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd"
+ integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==
dependencies:
source-map "~0.6.0"
@@ -6847,7 +6915,7 @@ color-string@^1.4.0, color-string@^1.5.2:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
-color-support@^1.1.2, color-support@^1.1.3:
+color-support@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
@@ -6975,24 +7043,24 @@ compose-function@3.0.3:
dependencies:
arity-n "^1.0.4"
-compressible@~2.0.16:
- version "2.0.17"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
- integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
+compressible@~2.0.18:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
dependencies:
- mime-db ">= 1.40.0 < 2"
+ mime-db ">= 1.43.0 < 2"
-compression@1.7.4:
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
- integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+compression@1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79"
+ integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==
dependencies:
- accepts "~1.3.5"
- bytes "3.0.0"
- compressible "~2.0.16"
+ bytes "3.1.2"
+ compressible "~2.0.18"
debug "2.6.9"
- on-headers "~1.0.2"
- safe-buffer "5.1.2"
+ negotiator "~0.6.4"
+ on-headers "~1.1.0"
+ safe-buffer "5.2.1"
vary "~1.1.2"
concat-map@0.0.1:
@@ -7116,12 +7184,12 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0:
dependencies:
safe-buffer "~5.1.1"
-cookie-parser@1.4.6:
- version "1.4.6"
- resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594"
- integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==
+cookie-parser@1.4.7:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.7.tgz#e2125635dfd766888ffe90d60c286404fa0e7b26"
+ integrity sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==
dependencies:
- cookie "0.4.1"
+ cookie "0.7.2"
cookie-signature "1.0.6"
cookie-signature@1.0.6:
@@ -7129,6 +7197,11 @@ cookie-signature@1.0.6:
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+cookie-signature@1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454"
+ integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==
+
cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
@@ -7139,21 +7212,16 @@ cookie@0.4.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
-cookie@0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
- integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
-
-cookie@0.4.2:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
- integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
-
cookie@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+cookie@0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
+ integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
+
cookiejar@^2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c"
@@ -7304,6 +7372,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
+cross-env@10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-10.0.0.tgz#ba25823cfa1ed6af293dcded8796fa16cd162456"
+ integrity sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==
+ dependencies:
+ "@epic-web/invariant" "^1.0.0"
+ cross-spawn "^7.0.6"
+
cross-fetch@3.0.6:
version "3.0.6"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c"
@@ -7357,6 +7433,15 @@ cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+cross-spawn@^7.0.6:
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
crypt@~0.0.1:
version "0.0.2"
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
@@ -8309,6 +8394,13 @@ debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
dependencies:
ms "2.1.2"
+debug@^4.4.0:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
decamelize@^1.1.1, decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -8331,6 +8423,13 @@ decompress-response@^4.2.0:
dependencies:
mimic-response "^2.0.0"
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
deep-extend@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f"
@@ -8630,15 +8729,12 @@ domhandler@^4.0.0, domhandler@^4.1.0:
dependencies:
domelementtype "^2.2.0"
-domino@^2.1.6:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe"
- integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==
-
-dompurify@2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.3.tgz#f4133af0e6a50297fc8874e2eaedc13a3c308c03"
- integrity sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==
+dompurify@3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.1.tgz#c7e1ddebfe3301eacd6c0c12a4af284936dbbb86"
+ integrity sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==
+ optionalDependencies:
+ "@types/trusted-types" "^2.0.7"
domutils@1.5.1:
version "1.5.1"
@@ -8692,6 +8788,15 @@ dtrace-provider@~0.8:
dependencies:
nan "^2.14.0"
+dunder-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
+ integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+ dependencies:
+ call-bind-apply-helpers "^1.0.1"
+ es-errors "^1.3.0"
+ gopd "^1.2.0"
+
duplexer@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
@@ -9021,6 +9126,33 @@ es-abstract@^1.17.0-next.1:
string.prototype.trimleft "^2.1.0"
string.prototype.trimright "^2.1.0"
+es-define-property@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
+ integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+ integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+ dependencies:
+ es-errors "^1.3.0"
+
+es-set-tostringtag@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
+ integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+ dependencies:
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
es-to-primitive@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
@@ -9396,6 +9528,11 @@ events@^3.0.0:
resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+events@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+ integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
@@ -9482,6 +9619,11 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
expand-tilde@^2.0.0, expand-tilde@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
@@ -9509,16 +9651,16 @@ express-brute@1.0.1:
long-timeout "~0.1.1"
underscore "~1.8.3"
-express-session@1.17.3:
- version "1.17.3"
- resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.3.tgz#14b997a15ed43e5949cb1d073725675dd2777f36"
- integrity sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==
+express-session@1.18.2:
+ version "1.18.2"
+ resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.18.2.tgz#34db6252611b57055e877036eea09b4453dec5d8"
+ integrity sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A==
dependencies:
- cookie "0.4.2"
- cookie-signature "1.0.6"
+ cookie "0.7.2"
+ cookie-signature "1.0.7"
debug "2.6.9"
depd "~2.0.0"
- on-headers "~1.0.2"
+ on-headers "~1.1.0"
parseurl "~1.3.3"
safe-buffer "5.2.1"
uid-safe "~2.1.5"
@@ -9704,6 +9846,13 @@ fast-safe-stringify@^2.1.1:
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
+fast-xml-parser@^5.0.7:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.3.3.tgz#84b678e44eb81207c8585795152b4b1c94738b4d"
+ integrity sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==
+ dependencies:
+ strnum "^2.1.0"
+
fastq@^1.6.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
@@ -9809,6 +9958,11 @@ file-type@15.0.1:
token-types "^2.0.0"
typedarray-to-buffer "^3.1.5"
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
file@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/file/-/file-0.2.2.tgz#c3dfd8f8cf3535ae455c2b423c2e52635d76b4d3"
@@ -10021,10 +10175,10 @@ follow-redirects@1.5.10:
dependencies:
debug "=3.1.0"
-follow-redirects@^1.14.9:
- version "1.15.2"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
- integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+follow-redirects@^1.15.6:
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
+ integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
for-each@^0.3.3:
version "0.3.3"
@@ -10077,6 +10231,17 @@ form-data@^4.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
+form-data@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053"
+ integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
+ hasown "^2.0.2"
+ mime-types "^2.1.12"
+
form-data@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
@@ -10118,7 +10283,7 @@ fragment-cache@^0.2.1:
dependencies:
map-cache "^0.2.2"
-fresh@0.5.2:
+fresh@0.5.2, fresh@~0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
@@ -10151,6 +10316,15 @@ fs-extra@9.0.1, fs-extra@^9.0.1:
jsonfile "^6.0.1"
universalify "^1.0.0"
+fs-extra@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs-extra@^8.0.1:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@@ -10160,16 +10334,6 @@ fs-extra@^8.0.1:
jsonfile "^4.0.0"
universalify "^0.1.0"
-fs-extra@^9.0.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
- integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
- dependencies:
- at-least-node "^1.0.0"
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
fs-minipass@^1.2.5:
version "1.2.6"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
@@ -10232,26 +10396,16 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
-gauge@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395"
- integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==
- dependencies:
- aproba "^1.0.3 || ^2.0.0"
- color-support "^1.1.2"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.1"
- object-assign "^4.1.1"
- signal-exit "^3.0.0"
- string-width "^4.2.3"
- strip-ansi "^6.0.1"
- wide-align "^1.1.2"
-
gauge@^4.0.3:
version "4.0.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
@@ -10320,6 +10474,30 @@ get-intrinsic@^1.1.3:
has "^1.0.3"
has-symbols "^1.0.3"
+get-intrinsic@^1.2.6:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+ dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ es-define-property "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.1.1"
+ function-bind "^1.1.2"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
+ has-symbols "^1.1.0"
+ hasown "^2.0.2"
+ math-intrinsics "^1.1.0"
+
+get-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
+ integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-object-atoms "^1.0.0"
+
get-stream@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
@@ -10358,6 +10536,11 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
+
glob-parent@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
@@ -10533,6 +10716,11 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
+gopd@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
+ integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0:
version "4.2.2"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
@@ -10736,6 +10924,11 @@ has-symbols@^1.0.2, has-symbols@^1.0.3:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+has-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
+ integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
has-tostringtag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
@@ -10743,6 +10936,13 @@ has-tostringtag@^1.0.0:
dependencies:
has-symbols "^1.0.2"
+has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+ dependencies:
+ has-symbols "^1.0.3"
+
has-unicode@^2.0.0, has-unicode@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
@@ -10807,6 +11007,13 @@ hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
he@1.2.0, he@^1.1.0, he@^1.1.1, he@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -11051,6 +11258,14 @@ http-proxy-agent@^4.0.1:
agent-base "6"
debug "4"
+http-proxy-agent@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
+ integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
+ dependencies:
+ agent-base "^7.1.0"
+ debug "^4.3.4"
+
http-signature@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
@@ -11073,6 +11288,14 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
+https-proxy-agent@^7.0.0:
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
+ integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
+ dependencies:
+ agent-base "^7.1.2"
+ debug "4"
+
human-signals@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
@@ -11142,13 +11365,20 @@ iconv-lite@^0.5.0:
dependencies:
safer-buffer ">= 2.1.2 < 3"
-iconv-lite@^0.6.2, iconv-lite@^0.6.3:
+iconv-lite@^0.6.2:
version "0.6.3"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
+iconv-lite@^0.7.0:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.1.tgz#d4af1d2092f2bb05aab6296e5e7cd286d2f15432"
+ integrity sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
icss-utils@^4.0.0, icss-utils@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
@@ -11161,6 +11391,11 @@ ieee754@1.1.13, ieee754@^1.1.13, ieee754@^1.1.4:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
iferr@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
@@ -12311,10 +12546,10 @@ jmespath@0.16.0:
resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076"
integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==
-js-base64@3.7.4:
- version "3.7.4"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.4.tgz#af95b20f23efc8034afd2d1cc5b9d0adf7419037"
- integrity sha512-wpM/wi20Tl+3ifTyi0RdDckS4YTD4Lf953mBRrpG8547T7hInHNPEj8+ck4gB8VDcGyeAWFK++Wb/fU1BeavKQ==
+js-base64@3.7.8:
+ version "3.7.8"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.8.tgz#af44496bc09fa178ed9c4adf67eb2b46f5c6d2a4"
+ integrity sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==
js-beautify@1.13.5:
version "1.13.5"
@@ -12515,7 +12750,23 @@ jsonify@^0.0.1:
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978"
integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==
-jsonwebtoken@9.0.0, jsonwebtoken@^9.0.0:
+jsonwebtoken@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2"
+ integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==
+ dependencies:
+ jws "^4.0.1"
+ lodash.includes "^4.3.0"
+ lodash.isboolean "^3.0.3"
+ lodash.isinteger "^4.0.4"
+ lodash.isnumber "^3.0.3"
+ lodash.isplainobject "^4.0.6"
+ lodash.isstring "^4.0.1"
+ lodash.once "^4.0.0"
+ ms "^2.1.1"
+ semver "^7.5.4"
+
+jsonwebtoken@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d"
integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==
@@ -12552,6 +12803,15 @@ jwa@^1.4.1:
ecdsa-sig-formatter "1.0.11"
safe-buffer "^5.0.1"
+jwa@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804"
+ integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==
+ dependencies:
+ buffer-equal-constant-time "^1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
jws@3.x.x, jws@^3.1.3, jws@^3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
@@ -12560,6 +12820,14 @@ jws@3.x.x, jws@^3.1.3, jws@^3.2.2:
jwa "^1.4.1"
safe-buffer "^5.0.1"
+jws@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690"
+ integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==
+ dependencies:
+ jwa "^2.0.1"
+ safe-buffer "^5.0.1"
+
katex@0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/katex/-/katex-0.12.0.tgz#2fb1c665dbd2b043edcf8a1f5c555f46beaa0cb9"
@@ -12927,6 +13195,36 @@ lodash.clonedeep@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
+lodash.includes@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
+ integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==
+
+lodash.isboolean@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
+ integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
+
+lodash.isinteger@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
+ integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==
+
+lodash.isnumber@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
+ integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+ integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
+
lodash.kebabcase@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
@@ -12937,7 +13235,7 @@ lodash.memoize@^4.1.2:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
-lodash.once@^4.1.1:
+lodash.once@^4.0.0, lodash.once@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
@@ -13041,6 +13339,11 @@ long@^4.0.0:
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
+long@^5.2.0:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83"
+ integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==
+
long@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f"
@@ -13092,6 +13395,11 @@ lru-cache@^7.14.1:
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea"
integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==
+lru.min@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/lru.min/-/lru.min-1.1.3.tgz#c8c3d001dfb4cbe5b8d1f4bea207d4a320e5d76f"
+ integrity sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==
+
luxon@1.25.0:
version "1.25.0"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.25.0.tgz#d86219e90bc0102c0eb299d65b2f5e95efe1fe72"
@@ -13112,7 +13420,7 @@ make-dir@^3.0.0:
dependencies:
semver "^6.0.0"
-make-dir@^3.0.2, make-dir@^3.1.0:
+make-dir@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
@@ -13277,6 +13585,11 @@ math-expression-evaluator@^1.2.14:
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw=
+math-intrinsics@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
+ integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
mathjax@3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/mathjax/-/mathjax-3.2.2.tgz#c754d7b46a679d7f3fa03543d6b8bf124ddf9f6b"
@@ -13436,10 +13749,10 @@ mime-db@1.52.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-"mime-db@>= 1.40.0 < 2":
- version "1.41.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0"
- integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw==
+"mime-db@>= 1.43.0 < 2":
+ version "1.54.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
+ integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
mime-types@2.1.35, mime-types@~2.1.34:
version "2.1.35"
@@ -13492,6 +13805,11 @@ mimic-response@^2.0.0:
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
mini-css-extract-plugin@0.11.3:
version "0.11.3"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6"
@@ -13542,16 +13860,16 @@ minimist@^1.1.1, minimist@^1.2.0:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+minimist@^1.2.3, minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-minimist@^1.2.6:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
minipass-collect@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
@@ -13672,6 +13990,11 @@ mkdirp-classic@^0.5.2:
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b"
integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==
+mkdirp-classic@^0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
mkdirp@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
@@ -13727,19 +14050,19 @@ moment-timezone-data-webpack-plugin@1.3.0:
find-cache-dir "^3.0.0"
make-dir "^3.0.0"
-moment-timezone@0.5.40:
- version "0.5.40"
- resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.40.tgz#c148f5149fd91dd3e29bf481abc8830ecba16b89"
- integrity sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==
+moment-timezone@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.6.0.tgz#c5a6519171f31a64739ea75d33f5c136c08ff608"
+ integrity sha512-ldA5lRNm3iJCWZcBCab4pnNL3HSZYXVb/3TYr75/1WCTWYuTqYUb5f/S384pncYjJ88lbO8Z4uPDvmoluHJc8Q==
dependencies:
- moment ">= 2.9.0"
+ moment "^2.29.4"
-moment@2.29.4:
- version "2.29.4"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
- integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
+moment@2.30.1, moment@^2.29.4:
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
+ integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
-"moment@>= 2.9.0", moment@^2.10.2, moment@^2.19.2, moment@^2.22.1:
+moment@^2.10.2, moment@^2.19.2, moment@^2.22.1:
version "2.24.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
@@ -13789,7 +14112,7 @@ ms@2.1.2, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-ms@2.1.3, ms@^2.0.0, ms@^2.1.3:
+ms@2.1.3, ms@^2.0.0, ms@^2.1.3, ms@~2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -13826,16 +14149,17 @@ mv@~2:
ncp "~2.0.0"
rimraf "~2.4.0"
-mysql2@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.1.0.tgz#7d7b6c9e368bd5f74a82ce150edc32401a05d756"
- integrity sha512-woMeIog21X72RcFLhE/xajhUdnwRMd6Oq16S7/O2qJ5lPUDfFwgSW+xhx7TjzcM8PU3q+dVsryIaDi+HyQR/0A==
+mysql2@3.16.0:
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.16.0.tgz#f296336b3ddba00fe061c7ca7ada2ddf8689c17e"
+ integrity sha512-AEGW7QLLSuSnjCS4pk3EIqOmogegmze9h8EyrndavUQnIUcfkVal/sK7QznE+a3bc6rzPbAiui9Jcb+96tPwYA==
dependencies:
+ aws-ssl-profiles "^1.1.1"
denque "^2.1.0"
generate-function "^2.3.1"
- iconv-lite "^0.6.3"
+ iconv-lite "^0.7.0"
long "^5.2.1"
- lru-cache "^7.14.1"
+ lru.min "^1.0.0"
named-placeholders "^1.1.3"
seq-queue "^0.0.5"
sqlstring "^2.3.2"
@@ -13884,6 +14208,11 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+napi-build-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e"
+ integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==
+
native-duplexpair@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/native-duplexpair/-/native-duplexpair-1.0.0.tgz#7899078e64bf3c8a3d732601b3d40ff05db58fa0"
@@ -13923,6 +14252,11 @@ negotiator@0.6.3, negotiator@^0.6.2:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+negotiator@~0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
+ integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
+
neo-async@^2.5.0, neo-async@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
@@ -13966,10 +14300,17 @@ node-2fa@1.1.2:
notp "^2.0.3"
thirty-two "0.0.2"
-node-addon-api@^4.2.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
- integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
+node-abi@^3.3.0:
+ version "3.85.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.85.0.tgz#b115d575e52b2495ef08372b058e13d202875a7d"
+ integrity sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==
+ dependencies:
+ semver "^7.3.5"
+
+node-addon-api@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558"
+ integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
node-cache@5.1.2:
version "5.1.2"
@@ -14003,17 +14344,10 @@ node-fetch@^2.6.1:
dependencies:
whatwg-url "^5.0.0"
-node-fetch@^2.6.7:
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
- integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
- dependencies:
- whatwg-url "^5.0.0"
-
-node-forge@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
- integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
+node-forge@^1.2.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.3.tgz#0ad80f6333b3a0045e827ac20b7f735f93716751"
+ integrity sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==
node-gyp-build@~3.7.0:
version "3.7.0"
@@ -14041,20 +14375,20 @@ node-int64@^0.4.0:
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
-node-jose@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/node-jose/-/node-jose-2.0.0.tgz#541c6b52c387a3f18fc06cd502baad759af9c470"
- integrity sha512-j8zoFze1gijl8+DK/dSXXqX7+o2lMYv1XS+ptnXgGV/eloQaqq1YjNtieepbKs9jBS4WTnMOqyKSaQuunJzx0A==
+node-jose@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/node-jose/-/node-jose-2.2.0.tgz#b64f3225ad6bec328509a420800de597ba2bf3ed"
+ integrity sha512-XPCvJRr94SjLrSIm4pbYHKLEaOsDvJCpyFw/6V/KK/IXmyZ6SFBzAUDO9HQf4DB/nTEFcRGH87mNciOP23kFjw==
dependencies:
base64url "^3.0.1"
- buffer "^5.5.0"
+ buffer "^6.0.3"
es6-promise "^4.2.8"
- lodash "^4.17.15"
- long "^4.0.0"
- node-forge "^0.10.0"
- pako "^1.0.11"
+ lodash "^4.17.21"
+ long "^5.2.0"
+ node-forge "^1.2.1"
+ pako "^2.0.4"
process "^0.11.10"
- uuid "^3.3.3"
+ uuid "^9.0.0"
node-libs-browser@^2.2.1:
version "2.2.1"
@@ -14260,16 +14594,6 @@ npmlog@^4.0.2:
gauge "~2.7.3"
set-blocking "~2.0.0"
-npmlog@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
- integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
- dependencies:
- are-we-there-yet "^2.0.0"
- console-control-strings "^1.1.0"
- gauge "^3.0.0"
- set-blocking "^2.0.0"
-
npmlog@^6.0.0:
version "6.0.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
@@ -14319,6 +14643,11 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+oauth@0.10.x:
+ version "0.10.2"
+ resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.10.2.tgz#fd7139b0ce1a1037bd11fa4e236afc588132418c"
+ integrity sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q==
+
oauth@0.9.15, oauth@0.9.x:
version "0.9.15"
resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1"
@@ -14466,10 +14795,10 @@ on-finished@^2.3.0, on-finished@~2.3.0:
dependencies:
ee-first "1.1.1"
-on-headers@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
- integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+on-headers@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65"
+ integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==
once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
@@ -14585,7 +14914,7 @@ os-locale@^1.4.0:
dependencies:
lcid "^1.0.0"
-os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+os-tmpdir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
@@ -14682,16 +15011,16 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-packet-reader@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
- integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
-
-pako@1.0.11, pako@^1.0.11:
+pako@1.0.11:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+pako@^2.0.4:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86"
+ integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==
+
pako@~1.0.5:
version "1.0.10"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
@@ -14814,19 +15143,19 @@ pascalcase@^0.1.1:
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-passport-auth0@1.4.3:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/passport-auth0/-/passport-auth0-1.4.3.tgz#8034b5fbf75706e95b1b97627c4caa18af6f96c5"
- integrity sha512-jTOY8xV0OZfhZ32gs74p64CCkOSdVohMFIqLE46/ji3qUkA5mBzfOr5FMGXnraLpVzl6Phkn0TbxYbUIll3dxA==
+passport-auth0@1.4.5:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/passport-auth0/-/passport-auth0-1.4.5.tgz#83e3b7f9cdd8a5d3231985573d89ea6e6c894bea"
+ integrity sha512-pfAvcAoR1HjKFygq0gGEHCy+9eqXr1CnfN3yD4kuUj1p4ek7P3s4bMn13+Q1FajqDNA8lD0Vvy6j8Od1oqF9Dg==
dependencies:
- axios "^0.27.2"
+ axios "^1.7.4"
passport-oauth "^1.0.0"
passport-oauth2 "^1.6.0"
-passport-azure-ad@4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/passport-azure-ad/-/passport-azure-ad-4.3.4.tgz#2f1c3f64003df974b60390ece70d106336336f46"
- integrity sha512-veG3IT/ovfFaMK3IREcVGLYa8nx/91s10eeMcfJmvofHG7Uv6FVElrnDA2E1CgQdE6hdWzG28UV8ITw6Qhocxg==
+passport-azure-ad@4.3.5:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/passport-azure-ad/-/passport-azure-ad-4.3.5.tgz#107d709409170478d1a66ec1efb4c094dd3d321b"
+ integrity sha512-LBpXEght7hCMuMNFK4oegdN0uPBa3lpDMy71zQoB0zPg1RrGwdzpjwTiN1WzN0hY77fLyjz9tBr3TGAxnSgtEg==
dependencies:
async "^3.2.3"
base64url "^3.0.0"
@@ -14835,7 +15164,7 @@ passport-azure-ad@4.3.4:
https-proxy-agent "^5.0.0"
jws "^3.1.3"
lodash "^4.11.2"
- node-jose "^2.0.0"
+ node-jose "^2.2.0"
oauth "0.9.15"
passport "^0.6.0"
valid-url "^1.0.6"
@@ -14941,13 +15270,13 @@ passport-oauth2@1.2.0:
passport-strategy "1.x.x"
uid2 "0.0.x"
-passport-oauth2@1.6.1, passport-oauth2@^1.6.0:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.6.1.tgz#c5aee8f849ce8bd436c7f81d904a3cd1666f181b"
- integrity sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==
+passport-oauth2@1.8.0, passport-oauth2@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.8.0.tgz#55725771d160f09bbb191828d5e3d559eee079c8"
+ integrity sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==
dependencies:
base64url "3.x.x"
- oauth "0.9.x"
+ oauth "0.10.x"
passport-strategy "1.x.x"
uid2 "0.0.x"
utils-merge "1.x.x"
@@ -14963,6 +15292,17 @@ passport-oauth2@1.x.x, passport-oauth2@^1.4.0, passport-oauth2@^1.5.0:
uid2 "0.0.x"
utils-merge "1.x.x"
+passport-oauth2@^1.6.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.6.1.tgz#c5aee8f849ce8bd436c7f81d904a3cd1666f181b"
+ integrity sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==
+ dependencies:
+ base64url "3.x.x"
+ oauth "0.9.x"
+ passport-strategy "1.x.x"
+ uid2 "0.0.x"
+ utils-merge "1.x.x"
+
passport-oauth@1.0.0, passport-oauth@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/passport-oauth/-/passport-oauth-1.0.0.tgz#90aff63387540f02089af28cdad39ea7f80d77df"
@@ -14980,12 +15320,12 @@ passport-okta-oauth@0.0.1:
pkginfo "0.2.x"
uid2 "0.0.3"
-passport-openidconnect@0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/passport-openidconnect/-/passport-openidconnect-0.1.1.tgz#83921ff5f87f634079f65262dada834af1972244"
- integrity sha512-r0QJiWEzwCg2MeCIXVP5G6YxVRqnEsZ2HpgKRthZ9AiQHJrgGUytXpsdcGF9BRwd3yMrEesb/uG/Yxb86rrY0g==
+passport-openidconnect@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/passport-openidconnect/-/passport-openidconnect-0.1.2.tgz#86c830a96cfc2cf7e0273d3eba2828ab6abb3166"
+ integrity sha512-JX3rTyW+KFZ/E9OF/IpXJPbyLO9vGzcmXB5FgSP2jfL3LGKJPdV7zUE8rWeKeeI/iueQggOeFa3onrCmhxXZTg==
dependencies:
- oauth "0.9.x"
+ oauth "0.10.x"
passport-strategy "1.x.x"
passport-saml@3.2.4:
@@ -15001,13 +15341,12 @@ passport-saml@3.2.4:
xml2js "^0.4.23"
xmlbuilder "^15.1.1"
-passport-slack-oauth2@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/passport-slack-oauth2/-/passport-slack-oauth2-1.1.1.tgz#d831ffc3f1e968fcc3622e6ecf41643c8d8f9cbc"
- integrity sha512-xC+yMKFXximP5TzSNt4lr9TP78MMos5B+acC7bJNCxBAVNyL9e02AEpVpVtyMIqHv4nNZnv1vyoOb50J8VCcZQ==
+passport-slack-oauth2@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/passport-slack-oauth2/-/passport-slack-oauth2-1.2.0.tgz#d214a698b55a137393636a26827747f6c436dab4"
+ integrity sha512-SeQl8uPoi4ajhzgIvwQM7gW/6yPrKH0hPFjxcP/426SOZ0M9ZNDOfSa32q3NTw7KcwYOTjyWX/2xdJndQE7Rkg==
dependencies:
- passport-oauth2 "^1.5.0"
- pkginfo "^0.4.1"
+ passport-oauth2 "^1.7.0"
passport-strategy@1.x.x, passport-strategy@^1.0.0:
version "1.0.0"
@@ -15039,25 +15378,24 @@ passport@^0.6.0:
pause "0.0.1"
utils-merge "^1.0.1"
-patch-package@8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61"
- integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==
+patch-package@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.1.tgz#79d02f953f711e06d1f8949c8a13e5d3d7ba1a60"
+ integrity sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==
dependencies:
"@yarnpkg/lockfile" "^1.1.0"
chalk "^4.1.2"
ci-info "^3.7.0"
cross-spawn "^7.0.3"
find-yarn-workspace-root "^2.0.0"
- fs-extra "^9.0.0"
+ fs-extra "^10.0.0"
json-stable-stringify "^1.0.2"
klaw-sync "^6.0.0"
minimist "^1.2.6"
open "^7.4.2"
- rimraf "^2.6.3"
semver "^7.5.3"
slash "^2.0.0"
- tmp "^0.0.33"
+ tmp "^0.2.4"
yaml "^2.2.2"
path-browserify@0.0.1:
@@ -15203,25 +15541,25 @@ persistgraphql@^0.3.11:
"@types/graphql" "^0.9.0"
"@types/isomorphic-fetch" "0.0.34"
-pg-connection-string@0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7"
- integrity sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=
+pg-cloudflare@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz#a1f3d226bab2c45ae75ea54d65ec05ac6cfafbef"
+ integrity sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==
pg-connection-string@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.3.0.tgz#c13fcb84c298d0bfa9ba12b40dd6c23d946f55d6"
integrity sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w==
-pg-connection-string@^2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34"
- integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==
+pg-connection-string@^2.9.1:
+ version "2.9.1"
+ resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.9.1.tgz#bb1fd0011e2eb76ac17360dc8fa183b2d3465238"
+ integrity sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==
-pg-cursor@^2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/pg-cursor/-/pg-cursor-2.8.0.tgz#7cb0929ad33ea68fe15d25b0de34acd611e189d5"
- integrity sha512-LrOaEHK+R1C40e+xeri3FTRY/VKp9uTOCVsKtGB7LJ57qbeaphYvWjbVly8AesdT1GfHXYcAnVdExKhW7DKOvA==
+pg-cursor@^2.15.3:
+ version "2.15.3"
+ resolved "https://registry.yarnpkg.com/pg-cursor/-/pg-cursor-2.15.3.tgz#19f05739ff95366eed28e80191a6321d0e036395"
+ integrity sha512-eHw63TsiGtFEfAd7tOTZ+TLy+i/2ePKS20H84qCQ+aQ60pve05Okon9tKMC+YN3j6XyeFoHnaim7Lt9WVafQsA==
pg-format@^1.0.2:
version "1.0.4"
@@ -15240,50 +15578,39 @@ pg-int8@1.0.1:
resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
-pg-packet-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz#e45c3ae678b901a2873af1e17b92d787962ef914"
- integrity sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg==
-
-pg-pool@^2.0.10:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.10.tgz#842ee23b04e86824ce9d786430f8365082d81c4a"
- integrity sha512-qdwzY92bHf3nwzIUcj+zJ0Qo5lpG/YxchahxIN8+ZVmXqkahKXsnl2aiJPHLYN9o5mB/leG+Xh6XKxtP7e0sjg==
-
-pg-pool@^3.5.2:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.5.2.tgz#ed1bed1fb8d79f1c6fd5fb1c99e990fbf9ddf178"
- integrity sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==
+pg-pool@^3.10.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.10.1.tgz#481047c720be2d624792100cac1816f8850d31b2"
+ integrity sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==
-pg-protocol@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833"
- integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==
+pg-protocol@^1.10.3:
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.10.3.tgz#ac9e4778ad3f84d0c5670583bab976ea0a34f69f"
+ integrity sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==
-pg-pubsub@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/pg-pubsub/-/pg-pubsub-0.5.0.tgz#5469737af32ac6d13fc3153dc3944f55da3d8840"
- integrity sha512-lfNMbiVt6d8yomYOWV9+smMdrdUUj3Q8Uq9SiNL+3q2G+jjjjaT9+FKDudw9VEN94pYmCtJzhXz/BlaD4LgyZg==
+pg-pubsub@0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/pg-pubsub/-/pg-pubsub-0.8.1.tgz#aaa07f630cb75000975bb4881883d4cc33f51b5d"
+ integrity sha512-b/EHOwCrag4isghc4XgRipeAjfgyNg1DiL3Dwwh1Ojp91Lriltn5eg2nSWjBe4pzcFzhTM6HiB7LOG9NN1nx5g==
dependencies:
- "@types/pg" "^7.4.14"
- pg "^7.4.3"
+ pg "^8.7.3"
pg-format "^1.0.2"
- promised-retry "^0.3.0"
- verror "^1.10.0"
+ pony-cause "^2.1.8"
+ promised-retry "^0.5.0"
-pg-query-stream@4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/pg-query-stream/-/pg-query-stream-4.3.0.tgz#93deb1732b655d328496abe191ca33fdc1e144e6"
- integrity sha512-+Eer4Y1e43rAaphFNu9/VJKn9nKTApFKCSwVtDjXYnuO4QYqWHOEkApmGJv8gvaU5T6fcuEtjsN24gk+Rx7X9A==
+pg-query-stream@4.10.3:
+ version "4.10.3"
+ resolved "https://registry.yarnpkg.com/pg-query-stream/-/pg-query-stream-4.10.3.tgz#ed4461c76a1115a36581614ed1897ef4ecee375a"
+ integrity sha512-h2utrzpOIzeT9JfaqfvBbVuvCfBjH86jNfVrGGTbyepKAIOyTfDew0lAt8bbJjs9n/I5bGDl7S2sx6h5hPyJxw==
dependencies:
- pg-cursor "^2.8.0"
+ pg-cursor "^2.15.3"
-pg-tsquery@8.4.1:
- version "8.4.1"
- resolved "https://registry.yarnpkg.com/pg-tsquery/-/pg-tsquery-8.4.1.tgz#7346aefd90983f321c59382e1468f192b1b10894"
- integrity sha512-GoeRhw6o4Bpt7awdUwHq6ITOw40IWSrb5IC2qR6dF9ZECtHFGdSpnjHOl9Rumd8Rx12kLI2T9TGV0gvxD5pFgA==
+pg-tsquery@8.4.2:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/pg-tsquery/-/pg-tsquery-8.4.2.tgz#f28e6242f15f4d8535ac08a0f9083ce04e42e1e4"
+ integrity sha512-waJSlBIKE+shDhuDpuQglTH6dG5zakDhnrnxu8XB8V5c7yoDSuy4pOxY6t2dyoxTjaKMcMmlByJN7n9jx9eqMA==
-pg-types@^2.1.0:
+pg-types@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
@@ -15294,39 +15621,25 @@ pg-types@^2.1.0:
postgres-date "~1.0.4"
postgres-interval "^1.1.0"
-pg@8.9.0:
- version "8.9.0"
- resolved "https://registry.yarnpkg.com/pg/-/pg-8.9.0.tgz#73c5d77a854d36b0e185450dacb8b90c669e040b"
- integrity sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==
- dependencies:
- buffer-writer "2.0.0"
- packet-reader "1.0.0"
- pg-connection-string "^2.5.0"
- pg-pool "^3.5.2"
- pg-protocol "^1.6.0"
- pg-types "^2.1.0"
- pgpass "1.x"
-
-pg@^7.4.3:
- version "7.18.1"
- resolved "https://registry.yarnpkg.com/pg/-/pg-7.18.1.tgz#67f59c47a99456fcb34f9fe53662b79d4a992f6d"
- integrity sha512-1KtKBKg/zWrjEEv//klBbVOPGucuc7HHeJf6OEMueVcUeyF3yueHf+DvhVwBjIAe9/97RAydO/lWjkcMwssuEw==
- dependencies:
- buffer-writer "2.0.0"
- packet-reader "1.0.0"
- pg-connection-string "0.1.3"
- pg-packet-stream "^1.1.0"
- pg-pool "^2.0.10"
- pg-types "^2.1.0"
- pgpass "1.x"
- semver "4.3.2"
-
-pgpass@1.x:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306"
- integrity sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=
+pg@8.16.3, pg@^8.7.3:
+ version "8.16.3"
+ resolved "https://registry.yarnpkg.com/pg/-/pg-8.16.3.tgz#160741d0b44fdf64680e45374b06d632e86c99fd"
+ integrity sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==
dependencies:
- split "^1.0.0"
+ pg-connection-string "^2.9.1"
+ pg-pool "^3.10.1"
+ pg-protocol "^1.10.3"
+ pg-types "2.2.0"
+ pgpass "1.0.5"
+ optionalDependencies:
+ pg-cloudflare "^1.2.7"
+
+pgpass@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
+ integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
+ dependencies:
+ split2 "^4.1.0"
picomatch@^2.0.4:
version "2.0.7"
@@ -15414,11 +15727,6 @@ pkginfo@0.2.x, pkginfo@^0.2.3:
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.2.3.tgz#7239c42a5ef6c30b8f328439d9b9ff71042490f8"
integrity sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg=
-pkginfo@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"
- integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=
-
pleeease-filters@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/pleeease-filters/-/pleeease-filters-4.0.0.tgz#6632b2fb05648d2758d865384fbced79e1ccaec7"
@@ -15427,6 +15735,16 @@ pleeease-filters@^4.0.0:
onecolor "^3.0.4"
postcss "^6.0.1"
+pony-cause@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-1.1.1.tgz#f795524f83bebbf1878bd3587b45f69143cbf3f9"
+ integrity sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==
+
+pony-cause@^2.1.8:
+ version "2.1.11"
+ resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-2.1.11.tgz#d69a20aaccdb3bdb8f74dd59e5c68d8e6772e4bd"
+ integrity sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==
+
posix-character-classes@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@@ -16423,6 +16741,24 @@ postinstall-postinstall@2.1.0:
resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3"
integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==
+prebuild-install@^7.1.1:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec"
+ integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==
+ dependencies:
+ detect-libc "^2.0.0"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.3"
+ mkdirp-classic "^0.5.3"
+ napi-build-utils "^2.0.0"
+ node-abi "^3.3.0"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^4.0.0"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+
precond@0.2:
version "0.2.3"
resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac"
@@ -16523,10 +16859,12 @@ promise@^7.0.1, promise@^7.1.1:
dependencies:
asap "~2.0.3"
-promised-retry@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/promised-retry/-/promised-retry-0.3.0.tgz#fc3930ca1f76c4d1e559b7368b1f7e953ae0d6ad"
- integrity sha512-oj7GS7q3g381QuIR8mMJeJe5GSKm16xXL7Q+7/+5MH2mlWBHXn7dUYmS/BBjGkoBm9M8h2KcVifj3vRZ62AB5A==
+promised-retry@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/promised-retry/-/promised-retry-0.5.0.tgz#e80f221c4a55410c98c751289e114f7cc28aa472"
+ integrity sha512-jbYvN6UGE+/3E1g0JmgDPchUc+4VI4cBaPjdr2Lso22xfFqut2warEf6IhWuhPJKbJYVOQAyCt2Jx+01ORCItg==
+ dependencies:
+ pony-cause "^1.1.1"
prompts@^2.0.1:
version "2.2.1"
@@ -16566,6 +16904,11 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
@@ -16581,11 +16924,6 @@ psl@^1.1.24, psl@^1.1.28:
resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2"
integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==
-psl@^1.1.33:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
- integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
-
public-encrypt@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
@@ -16616,17 +16954,17 @@ pug-attrs@^3.0.0:
js-stringify "^1.0.2"
pug-runtime "^3.0.0"
-pug-code-gen@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce"
- integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==
+pug-code-gen@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.3.tgz#58133178cb423fe1716aece1c1da392a75251520"
+ integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==
dependencies:
constantinople "^4.0.1"
doctypes "^1.1.0"
js-stringify "^1.0.2"
pug-attrs "^3.0.0"
- pug-error "^2.0.0"
- pug-runtime "^3.0.0"
+ pug-error "^2.1.0"
+ pug-runtime "^3.0.1"
void-elements "^3.1.0"
with "^7.0.0"
@@ -16640,6 +16978,11 @@ pug-error@^2.0.0:
resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5"
integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==
+pug-error@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.1.0.tgz#17ea37b587b6443d4b8f148374ec27b54b406e55"
+ integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==
+
pug-filters@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e"
@@ -16783,12 +17126,12 @@ pug-walk@^2.0.0:
resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe"
integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==
-pug@3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535"
- integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==
+pug@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.3.tgz#e18324a314cd022883b1e0372b8af3a1a99f7597"
+ integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==
dependencies:
- pug-code-gen "^3.0.2"
+ pug-code-gen "^3.0.3"
pug-filters "^4.0.0"
pug-lexer "^5.0.1"
pug-linker "^4.0.0"
@@ -16827,10 +17170,10 @@ punycode@1.3.2:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-punycode@2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
- integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+punycode@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1"
@@ -17367,10 +17710,10 @@ relay-runtime@10.0.1:
"@babel/runtime" "^7.0.0"
fbjs "^1.0.0"
-remove-markdown@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.5.0.tgz#a596264bbd60b9ceab2e2ae86e5789eee91aee32"
- integrity sha512-x917M80K97K5IN1L8lUvFehsfhR8cYjGQ/yAMRI9E7JIKivtl5Emo5iD13DhMr+VojzMCiYk8V2byNPwT/oapg==
+remove-markdown@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.6.2.tgz#8e6a8d1b148569cc4df0404b60b0a42fb49840b5"
+ integrity sha512-EijDXJZbzpGbQBd852ViUzcqgpMujthM+SAEHiWCMcZonRbZ+xViWKLJA/vrwbDwYdxrs1aFDjpBhcGrZoJRGA==
remove-trailing-separator@^1.0.1:
version "1.1.0"
@@ -17749,17 +18092,12 @@ safe-buffer@*, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
-safe-buffer@5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
- integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
-
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@5.2.1:
+safe-buffer@5.2.1, safe-buffer@~5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -17958,22 +18296,15 @@ select@^1.1.2:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@4.3.2:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7"
- integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=
-
semver@7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-semver@7.3.8, semver@^7.3.8:
- version "7.3.8"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
- integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
- dependencies:
- lru-cache "^6.0.0"
+semver@7.7.3, semver@^7.5.4:
+ version "7.7.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
+ integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
semver@^6.0.0, semver@^6.1.0, semver@^6.3.0:
version "6.3.0"
@@ -17992,6 +18323,13 @@ semver@^7.3.5, semver@^7.3.7:
dependencies:
lru-cache "^6.0.0"
+semver@^7.3.8:
+ version "7.3.8"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
+ integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
+ dependencies:
+ lru-cache "^6.0.0"
+
semver@^7.5.3:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
@@ -18061,16 +18399,16 @@ serialize-javascript@^5.0.1:
dependencies:
randombytes "^2.1.0"
-serve-favicon@2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0"
- integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=
+serve-favicon@2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.1.tgz#b6482e81801707d5ed40fa547066e7e44fee47cc"
+ integrity sha512-JndLBslCLA/ebr7rS3d+/EKkzTsTi1jI2T9l+vHfAaGJ7A7NhtDpSZ0lx81HCNWnnE0yHncG+SSnVf9IMxOwXQ==
dependencies:
etag "~1.8.1"
- fresh "0.5.2"
- ms "2.1.1"
+ fresh "~0.5.2"
+ ms "~2.1.3"
parseurl "~1.3.2"
- safe-buffer "5.1.1"
+ safe-buffer "~5.2.1"
serve-static@1.14.1:
version "1.14.1"
@@ -18200,14 +18538,28 @@ signedsource@^1.0.0:
resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a"
integrity sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=
-simple-git@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.16.0.tgz#421773e24680f5716999cc4a1d60127b4b6a9dec"
- integrity sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==
+simple-concat@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+ integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
+ integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
+ dependencies:
+ decompress-response "^6.0.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-git@3.30.0:
+ version "3.30.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.30.0.tgz#260b816f369c298b60a509a319b4f0b9fadbd7e0"
+ integrity sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==
dependencies:
"@kwsites/file-exists" "^1.1.1"
"@kwsites/promise-deferred" "^1.1.1"
- debug "^4.3.4"
+ debug "^4.4.0"
simple-progress-webpack-plugin@1.1.2:
version "1.1.2"
@@ -18424,12 +18776,10 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
-split@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
- integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
- dependencies:
- through "2"
+split2@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
+ integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
sprintf-js@1.1.2, sprintf-js@^1.1.2:
version "1.1.2"
@@ -18441,13 +18791,14 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-sqlite3@5.1.4:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.4.tgz#35f83d368963168b324ad2f0fffce09f3b8723a7"
- integrity sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==
+sqlite3@5.1.7:
+ version "5.1.7"
+ resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7"
+ integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==
dependencies:
- "@mapbox/node-pre-gyp" "^1.0.0"
- node-addon-api "^4.2.0"
+ bindings "^1.5.0"
+ node-addon-api "^7.0.0"
+ prebuild-install "^7.1.1"
tar "^6.1.11"
optionalDependencies:
node-gyp "8.x"
@@ -18805,6 +19156,11 @@ striptags@3.2.0:
resolved "https://registry.yarnpkg.com/striptags/-/striptags-3.2.0.tgz#cc74a137db2de8b0b9a370006334161f7dd67052"
integrity sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==
+strnum@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.2.tgz#a5e00ba66ab25f9cafa3726b567ce7a49170937a"
+ integrity sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==
+
strtok3@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.0.3.tgz#bc81e225c19a909eab86538ff3348c4b3b0553d3"
@@ -18990,6 +19346,16 @@ tar-fs@2.1.1:
pump "^3.0.0"
tar-stream "^2.1.4"
+tar-fs@^2.0.0:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930"
+ integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.1.4"
+
tar-stream@^2.1.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
@@ -19185,11 +19551,6 @@ through2@^2.0.0:
readable-stream "~2.3.6"
xtend "~4.0.1"
-through@2:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
tildify@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a"
@@ -19217,12 +19578,10 @@ tiny-emitter@^2.0.0:
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
-tmp@^0.0.33:
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
- integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
- dependencies:
- os-tmpdir "~1.0.2"
+tmp@^0.2.4:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
+ integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
tmp@~0.2.1:
version "0.2.1"
@@ -19335,15 +19694,6 @@ tough-cookie@^3.0.1:
psl "^1.1.28"
punycode "^2.1.1"
-tough-cookie@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
- integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
- dependencies:
- psl "^1.1.33"
- punycode "^2.1.1"
- universalify "^0.1.2"
-
tough-cookie@~2.4.3:
version "2.4.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
@@ -19428,6 +19778,11 @@ tslib@^2.4.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
+tslib@^2.6.2, tslib@^2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
tslib@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e"
@@ -19445,17 +19800,17 @@ tunnel-agent@^0.6.0:
dependencies:
safe-buffer "^5.0.1"
-tunnel@0.0.6, tunnel@^0.0.6:
+tunnel@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
-turndown@7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/turndown/-/turndown-7.1.1.tgz#96992f2d9b40a1a03d3ea61ad31b5a5c751ef77f"
- integrity sha512-BEkXaWH7Wh7e9bd2QumhfAXk5g34+6QUmmWx+0q6ThaVOLuLUqsnkq35HQ5SBHSaxjSfSM7US5o4lhJNH7B9MA==
+turndown@7.2.2:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/turndown/-/turndown-7.2.2.tgz#9557642b54046c5912b3d433f34dd588de455a43"
+ integrity sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ==
dependencies:
- domino "^2.1.6"
+ "@mixmark-io/domino" "^2.2.0"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
@@ -19865,11 +20220,6 @@ uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
-uuid@^3.3.3:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
- integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-
uuid@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
@@ -19885,6 +20235,11 @@ uuid@^8.3.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea"
integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==
+uuid@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
+ integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+
v8-compile-cache@^2.0.3:
version "2.1.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
@@ -19951,7 +20306,7 @@ vendors@^1.0.0:
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==
-verror@1.10.0, verror@^1.10.0, verror@^1.8.1:
+verror@1.10.0, verror@^1.8.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
@@ -20455,7 +20810,7 @@ wide-align@^1.1.0:
dependencies:
string-width "^1.0.2 || 2"
-wide-align@^1.1.2, wide-align@^1.1.5:
+wide-align@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
@@ -20662,14 +21017,6 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-xml2js@0.4.19:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
- integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~9.0.1"
-
xml2js@0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d"
@@ -20678,6 +21025,14 @@ xml2js@0.4.4:
sax "0.6.x"
xmlbuilder ">=1.0.0"
+xml2js@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499"
+ integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~11.0.0"
+
xml2js@^0.4.19:
version "0.4.22"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02"
@@ -20710,11 +21065,6 @@ xmlbuilder@~11.0.0:
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
-xmlbuilder@~9.0.1:
- version "9.0.7"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
- integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
-
xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
@@ -20735,10 +21085,10 @@ xpath@0.0.32:
resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.32.tgz#1b73d3351af736e17ec078d6da4b8175405c48af"
integrity sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==
-xss@1.0.14:
- version "1.0.14"
- resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694"
- integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==
+xss@1.0.15:
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a"
+ integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==
dependencies:
commander "^2.20.3"
cssfilter "0.0.10"