2 Commits

Author SHA1 Message Date
6ad469a115 Minimum viable NTLM auth implementation
Added env variable "VITE_NTLM_AUTH", if true, login page will attempt NTLM auth challenge instead of showing login page.

If challenge is successful and an authenticate message is received, it will check for the existence of the user using the provided mail attribute, and create an account with a random, complex password, and then authenticate as the user.
2024-09-16 08:32:33 +10:00
9d0331d04f Create Auth/NTLM Endpoint
- Adds NTLM challenge negotiation
- Checks NTLM auth user & domain against AD / LDAP and returns info
- Adds relevant .env entries
2024-09-13 08:37:25 +10:00
17 changed files with 570 additions and 132 deletions

View File

@ -7,6 +7,18 @@ APP_SECRET=REPLACE_WITH_LONG_SECRET
JWT_TOKEN_EXPIRES_IN=30d
# Use NTLM for user authentication, exposes to browser
VITE_NTLM_AUTH=false
# LDAP settings for NTLM authentication
LDAP_BASEDN=
LDAP_DOMAINSUFFIX=
LDAP_USERNAME=
LDAP_PASSWORD=
# User object attributes for docmost
LDAP_NAMEATTRIBUTE=
LDAP_MAILATTRIBUTE=
DATABASE_URL="postgresql://postgres:password@localhost:5432/docmost?schema=public"
REDIS_URL=redis://127.0.0.1:6379

View File

@ -1,47 +0,0 @@
name: Sync Merged-Downstream with Docmost Upstream Main
on:
schedule:
- cron: '0 0 * * *' # Run daily at midnight UTC
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
with:
fetch-depth: 0 # Fetch all history to detect changes properly
- name: Set up git
run: |
git config --global user.name "Shadowfita"
git config --global user.email "www.ryan.palmer@hotmail.com"
- name: Fetch upstream
run: |
git remote add upstream https://github.com/docmost/docmost.git
git fetch upstream
- name: Check if upstream has changes
id: check_changes
run: |
UPSTREAM_DIFF=$(git diff --name-only upstream/main)
if [ -z "$UPSTREAM_DIFF" ]; then
echo "No changes in upstream main branch."
echo "::set-output name=changes::false"
else
echo "Changes detected in upstream main branch."
echo "::set-output name=changes::true"
fi
- name: Merge upstream/main into Merged-Downstream
if: steps.check_changes.outputs.changes == 'true'
run: |
git checkout Merged-Downstream
git merge upstream/main
- name: Push changes to Merged-Downstream
if: steps.check_changes.outputs.changes == 'true'
run: |
git push origin Merged-Downstream

View File

@ -17,7 +17,6 @@ To get started with Docmost, please refer to our [documentation](https://docmost
## Features
- Real-time collaboration
- Diagrams (Draw.io, Excalidraw and Mermaid)
- Spaces
- Permissions management
- Groups
@ -33,4 +32,4 @@ To get started with Docmost, please refer to our [documentation](https://docmost
</p>
### Contributing
See the [development documentation](https://docmost.com/docs/self-hosting/development)
See the [development doc](https://docmost.com/docs/self-hosting/development)

View File

@ -1,7 +1,7 @@
{
"name": "client",
"private": true,
"version": "0.3.1",
"version": "0.3.0",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",

View File

@ -1,5 +1,5 @@
import { useState } from "react";
import { login, setupWorkspace } from "@/features/auth/services/auth-service";
import { login, ntlmLogin, setupWorkspace } from "@/features/auth/services/auth-service";
import { useNavigate } from "react-router-dom";
import { useAtom } from "jotai";
import { authTokensAtom } from "@/features/auth/atoms/auth-tokens-atom";
@ -38,6 +38,25 @@ export default function useAuth() {
}
};
const handleNtlmSignIn = async () => {
setIsLoading(true);
try {
const res = await ntlmLogin();
setIsLoading(false);
setAuthToken(res.tokens);
navigate(APP_ROUTE.HOME);
} catch (err) {
console.log(err);
setIsLoading(false);
notifications.show({
message: err.response?.data.message,
color: "red",
});
}
};
const handleInvitationSignUp = async (data: IAcceptInvite) => {
setIsLoading(true);
@ -107,6 +126,7 @@ export default function useAuth() {
return {
signIn: handleSignIn,
ntlmSignIn: handleNtlmSignIn,
invitationSignup: handleInvitationSignUp,
setupWorkspace: handleSetupWorkspace,
isAuthenticated: handleIsAuthenticated,

View File

@ -6,12 +6,19 @@ import {
ISetupWorkspace,
ITokenResponse,
} from "@/features/auth/types/auth.types";
import axios from "axios";
export async function login(data: ILogin): Promise<ITokenResponse> {
const req = await api.post<ITokenResponse>("/auth/login", data);
return req.data;
}
export async function ntlmLogin(): Promise<ITokenResponse> {
// Use separate axios instance to avoid passing app auth headers to allow for NTLM authentication challenge
const req = await axios.post<ITokenResponse>("/api/auth/ntlm");
return req.data;
}
/*
export async function register(data: IRegister): Promise<ITokenResponse> {
const req = await api.post<ITokenResponse>("/auth/register", data);

View File

@ -15,19 +15,15 @@ export function getAppUrl(): string {
}
export function getBackendUrl(): string {
return getAppUrl() + '/api';
return getAppUrl() + "/api";
}
export function getCollaborationUrl(): string {
const COLLAB_PATH = '/collab';
const COLLAB_PATH = "/collab";
const url = process.env.APP_URL || getAppUrl();
let url = getAppUrl();
if (import.meta.env.DEV) {
url = process.env.APP_URL;
}
const wsProtocol = url.startsWith('https') ? 'wss' : 'ws';
return `${wsProtocol}://${url.split('://')[1]}${COLLAB_PATH}`;
const wsProtocol = url.startsWith("https") ? "wss" : "ws";
return `${wsProtocol}://${url.split("://")[1]}${COLLAB_PATH}`;
}
export function getAvatarUrl(avatarUrl: string) {
@ -35,17 +31,17 @@ export function getAvatarUrl(avatarUrl: string) {
return null;
}
if (avatarUrl?.startsWith('http')) {
if (avatarUrl?.startsWith("http")) {
return avatarUrl;
}
return getBackendUrl() + '/attachments/img/avatar/' + avatarUrl;
return getBackendUrl() + "/attachments/img/avatar/" + avatarUrl;
}
export function getSpaceUrl(spaceSlug: string) {
return '/s/' + spaceSlug;
return "/s/" + spaceSlug;
}
export function getFileUrl(src: string) {
return src?.startsWith('/files/') ? getBackendUrl() + src : src;
return src?.startsWith("/files/") ? getBackendUrl() + src : src;
}

View File

@ -1,13 +1,28 @@
import { LoginForm } from "@/features/auth/components/login-form";
import useAuth from "@/features/auth/hooks/use-auth";
import { useEffect } from "react";
import { Helmet } from "react-helmet-async";
const ntlmAuth = import.meta.env.VITE_NTLM_AUTH;
export default function LoginPage() {
const { ntlmSignIn } = useAuth();
useEffect(() => {
if (ntlmAuth)
ntlmSignIn();
}, [])
return (
<>
<Helmet>
<title>Login</title>
</Helmet>
<LoginForm />
{!ntlmAuth && <LoginForm />}
</>
);
}

View File

@ -1,6 +1,6 @@
{
"name": "server",
"version": "0.3.1",
"version": "0.3.0",
"description": "",
"author": "",
"private": true,
@ -59,11 +59,13 @@
"happy-dom": "^15.7.3",
"kysely": "^0.27.4",
"kysely-migration-cli": "^0.4.2",
"ldapjs": "^3.0.7",
"marked": "^13.0.3",
"mime-types": "^2.1.35",
"nanoid": "^5.0.7",
"nestjs-kysely": "^1.0.0",
"nodemailer": "^6.9.14",
"ntlm-server": "^0.1.3",
"passport-jwt": "^4.0.1",
"pg": "^8.12.0",
"pg-tsquery": "^8.4.2",
@ -85,6 +87,7 @@
"@types/debounce": "^1.2.4",
"@types/fs-extra": "^11.0.4",
"@types/jest": "^29.5.12",
"@types/ldapjs": "^3.0.6",
"@types/mime-types": "^2.1.4",
"@types/node": "^22.5.2",
"@types/nodemailer": "^6.4.15",

View File

@ -14,6 +14,7 @@ import { EventEmitterModule } from '@nestjs/event-emitter';
import { HealthModule } from './integrations/health/health.module';
import { ExportModule } from './integrations/export/export.module';
import { ImportModule } from './integrations/import/import.module';
import { NTLMModule } from './integrations/ntlm/ntlm.module';
@Module({
imports: [
@ -27,6 +28,7 @@ import { ImportModule } from './integrations/import/import.module';
HealthModule,
ImportModule,
ExportModule,
NTLMModule,
StorageModule.forRootAsync({
imports: [EnvironmentModule],
}),

View File

@ -10,5 +10,6 @@ import { TokenModule } from './token.module';
imports: [TokenModule, WorkspaceModule],
controllers: [AuthController],
providers: [AuthService, SignupService, JwtStrategy],
exports: [AuthService]
})
export class AuthModule {}

View File

@ -110,6 +110,37 @@ export class EnvironmentService {
return this.configService.get<string>('POSTMARK_TOKEN');
}
getLdapBaseDn(): string {
return this.configService.get<string>('LDAP_BASEDN')
}
getLdapDomainSuffix(): string {
return this.configService.get<string>('LDAP_DOMAINSUFFIX');
}
getLdapUsername(): string {
return this.configService.get<string>('LDAP_USERNAME')
}
getLdapPassword(): string {
return this.configService.get<string>('LDAP_PASSWORD')
}
getLdapNameAttribute(): string {
return this.configService.get<string>('LDAP_NAMEATTRIBUTE')
}
getLdapMailAttribute(): string {
return this.configService.get<string>('LDAP_MAILATTRIBUTE')
}
usingNtlmAuth(): boolean {
const ntlmAuth = this.configService
.get<string>('VITE_NTLM_AUTH', 'false')
.toLowerCase();
return ntlmAuth === 'true';
}
isCloud(): boolean {
const cloudConfig = this.configService
.get<string>('CLOUD', 'false')

View File

@ -0,0 +1,86 @@
import {
Controller,
Get,
Req,
Res,
HttpException,
HttpStatus,
Post,
} from '@nestjs/common';
import { FastifyRequest, FastifyReply } from 'fastify';
import {
NTLMNegotiationMessage,
NTLMChallengeMessage,
NTLMAuthenticateMessage,
MessageType,
} from 'ntlm-server';
import { EnvironmentService } from '../environment/environment.service';
import { NTLMService } from './ntlm.service';
@Controller()
export class NTLMController {
constructor(
private readonly ntlmService: NTLMService,
private readonly environmentService: EnvironmentService,
) {}
@Post('auth/ntlm')
async ntlmAuth(@Req() req, @Res() res: FastifyReply) {
const authHeader = req.headers['authorization'];
if (!authHeader) {
// Step 1: Challenge the client for NTLM authentication
return res.status(401).header('WWW-Authenticate', 'NTLM').send();
}
if (authHeader.startsWith('NTLM ')) {
// Step 2: Handle NTLM negotiation message
const clientNegotiation = new NTLMNegotiationMessage(authHeader);
if (clientNegotiation.messageType === MessageType.NEGOTIATE) {
// Step 3: Send NTLM challenge message
const serverChallenge = new NTLMChallengeMessage(clientNegotiation);
const base64Challenge = serverChallenge.toBuffer().toString('base64');
return res
.status(401)
.header('WWW-Authenticate', `NTLM ${base64Challenge}`)
.send();
} else if (clientNegotiation.messageType === MessageType.AUTHENTICATE) {
// Step 4: Handle NTLM Authenticate message
const clientAuthentication = new NTLMAuthenticateMessage(authHeader);
// Here you'd perform LDAP or Active Directory authentication
const client = this.ntlmService.createClient(
clientAuthentication.domainName,
);
// Asynchronous bind to AD
await this.ntlmService.bindAsync(client);
const results = await this.ntlmService.searchAsync(client, {
scope: 'sub',
filter: `(userPrincipalName=${clientAuthentication.userName}@${clientAuthentication.domainName}*)`,
});
if (results.length == 1) {
const ntlmSignInResult = await this.ntlmService.login(
results.at(0)[this.environmentService.getLdapNameAttribute()],
results.at(0)[this.environmentService.getLdapMailAttribute()],
req.raw.workspaceId,
);
return res.status(200).send(ntlmSignInResult);
} else return res.status(403).send();
} else {
console.warn('Invalid NTLM Message received.');
return res.status(400).send('Invalid NTLM Message');
}
}
res.status(400).send('Bad NTLM request');
}
}

View File

@ -0,0 +1,13 @@
import { Module } from '@nestjs/common';
import { NTLMController } from './ntlm.controller';
import { NTLMService } from './ntlm.service';
import { TokenModule } from 'src/core/auth/token.module';
import { WorkspaceModule } from 'src/core/workspace/workspace.module';
import { AuthModule } from 'src/core/auth/auth.module';
@Module({
imports: [TokenModule, WorkspaceModule, AuthModule],
controllers: [NTLMController],
providers: [NTLMService],
})
export class NTLMModule {}

View File

@ -0,0 +1,110 @@
import { Inject, Injectable, UnauthorizedException } from '@nestjs/common';
import { EnvironmentService } from '../environment/environment.service';
import * as ldap from 'ldapjs';
import { UserRepo } from '@docmost/db/repos/user/user.repo';
import { TokensDto } from 'src/core/auth/dto/tokens.dto';
import { TokenService } from 'src/core/auth/services/token.service';
import { AuthService } from 'src/core/auth/services/auth.service';
@Injectable()
export class NTLMService {
constructor(
private readonly environmentService: EnvironmentService,
private authService: AuthService,
private tokenService: TokenService,
private userRepo: UserRepo,
) {}
createClient = (domain: string) =>
ldap.createClient({
url: 'ldap://' + domain + this.environmentService.getLdapDomainSuffix(),
});
// Promisified version of ldap.Client.bind
bindAsync = (client: ldap.Client): Promise<void> => {
return new Promise((resolve, reject) => {
client.bind(
this.environmentService.getLdapUsername(),
this.environmentService.getLdapPassword(),
(err) => {
if (err) {
reject(err);
} else {
resolve();
}
},
);
});
};
// Promisified version of client.search
searchAsync = (
client: ldap.Client,
options: ldap.SearchOptions,
): Promise<any[]> => {
const baseDN: string = this.environmentService.getLdapBaseDn();
return new Promise((resolve, reject) => {
const entries: any[] = [];
client.search(baseDN, options, (err, res) => {
if (err) {
reject(err);
}
res.on('searchEntry', (entry) => {
const attributes = Object.fromEntries(
entry.attributes.map(({ type, values }) => [
type,
values.length > 1 ? values : values[0],
]),
);
entries.push(attributes);
});
res.on('end', () => {
resolve(entries);
});
res.on('error', (error) => {
reject(error);
});
});
});
};
async login(name: string, email: string, workspaceId: string) {
const user = await this.userRepo.findByEmail(email, workspaceId, false);
if (!user) {
const tokensR = await this.authService.register(
{
name,
email,
password: this.generateRandomPassword(12),
},
workspaceId,
);
return tokensR;
}
user.lastLoginAt = new Date();
await this.userRepo.updateLastLogin(user.id, workspaceId);
const tokens: TokensDto = await this.tokenService.generateTokens(user);
return { tokens };
}
generateRandomPassword(length: number): string {
const characters =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+[]{}|;:,.<>?';
let password = '';
for (let i = 0; i < length; i++) {
const randomIndex = Math.floor(Math.random() * characters.length);
password += characters[randomIndex];
}
return password;
}
}

View File

@ -1,7 +1,7 @@
{
"name": "docmost",
"homepage": "https://docmost.com",
"version": "0.3.1",
"version": "0.3.0",
"private": true,
"scripts": {
"build": "nx run-many -t build",

316
pnpm-lock.yaml generated
View File

@ -158,7 +158,7 @@ importers:
devDependencies:
'@nx/js':
specifier: 19.6.3
version: 19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25)(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25))(typescript@5.5.4)
version: 19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))(typescript@5.5.4)
'@types/uuid':
specifier: ^10.0.0
version: 10.0.0
@ -167,7 +167,7 @@ importers:
version: 8.2.2
nx:
specifier: 19.6.3
version: 19.6.3(@swc/core@1.5.25)
version: 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
tsx:
specifier: ^4.19.0
version: 4.19.0
@ -445,6 +445,9 @@ importers:
kysely-migration-cli:
specifier: ^0.4.2
version: 0.4.2
ldapjs:
specifier: ^3.0.7
version: 3.0.7
marked:
specifier: ^13.0.3
version: 13.0.3
@ -460,6 +463,9 @@ importers:
nodemailer:
specifier: ^6.9.14
version: 6.9.14
ntlm-server:
specifier: ^0.1.3
version: 0.1.3
passport-jwt:
specifier: ^4.0.1
version: 4.0.1
@ -496,7 +502,7 @@ importers:
devDependencies:
'@nestjs/cli':
specifier: ^10.4.5
version: 10.4.5(@swc/core@1.5.25)
version: 10.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5))
'@nestjs/schematics':
specifier: ^10.1.4
version: 10.1.4(chokidar@3.6.0)(typescript@5.5.4)
@ -518,6 +524,9 @@ importers:
'@types/jest':
specifier: ^29.5.12
version: 29.5.12
'@types/ldapjs':
specifier: ^3.0.6
version: 3.0.6
'@types/mime-types':
specifier: ^2.1.4
version: 2.1.4
@ -556,7 +565,7 @@ importers:
version: 5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.0)))(eslint@9.9.1(jiti@1.21.0))(prettier@3.3.3)
jest:
specifier: ^29.7.0
version: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
version: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
kysely-codegen:
specifier: ^0.16.3
version: 0.16.3(kysely@0.27.4)(pg@8.12.0)
@ -574,13 +583,13 @@ importers:
version: 7.0.0
ts-jest:
specifier: ^29.2.5
version: 29.2.5(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)))(typescript@5.5.4)
version: 29.2.5(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)))(typescript@5.5.4)
ts-loader:
specifier: ^9.5.1
version: 9.5.1(typescript@5.5.4)(webpack@5.94.0(@swc/core@1.5.25))
version: 9.5.1(typescript@5.5.4)(webpack@5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5)))
ts-node:
specifier: ^10.9.2
version: 10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)
version: 10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)
tsconfig-paths:
specifier: ^4.2.0
version: 4.2.0
@ -2291,6 +2300,42 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@ldapjs/asn1@1.2.0':
resolution: {integrity: sha512-KX/qQJ2xxzvO2/WOvr1UdQ+8P5dVvuOLk/C9b1bIkXxZss8BaR28njXdPgFCpj5aHaf1t8PmuVnea+N9YG9YMw==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/asn1@2.0.0':
resolution: {integrity: sha512-G9+DkEOirNgdPmD0I8nu57ygQJKOOgFEMKknEuQvIHbGLwP3ny1mY+OTUYLCbCaGJP4sox5eYgBJRuSUpnAddA==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/attribute@1.0.0':
resolution: {integrity: sha512-ptMl2d/5xJ0q+RgmnqOi3Zgwk/TMJYG7dYMC0Keko+yZU6n+oFM59MjQOUht5pxJeS4FWrImhu/LebX24vJNRQ==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/change@1.0.0':
resolution: {integrity: sha512-EOQNFH1RIku3M1s0OAJOzGfAohuFYXFY4s73wOhRm4KFGhmQQ7MChOh2YtYu9Kwgvuq1B0xKciXVzHCGkB5V+Q==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/controls@2.1.0':
resolution: {integrity: sha512-2pFdD1yRC9V9hXfAWvCCO2RRWK9OdIEcJIos/9cCVP9O4k72BY1bLDQQ4KpUoJnl4y/JoD4iFgM+YWT3IfITWw==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/dn@1.1.0':
resolution: {integrity: sha512-R72zH5ZeBj/Fujf/yBu78YzpJjJXG46YHFo5E4W1EqfNpo1UsVPqdLrRMXeKIsJT3x9dJVIfR6OpzgINlKpi0A==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/filter@2.1.1':
resolution: {integrity: sha512-TwPK5eEgNdUO1ABPBUQabcZ+h9heDORE4V9WNZqCtYLKc06+6+UAJ3IAbr0L0bYTnkkWC/JEQD2F+zAFsuikNw==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/messages@1.3.0':
resolution: {integrity: sha512-K7xZpXJ21bj92jS35wtRbdcNrwmxAtPwy4myeh9duy/eR3xQKvikVycbdWVzkYEAVE5Ce520VXNOwCHjomjCZw==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@ldapjs/protocol@1.2.1':
resolution: {integrity: sha512-O89xFDLW2gBoZWNXuXpBSM32/KealKCTb3JGtJdtUQc7RjAk8XzrRgyz02cPAwGKwKPxy0ivuC7UP9bmN87egQ==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
'@lifeomic/attempt@3.0.3':
resolution: {integrity: sha512-GlM2AbzrErd/TmLL3E8hAHmb5Q7VhDJp35vIbyPVA5Rz55LZuRr8pwL3qrwwkVNo05gMX1J44gURKb4MHQZo7w==}
@ -3724,6 +3769,9 @@ packages:
'@types/katex@0.16.7':
resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
'@types/ldapjs@3.0.6':
resolution: {integrity: sha512-E2Tn1ltJDYBsidOT9QG4engaQeQzRQ9aYNxVmjCkD33F7cIeLPgrRDXAYs0O35mK2YDU20c/+ZkNjeAPRGLM0Q==}
'@types/methods@1.1.4':
resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==}
@ -4066,6 +4114,7 @@ packages:
are-we-there-yet@2.0.0:
resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
engines: {node: '>=10'}
deprecated: This package is no longer supported.
arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
@ -4082,6 +4131,10 @@ packages:
asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
assert-plus@1.0.0:
resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
engines: {node: '>=0.8'}
async-lock@1.4.1:
resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==}
@ -4158,6 +4211,10 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
backoff@2.5.0:
resolution: {integrity: sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==}
engines: {node: '>= 0.6'}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@ -4474,6 +4531,9 @@ packages:
core-js-compat@3.35.0:
resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==}
core-util-is@1.0.2:
resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@ -5086,6 +5146,10 @@ packages:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
extsprintf@1.4.1:
resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==}
engines: {'0': node >=0.6.0}
fast-content-type-parse@1.1.0:
resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==}
@ -5267,6 +5331,7 @@ packages:
gauge@3.0.2:
resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
engines: {node: '>=10'}
deprecated: This package is no longer supported.
generic-pool@3.9.0:
resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==}
@ -5949,6 +6014,10 @@ packages:
layout-base@1.0.2:
resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
ldapjs@3.0.7:
resolution: {integrity: sha512-1ky+WrN+4CFMuoekUOv7Y1037XWdjKpu0xAPwSP+9KdvmV9PG+qOKlssDV6a+U32apwxdD3is/BZcWOYzN30cg==}
deprecated: This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md
leac@0.6.0:
resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
@ -6369,6 +6438,10 @@ packages:
npmlog@5.0.1:
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
deprecated: This package is no longer supported.
ntlm-server@0.1.3:
resolution: {integrity: sha512-DhCApPhF1U7TLJ7vTiXNNqN9C/8huf6qG8lBDU8075zvWXXWZCazo623xZQZNV5jocgUDWl9U3/fNaw7hjJHKQ==}
nwsapi@2.2.10:
resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==}
@ -6711,6 +6784,10 @@ packages:
postmark@4.0.5:
resolution: {integrity: sha512-nerZdd3TwOH4CgGboZnlUM/q7oZk0EqpZgJL+Y3Nup8kHeaukxouQ6JcFF3EJEijc4QbuNv1TefGhboAKtf/SQ==}
precond@0.2.3:
resolution: {integrity: sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==}
engines: {node: '>= 0.6'}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@ -6736,6 +6813,9 @@ packages:
resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
process-warning@2.3.2:
resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==}
process-warning@3.0.0:
resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
@ -7816,6 +7896,18 @@ packages:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
vasync@2.2.1:
resolution: {integrity: sha512-Hq72JaTpcTFdWiNA4Y22Amej2GH3BFmBaKPPlDZ4/oC8HNn2ISHLkFrJU4Ds8R3jcUi7oo5Y9jcMHKjES+N9wQ==}
engines: {'0': node >=0.6.0}
verror@1.10.0:
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
engines: {'0': node >=0.6.0}
verror@1.10.1:
resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==}
engines: {node: '>=0.6.0'}
vite@5.4.2:
resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==}
engines: {node: ^18.0.0 || >=20.0.0}
@ -10163,7 +10255,7 @@ snapshots:
jest-util: 29.7.0
slash: 3.0.0
'@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))':
'@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))':
dependencies:
'@jest/console': 29.7.0
'@jest/reporters': 29.7.0
@ -10177,7 +10269,7 @@ snapshots:
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.7.0
jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@ -10358,6 +10450,50 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
'@ldapjs/asn1@1.2.0': {}
'@ldapjs/asn1@2.0.0': {}
'@ldapjs/attribute@1.0.0':
dependencies:
'@ldapjs/asn1': 2.0.0
'@ldapjs/protocol': 1.2.1
process-warning: 2.3.2
'@ldapjs/change@1.0.0':
dependencies:
'@ldapjs/asn1': 2.0.0
'@ldapjs/attribute': 1.0.0
'@ldapjs/controls@2.1.0':
dependencies:
'@ldapjs/asn1': 1.2.0
'@ldapjs/protocol': 1.2.1
'@ldapjs/dn@1.1.0':
dependencies:
'@ldapjs/asn1': 2.0.0
process-warning: 2.3.2
'@ldapjs/filter@2.1.1':
dependencies:
'@ldapjs/asn1': 2.0.0
'@ldapjs/protocol': 1.2.1
process-warning: 2.3.2
'@ldapjs/messages@1.3.0':
dependencies:
'@ldapjs/asn1': 2.0.0
'@ldapjs/attribute': 1.0.0
'@ldapjs/change': 1.0.0
'@ldapjs/controls': 2.1.0
'@ldapjs/dn': 1.1.0
'@ldapjs/filter': 2.1.1
'@ldapjs/protocol': 1.2.1
process-warning: 2.3.2
'@ldapjs/protocol@1.2.1': {}
'@lifeomic/attempt@3.0.3': {}
'@ljharb/through@2.3.13':
@ -10477,7 +10613,7 @@ snapshots:
bullmq: 5.12.12
tslib: 2.6.3
'@nestjs/cli@10.4.5(@swc/core@1.5.25)':
'@nestjs/cli@10.4.5(@swc/core@1.5.25(@swc/helpers@0.5.5))':
dependencies:
'@angular-devkit/core': 17.3.8(chokidar@3.6.0)
'@angular-devkit/schematics': 17.3.8(chokidar@3.6.0)
@ -10487,7 +10623,7 @@ snapshots:
chokidar: 3.6.0
cli-table3: 0.6.5
commander: 4.1.1
fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.5.25))
fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5)))
glob: 10.4.2
inquirer: 8.2.6
node-emoji: 1.11.0
@ -10496,10 +10632,10 @@ snapshots:
tsconfig-paths: 4.2.0
tsconfig-paths-webpack-plugin: 4.1.0
typescript: 5.3.3
webpack: 5.94.0(@swc/core@1.5.25)
webpack: 5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
webpack-node-externals: 3.0.0
optionalDependencies:
'@swc/core': 1.5.25
'@swc/core': 1.5.25(@swc/helpers@0.5.5)
transitivePeerDependencies:
- esbuild
- uglify-js
@ -10683,15 +10819,15 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
'@nrwl/devkit@19.6.3(nx@19.6.3(@swc/core@1.5.25))':
'@nrwl/devkit@19.6.3(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))':
dependencies:
'@nx/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25))
'@nx/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))
transitivePeerDependencies:
- nx
'@nrwl/js@19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25)(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25))(typescript@5.5.4)':
'@nrwl/js@19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))(typescript@5.5.4)':
dependencies:
'@nx/js': 19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25)(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25))(typescript@5.5.4)
'@nx/js': 19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))(typescript@5.5.4)
transitivePeerDependencies:
- '@babel/traverse'
- '@swc-node/register'
@ -10704,18 +10840,18 @@ snapshots:
- typescript
- verdaccio
'@nrwl/tao@19.6.3(@swc/core@1.5.25)':
'@nrwl/tao@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))':
dependencies:
nx: 19.6.3(@swc/core@1.5.25)
nx: 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
tslib: 2.6.2
transitivePeerDependencies:
- '@swc-node/register'
- '@swc/core'
- debug
'@nrwl/workspace@19.6.3(@swc/core@1.5.25)':
'@nrwl/workspace@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))':
dependencies:
'@nx/workspace': 19.6.3(@swc/core@1.5.25)
'@nx/workspace': 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
transitivePeerDependencies:
- '@swc-node/register'
- '@swc/core'
@ -10729,20 +10865,20 @@ snapshots:
transitivePeerDependencies:
- encoding
'@nx/devkit@19.6.3(nx@19.6.3(@swc/core@1.5.25))':
'@nx/devkit@19.6.3(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))':
dependencies:
'@nrwl/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25))
'@nrwl/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))
ejs: 3.1.9
enquirer: 2.3.6
ignore: 5.3.1
minimatch: 9.0.3
nx: 19.6.3(@swc/core@1.5.25)
nx: 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
semver: 7.6.2
tmp: 0.2.1
tslib: 2.6.2
yargs-parser: 21.1.1
'@nx/js@19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25)(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25))(typescript@5.5.4)':
'@nx/js@19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))(typescript@5.5.4)':
dependencies:
'@babel/core': 7.24.6
'@babel/plugin-proposal-decorators': 7.23.7(@babel/core@7.24.6)
@ -10751,9 +10887,9 @@ snapshots:
'@babel/preset-env': 7.23.8(@babel/core@7.24.6)
'@babel/preset-typescript': 7.23.3(@babel/core@7.24.6)
'@babel/runtime': 7.23.7
'@nrwl/js': 19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25)(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25))(typescript@5.5.4)
'@nx/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25))
'@nx/workspace': 19.6.3(@swc/core@1.5.25)
'@nrwl/js': 19.6.3(@babel/traverse@7.24.6)(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))(typescript@5.5.4)
'@nx/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))
'@nx/workspace': 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
babel-plugin-const-enum: 1.2.0(@babel/core@7.24.6)
babel-plugin-macros: 2.8.0
babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.24.6)(@babel/traverse@7.24.6)
@ -10771,7 +10907,7 @@ snapshots:
ora: 5.3.0
semver: 7.6.2
source-map-support: 0.5.19
ts-node: 10.9.1(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)
ts-node: 10.9.1(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)
tsconfig-paths: 4.2.0
tslib: 2.6.2
transitivePeerDependencies:
@ -10815,13 +10951,13 @@ snapshots:
'@nx/nx-win32-x64-msvc@19.6.3':
optional: true
'@nx/workspace@19.6.3(@swc/core@1.5.25)':
'@nx/workspace@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))':
dependencies:
'@nrwl/workspace': 19.6.3(@swc/core@1.5.25)
'@nx/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25))
'@nrwl/workspace': 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
'@nx/devkit': 19.6.3(nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)))
chalk: 4.1.2
enquirer: 2.3.6
nx: 19.6.3(@swc/core@1.5.25)
nx: 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
tslib: 2.6.2
yargs-parser: 21.1.1
transitivePeerDependencies:
@ -11443,7 +11579,7 @@ snapshots:
'@swc/core-win32-x64-msvc@1.5.25':
optional: true
'@swc/core@1.5.25':
'@swc/core@1.5.25(@swc/helpers@0.5.5)':
dependencies:
'@swc/counter': 0.1.3
'@swc/types': 0.1.7
@ -11458,6 +11594,7 @@ snapshots:
'@swc/core-win32-arm64-msvc': 1.5.25
'@swc/core-win32-ia32-msvc': 1.5.25
'@swc/core-win32-x64-msvc': 1.5.25
'@swc/helpers': 0.5.5
optional: true
'@swc/counter@0.1.3': {}
@ -11890,6 +12027,10 @@ snapshots:
'@types/katex@0.16.7': {}
'@types/ldapjs@3.0.6':
dependencies:
'@types/node': 22.5.2
'@types/methods@1.1.4': {}
'@types/mime-types@2.1.4': {}
@ -12301,6 +12442,8 @@ snapshots:
asap@2.0.6: {}
assert-plus@1.0.0: {}
async-lock@1.4.1: {}
async@3.2.5: {}
@ -12462,6 +12605,10 @@ snapshots:
babel-plugin-jest-hoist: 29.6.3
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6)
backoff@2.5.0:
dependencies:
precond: 0.2.3
balanced-match@1.0.2: {}
base64-js@1.5.1: {}
@ -12775,6 +12922,8 @@ snapshots:
dependencies:
browserslist: 4.23.0
core-util-is@1.0.2: {}
core-util-is@1.0.3: {}
cors@2.8.5:
@ -12803,13 +12952,13 @@ snapshots:
optionalDependencies:
typescript: 5.3.3
create-jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)):
create-jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@ -13483,6 +13632,8 @@ snapshots:
iconv-lite: 0.4.24
tmp: 0.0.33
extsprintf@1.4.1: {}
fast-content-type-parse@1.1.0: {}
fast-decode-uri-component@1.0.1: {}
@ -13630,7 +13781,7 @@ snapshots:
cross-spawn: 7.0.3
signal-exit: 4.1.0
fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.5.25)):
fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5))):
dependencies:
'@babel/code-frame': 7.24.6
chalk: 4.1.2
@ -13645,7 +13796,7 @@ snapshots:
semver: 7.6.2
tapable: 2.2.1
typescript: 5.3.3
webpack: 5.94.0(@swc/core@1.5.25)
webpack: 5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
form-data@4.0.0:
dependencies:
@ -14152,16 +14303,16 @@ snapshots:
- babel-plugin-macros
- supports-color
jest-cli@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)):
jest-cli@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
dependencies:
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
create-jest: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
create-jest: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
exit: 0.1.2
import-local: 3.1.0
jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.7.2
@ -14171,7 +14322,7 @@ snapshots:
- supports-color
- ts-node
jest-config@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)):
jest-config@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
dependencies:
'@babel/core': 7.24.6
'@jest/test-sequencer': 29.7.0
@ -14197,7 +14348,7 @@ snapshots:
strip-json-comments: 3.1.1
optionalDependencies:
'@types/node': 22.5.2
ts-node: 10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)
ts-node: 10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
@ -14423,12 +14574,12 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)):
jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
dependencies:
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
'@jest/types': 29.6.3
import-local: 3.1.0
jest-cli: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
jest-cli: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@ -14610,6 +14761,23 @@ snapshots:
layout-base@1.0.2: {}
ldapjs@3.0.7:
dependencies:
'@ldapjs/asn1': 2.0.0
'@ldapjs/attribute': 1.0.0
'@ldapjs/change': 1.0.0
'@ldapjs/controls': 2.1.0
'@ldapjs/dn': 1.1.0
'@ldapjs/filter': 2.1.1
'@ldapjs/messages': 1.3.0
'@ldapjs/protocol': 1.2.1
abstract-logging: 2.0.1
assert-plus: 1.0.0
backoff: 2.5.0
once: 1.4.0
vasync: 2.2.1
verror: 1.10.1
leac@0.6.0: {}
less@4.2.0:
@ -15000,12 +15168,14 @@ snapshots:
gauge: 3.0.2
set-blocking: 2.0.0
ntlm-server@0.1.3: {}
nwsapi@2.2.10: {}
nx@19.6.3(@swc/core@1.5.25):
nx@19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5)):
dependencies:
'@napi-rs/wasm-runtime': 0.2.4
'@nrwl/tao': 19.6.3(@swc/core@1.5.25)
'@nrwl/tao': 19.6.3(@swc/core@1.5.25(@swc/helpers@0.5.5))
'@yarnpkg/lockfile': 1.1.0
'@yarnpkg/parsers': 3.0.0-rc.46
'@zkochan/js-yaml': 0.0.7
@ -15050,7 +15220,7 @@ snapshots:
'@nx/nx-linux-x64-musl': 19.6.3
'@nx/nx-win32-arm64-msvc': 19.6.3
'@nx/nx-win32-x64-msvc': 19.6.3
'@swc/core': 1.5.25
'@swc/core': 1.5.25(@swc/helpers@0.5.5)
transitivePeerDependencies:
- debug
@ -15379,6 +15549,8 @@ snapshots:
transitivePeerDependencies:
- debug
precond@0.2.3: {}
prelude-ls@1.2.1: {}
prettier-linter-helpers@1.0.0:
@ -15397,6 +15569,8 @@ snapshots:
proc-log@3.0.0: {}
process-warning@2.3.2: {}
process-warning@3.0.0: {}
process@0.11.10: {}
@ -16236,16 +16410,16 @@ snapshots:
mkdirp: 1.0.4
yallist: 4.0.0
terser-webpack-plugin@5.3.10(@swc/core@1.5.25)(webpack@5.94.0(@swc/core@1.5.25)):
terser-webpack-plugin@5.3.10(@swc/core@1.5.25(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5))):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.2
terser: 5.29.2
webpack: 5.94.0(@swc/core@1.5.25)
webpack: 5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
optionalDependencies:
'@swc/core': 1.5.25
'@swc/core': 1.5.25(@swc/helpers@0.5.5)
terser@5.29.2:
dependencies:
@ -16319,12 +16493,12 @@ snapshots:
ts-dedent@2.2.0: {}
ts-jest@29.2.5(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4)))(typescript@5.5.4):
ts-jest@29.2.5(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)))(typescript@5.5.4):
dependencies:
bs-logger: 0.2.6
ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
jest: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4))
jest: 29.7.0(@types/node@22.5.2)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2
@ -16338,7 +16512,7 @@ snapshots:
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.24.3)
ts-loader@9.5.1(typescript@5.5.4)(webpack@5.94.0(@swc/core@1.5.25)):
ts-loader@9.5.1(typescript@5.5.4)(webpack@5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5))):
dependencies:
chalk: 4.1.2
enhanced-resolve: 5.16.0
@ -16346,9 +16520,9 @@ snapshots:
semver: 7.6.0
source-map: 0.7.4
typescript: 5.5.4
webpack: 5.94.0(@swc/core@1.5.25)
webpack: 5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5))
ts-node@10.9.1(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4):
ts-node@10.9.1(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.9
@ -16366,9 +16540,9 @@ snapshots:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optionalDependencies:
'@swc/core': 1.5.25
'@swc/core': 1.5.25(@swc/helpers@0.5.5)
ts-node@10.9.2(@swc/core@1.5.25)(@types/node@22.5.2)(typescript@5.5.4):
ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.9
@ -16386,7 +16560,7 @@ snapshots:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optionalDependencies:
'@swc/core': 1.5.25
'@swc/core': 1.5.25(@swc/helpers@0.5.5)
tsconfig-paths-webpack-plugin@4.1.0:
dependencies:
@ -16533,6 +16707,22 @@ snapshots:
vary@1.1.2: {}
vasync@2.2.1:
dependencies:
verror: 1.10.0
verror@1.10.0:
dependencies:
assert-plus: 1.0.0
core-util-is: 1.0.2
extsprintf: 1.4.1
verror@1.10.1:
dependencies:
assert-plus: 1.0.0
core-util-is: 1.0.2
extsprintf: 1.4.1
vite@5.4.2(@types/node@22.5.2)(less@4.2.0)(sugarss@4.0.1(postcss@8.4.43))(terser@5.29.2):
dependencies:
esbuild: 0.21.5
@ -16589,7 +16779,7 @@ snapshots:
webpack-sources@3.2.3: {}
webpack@5.94.0(@swc/core@1.5.25):
webpack@5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5)):
dependencies:
'@types/estree': 1.0.5
'@webassemblyjs/ast': 1.12.1
@ -16611,7 +16801,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
terser-webpack-plugin: 5.3.10(@swc/core@1.5.25)(webpack@5.94.0(@swc/core@1.5.25))
terser-webpack-plugin: 5.3.10(@swc/core@1.5.25(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.5.25(@swc/helpers@0.5.5)))
watchpack: 2.4.1
webpack-sources: 3.2.3
transitivePeerDependencies: