diff --git a/.env.example b/.env.example
index f89657dc1..2463c0671 100644
--- a/.env.example
+++ b/.env.example
@@ -21,6 +21,10 @@ REDIS_PASS=A3vniod98Zbuvn9u5
#REDIS_TLS=
+MAIL_HOST=smtp.example.com
+MAIL_USER=your-email@example.com
+MAIL_PASSWORD=your-email-password
+
# ================================================
# Tip: use mailtrap.io for local development
diff --git a/apps/webapp/src/app/b2c/login/page.tsx b/apps/webapp/src/app/b2c/login/page.tsx
index aeb85e556..f2f933737 100644
--- a/apps/webapp/src/app/b2c/login/page.tsx
+++ b/apps/webapp/src/app/b2c/login/page.tsx
@@ -12,12 +12,14 @@ import { useEffect, useState } from "react";
import Cookies from 'js-cookie';
import useProfileStore from "@/state/profileStore";
import useUser from "@/hooks/get/useUser";
+import { Button } from "@/components/ui/button";
export default function Page() {
const [userInitialized,setUserInitialized] = useState(true)
const {mutate} = useUser()
const router = useRouter()
const {profile} = useProfileStore();
+ const [activeTab, setActiveTab] = useState('login');
useEffect(() => {
if(profile)
@@ -70,6 +72,16 @@ export default function Page() {
+ {activeTab === 'login' && (
+
+ )}
+ {activeTab === 'forgot-password' && (
+
+ )}
diff --git a/apps/webapp/src/app/b2c/login/reset-password.tsx b/apps/webapp/src/app/b2c/login/reset-password.tsx
new file mode 100644
index 000000000..60105d976
--- /dev/null
+++ b/apps/webapp/src/app/b2c/login/reset-password.tsx
@@ -0,0 +1,24 @@
+'use client';
+
+import React from 'react';
+import { useSearchParams } from 'next/navigation';
+import ResetPasswordForm from '@/components/Auth/CustomLoginComponent/ResetPasswordForm';
+
+const ResetPasswordPage = () => {
+ const searchParams = useSearchParams();
+ const token = searchParams.get('token');
+
+ if (!token) {
+ return
Invalid or missing reset token. Please try the password reset process again.
;
+ }
+
+ return (
+
+ );
+};
+
+export default ResetPasswordPage;
\ No newline at end of file
diff --git a/apps/webapp/src/components/Auth/CustomLoginComponent/ForgotPasswordForm.tsx b/apps/webapp/src/components/Auth/CustomLoginComponent/ForgotPasswordForm.tsx
new file mode 100644
index 000000000..7bce34aad
--- /dev/null
+++ b/apps/webapp/src/components/Auth/CustomLoginComponent/ForgotPasswordForm.tsx
@@ -0,0 +1,69 @@
+import React from 'react';
+import { useForm } from 'react-hook-form';
+import { zodResolver } from '@hookform/resolvers/zod';
+import * as z from 'zod';
+import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card';
+import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';
+import { Input } from '@/components/ui/input';
+import { Button } from '@/components/ui/button';
+import { toast } from 'sonner';
+import useInitiatePasswordRecovery from '@/hooks/create/useInitiatePasswordRecovery';
+
+const formSchema = z.object({
+ email: z.string().email({ message: 'Enter valid Email' }),
+});
+
+const ForgotPasswordForm = () => {
+ const { func } = useInitiatePasswordRecovery();
+
+ const sform = useForm
>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ email: '',
+ },
+ });
+
+ const onSubmit = (values: z.infer) => {
+ toast.promise(
+ func({ email: values.email }),
+ {
+ loading: 'Sending recovery email...',
+ success: 'Recovery email sent. Please check your inbox.',
+ error: 'Failed to send recovery email. Please try again.',
+ }
+ );
+ };
+
+ return (
+
+
+ );
+};
+
+export default ForgotPasswordForm;
\ No newline at end of file
diff --git a/apps/webapp/src/components/Auth/CustomLoginComponent/LoginUserForm.tsx b/apps/webapp/src/components/Auth/CustomLoginComponent/LoginUserForm.tsx
index 1e49ab5e0..340ea07f2 100644
--- a/apps/webapp/src/components/Auth/CustomLoginComponent/LoginUserForm.tsx
+++ b/apps/webapp/src/components/Auth/CustomLoginComponent/LoginUserForm.tsx
@@ -29,10 +29,11 @@ import { toast } from 'sonner'
import useProfileStore from '@/state/profileStore';
import Cookies from 'js-cookie';
import { useQueryClient } from '@tanstack/react-query'
+import Link from 'next/link'
const formSchema = z.object({
email: z.string().email({
- message:"Enter valid Email"
+ message:"Enter valid Email"
}),
password : z.string().min(2, {
message: "Enter Password.",
@@ -132,6 +133,9 @@ const LoginUserForm = () => {
+
+ Forgot Password?
+
diff --git a/apps/webapp/src/components/Auth/CustomLoginComponent/ResetPasswordForm.tsx b/apps/webapp/src/components/Auth/CustomLoginComponent/ResetPasswordForm.tsx
new file mode 100644
index 000000000..8b1353cbb
--- /dev/null
+++ b/apps/webapp/src/components/Auth/CustomLoginComponent/ResetPasswordForm.tsx
@@ -0,0 +1,132 @@
+// src/components/Auth/CustomLoginComponent/ResetPasswordForm.tsx
+
+import React, { useState } from 'react';
+import { useForm } from 'react-hook-form';
+import { zodResolver } from '@hookform/resolvers/zod';
+import * as z from 'zod';
+import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card';
+import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';
+import { Input } from '@/components/ui/input';
+import { Button } from '@/components/ui/button';
+import { toast } from 'sonner';
+import { useRouter } from 'next/navigation';
+import useResetPassword from '@/hooks/create/useResetPassword';
+import { Eye, EyeOff } from 'lucide-react';
+
+const formSchema = z.object({
+ newPassword: z
+ .string()
+ .min(8, { message: "Password must be at least 8 characters long" })
+ .regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, {
+ message: "Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character",
+ }),
+ confirmPassword: z.string(),
+}).refine((data) => data.newPassword === data.confirmPassword, {
+ message: "Passwords don't match",
+ path: ["confirmPassword"],
+});
+
+const ResetPasswordForm = ({ token }: {token: string}) => {
+ const router = useRouter();
+ const { func } = useResetPassword();
+ const [showPassword, setShowPassword] = useState(false);
+ const [showConfirmPassword, setShowConfirmPassword] = useState(false);
+
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ newPassword: '',
+ confirmPassword: '',
+ },
+ });
+
+ const onSubmit = async (values: z.infer) => {
+ try {
+ toast.promise(
+ func({ token, newPassword: values.newPassword }),
+ {
+ loading: 'Resetting password...',
+ success: 'Password reset successful. Please log in with your new password.',
+ error: 'Failed to reset password. Please try again.',
+ }
+ );
+ router.push('/b2c/login');
+ } catch (error) {
+ console.error('Password reset error:', error);
+ }
+ };
+
+ return (
+
+
+ );
+};
+
+export default ResetPasswordForm;
\ No newline at end of file
diff --git a/apps/webapp/src/hooks/create/useCreateBatchLinkedUser.tsx b/apps/webapp/src/hooks/create/useCreateBatchLinkedUser.tsx
index 551188c46..03d69dc72 100644
--- a/apps/webapp/src/hooks/create/useCreateBatchLinkedUser.tsx
+++ b/apps/webapp/src/hooks/create/useCreateBatchLinkedUser.tsx
@@ -9,7 +9,7 @@ interface ILinkedUserDto {
}
const useCreateBatchLinkedUser = () => {
const add = async (linkedUserData: ILinkedUserDto) => {
- const response = await fetch(`${config.API_URL}/linked-users/internal/batch`, {
+ const response = await fetch(`${config.API_URL}/linked_users/internal/batch`, {
method: 'POST',
body: JSON.stringify(linkedUserData),
headers: {
diff --git a/apps/webapp/src/hooks/create/useCreateWebhook.tsx b/apps/webapp/src/hooks/create/useCreateWebhook.tsx
index 00eff7bd4..e5b67c808 100644
--- a/apps/webapp/src/hooks/create/useCreateWebhook.tsx
+++ b/apps/webapp/src/hooks/create/useCreateWebhook.tsx
@@ -9,7 +9,7 @@ interface IWebhookDto {
}
const useCreateWebhook = () => {
const add = async (data: IWebhookDto) => {
- const response = await fetch(`${config.API_URL}/webhook/internal`, {
+ const response = await fetch(`${config.API_URL}/webhooks/internal`, {
method: 'POST',
body: JSON.stringify(data),
headers: {
diff --git a/apps/webapp/src/hooks/create/useInitiatePasswordRecovery.tsx b/apps/webapp/src/hooks/create/useInitiatePasswordRecovery.tsx
new file mode 100644
index 000000000..73711c4b0
--- /dev/null
+++ b/apps/webapp/src/hooks/create/useInitiatePasswordRecovery.tsx
@@ -0,0 +1,45 @@
+import config from '@/lib/config';
+import { useMutation } from '@tanstack/react-query';
+import Cookies from 'js-cookie';
+
+const useInitiatePasswordRecovery = () => {
+ const call = async (data: {
+ email: string
+ }) => {
+ const response = await fetch(`${config.API_URL}/auth/forgot-password`, {
+ method: 'POST',
+ body: JSON.stringify(data),
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ if (!response.ok) {
+ const errorData = await response.json();
+ throw new Error(errorData.message || "Unknown error occurred");
+ }
+
+ return response.json();
+ };
+ const func = (data: {
+ email: string
+ }) => {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const result = await call(data);
+ resolve(result);
+
+ } catch (error) {
+ reject(error);
+ }
+ });
+ };
+ return {
+ mutationFn: useMutation({
+ mutationFn: call,
+ }),
+ func
+ }
+};
+
+export default useInitiatePasswordRecovery;
diff --git a/apps/webapp/src/hooks/create/useResetPassword.tsx b/apps/webapp/src/hooks/create/useResetPassword.tsx
new file mode 100644
index 000000000..88e272683
--- /dev/null
+++ b/apps/webapp/src/hooks/create/useResetPassword.tsx
@@ -0,0 +1,46 @@
+import config from '@/lib/config';
+import { useMutation } from '@tanstack/react-query';
+import Cookies from 'js-cookie';
+
+interface ResetPasswordData {
+ token: string;
+ newPassword: string;
+}
+
+const useResetPassword = () => {
+ const call = async (data: ResetPasswordData) => {
+ const response = await fetch(`${config.API_URL}/auth/reset-password`, {
+ method: 'POST',
+ body: JSON.stringify(data),
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ if (!response.ok) {
+ const errorData = await response.json();
+ throw new Error(errorData.message || "Unknown error occurred");
+ }
+
+ return response.json();
+ };
+ const func = (data: ResetPasswordData) => {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const result = await call(data);
+ resolve(result);
+
+ } catch (error) {
+ reject(error);
+ }
+ });
+ };
+ return {
+ mutationFn: useMutation({
+ mutationFn: call,
+ }),
+ func
+ }
+};
+
+export default useResetPassword;
diff --git a/apps/webapp/src/hooks/delete/useDeleteWebhook.tsx b/apps/webapp/src/hooks/delete/useDeleteWebhook.tsx
index 5ee7c13fb..5166e357a 100644
--- a/apps/webapp/src/hooks/delete/useDeleteWebhook.tsx
+++ b/apps/webapp/src/hooks/delete/useDeleteWebhook.tsx
@@ -8,7 +8,7 @@ interface IWebhookDto {
const useDeleteWebhook = () => {
const remove = async (webhookData: IWebhookDto) => {
- const response = await fetch(`${config.API_URL}/webhook/internal/${webhookData.id_webhook}`, {
+ const response = await fetch(`${config.API_URL}/webhooks/internal/${webhookData.id_webhook}`, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
diff --git a/apps/webapp/src/hooks/update/useUpdateWebhookStatus.tsx b/apps/webapp/src/hooks/update/useUpdateWebhookStatus.tsx
index 537c7b87b..21e73f625 100644
--- a/apps/webapp/src/hooks/update/useUpdateWebhookStatus.tsx
+++ b/apps/webapp/src/hooks/update/useUpdateWebhookStatus.tsx
@@ -8,7 +8,7 @@ interface IWebhookUpdateDto {
}
const useUpdateWebhookStatus = () => {
const update = async (data: IWebhookUpdateDto) => {
- const response = await fetch(`${config.API_URL}/webhook/internal/${data.id}`, {
+ const response = await fetch(`${config.API_URL}/webhooks/internal/${data.id}`, {
method: 'PUT',
body: JSON.stringify({active: data.active}),
headers: {
diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
index d61fae1c7..67065549b 100644
--- a/docker-compose.dev.yml
+++ b/docker-compose.dev.yml
@@ -42,6 +42,10 @@ services:
REDIS_PASS: ${REDIS_PASS}
REDIS_USER: ${REDIS_USER}
REDIS_PORT: ${REDIS_PORT}
+ MAIL_HOST: ${MAIL_HOST}
+ MAIL_USER: ${MAIL_USER}
+ MAIL_PASSWORD: ${MAIL_PASSWORD}
+ WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_DOMAIN}
#REDIS_TLS: 1 # set this variable to 1 when Redis is AWS hosted
REDIS_DB: ${REDIS_DB}
ENCRYPT_CRYPTO_SECRET_KEY: ${ENCRYPT_CRYPTO_SECRET_KEY}
diff --git a/docker-compose.source.yml b/docker-compose.source.yml
index da0ba4a5a..286afb072 100644
--- a/docker-compose.source.yml
+++ b/docker-compose.source.yml
@@ -42,7 +42,11 @@ services:
REDIS_HOST: ${REDIS_HOST}
REDIS_USER: ${REDIS_USER}
REDIS_PASS: ${REDIS_PASS}
+ MAIL_HOST: ${MAIL_HOST}
+ MAIL_USER: ${MAIL_USER}
+ MAIL_PASSWORD: ${MAIL_PASSWORD}
BACKEND_PORT: ${BACKEND_PORT}
+ WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_DOMAIN}
REDIS_DB: ${REDIS_DB}
ENCRYPT_CRYPTO_SECRET_KEY: ${ENCRYPT_CRYPTO_SECRET_KEY}
HUBSPOT_CRM_CLOUD_CLIENT_ID: ${HUBSPOT_CRM_CLOUD_CLIENT_ID}
diff --git a/docker-compose.yml b/docker-compose.yml
index f82c70f68..5c7339290 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -37,7 +37,11 @@ services:
REDIS_USER: ${REDIS_USER}
REDIS_PASS: ${REDIS_PASS}
REDIS_PORT: ${REDIS_PORT}
+ MAIL_HOST: ${MAIL_HOST}
+ MAIL_USER: ${MAIL_USER}
+ MAIL_PASSWORD: ${MAIL_PASSWORD}
REDIS_DB: ${REDIS_DB}
+ WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_DOMAIN}
ENCRYPT_CRYPTO_SECRET_KEY: ${ENCRYPT_CRYPTO_SECRET_KEY}
HUBSPOT_CRM_CLOUD_CLIENT_ID: ${HUBSPOT_CRM_CLOUD_CLIENT_ID}
HUBSPOT_CRM_CLOUD_CLIENT_SECRET: ${HUBSPOT_CRM_CLOUD_CLIENT_SECRET}
diff --git a/packages/api/package.json b/packages/api/package.json
index 5d893e17d..74929397e 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -97,7 +97,8 @@
"ts-loader": "^9.4.3",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
- "typescript": "^5.1.3"
+ "typescript": "^5.1.3",
+ "@nestjs-modules/mailer": "^2.0.2"
},
"jest": {
"moduleFileExtensions": [
diff --git a/packages/api/src/@core/@core-services/webhooks/panora-webhooks/dto/webhook.dto.ts b/packages/api/src/@core/@core-services/webhooks/panora-webhooks/dto/webhook.dto.ts
index 4de77415d..87c11c0c2 100644
--- a/packages/api/src/@core/@core-services/webhooks/panora-webhooks/dto/webhook.dto.ts
+++ b/packages/api/src/@core/@core-services/webhooks/panora-webhooks/dto/webhook.dto.ts
@@ -3,15 +3,21 @@ import { ApiProperty } from '@nestjs/swagger';
export class WebhookDto {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The endpoint url of the webhook.',
})
url: string;
- @ApiProperty({ type: String, description: 'The description of the webhook.' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The description of the webhook.',
+ })
description?: string;
@ApiProperty({
type: [String],
+ nullable: true,
description: 'The events that the webhook listen to.',
})
scope: string[];
@@ -24,56 +30,88 @@ export class EventPayload {
export class SignatureVerificationDto {
@ApiProperty({
type: Object,
+ additionalProperties: true,
+ nullable: true,
description: 'The payload event of the webhook.',
})
payload: { [key: string]: any };
- @ApiProperty({ type: String, description: 'The signature of the webhook.' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The signature of the webhook.',
+ })
signature: string;
- @ApiProperty({ type: String, description: 'The secret of the webhook.' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The secret of the webhook.',
+ })
secret: string;
}
export class WebhookResponse {
- @ApiProperty({ type: String, description: 'The unique UUID of the webhook.' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The unique UUID of the webhook.',
+ })
id_webhook_endpoint: string;
- @ApiProperty({ type: String, description: 'The description of the webhook.' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The description of the webhook.',
+ })
endpoint_description: string | null;
@ApiProperty({
type: String,
+ nullable: true,
description: 'The endpoint url of the webhook.',
})
url: string;
- @ApiProperty({ type: String, description: 'The secret of the webhook.' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The secret of the webhook.',
+ })
secret: string;
- @ApiProperty({ type: Boolean, description: 'The status of the webhook.' })
+ @ApiProperty({
+ type: Boolean,
+ nullable: true,
+ description: 'The status of the webhook.',
+ })
active: boolean;
@ApiProperty({
type: Date,
+ nullable: true,
+
description: 'The created date of the webhook.',
})
created_at: Date;
@ApiProperty({
type: [String],
+ nullable: true,
description: 'The events that the webhook listen to.',
})
scope: string[];
@ApiProperty({
type: String,
+ nullable: true,
description: 'The project id tied to the webhook.',
})
id_project: string;
@ApiProperty({
type: Date,
+ nullable: true,
description: 'The last update date of the webhook.',
})
last_update: Date | null;
diff --git a/packages/api/src/@core/@core-services/webhooks/panora-webhooks/webhook.controller.ts b/packages/api/src/@core/@core-services/webhooks/panora-webhooks/webhook.controller.ts
index 3c126d874..2cd7c732c 100644
--- a/packages/api/src/@core/@core-services/webhooks/panora-webhooks/webhook.controller.ts
+++ b/packages/api/src/@core/@core-services/webhooks/panora-webhooks/webhook.controller.ts
@@ -4,6 +4,7 @@ import { JwtAuthGuard } from '@@core/auth/guards/jwt-auth.guard';
import {
ApiGetArrayCustomResponse,
ApiPostCustomResponse,
+ ApiPostGenericJson,
} from '@@core/utils/dtos/openapi.respone.dto';
import {
Body,
@@ -23,7 +24,6 @@ import {
ApiTags,
} from '@nestjs/swagger';
import {
- EventPayload,
SignatureVerificationDto,
WebhookDto,
WebhookResponse,
@@ -156,7 +156,7 @@ export class WebhookController {
summary: 'Verify payload signature of the webhook',
})
@ApiBody({ type: SignatureVerificationDto })
- @ApiPostCustomResponse(EventPayload)
+ @ApiPostGenericJson('Dynamic event payload')
@UseGuards(ApiKeyAuthGuard)
@Post('verifyEvent')
async verifyPayloadSignature(@Body() data: SignatureVerificationDto) {
diff --git a/packages/api/src/@core/auth/auth.controller.ts b/packages/api/src/@core/auth/auth.controller.ts
index 01bc42004..61e05a879 100644
--- a/packages/api/src/@core/auth/auth.controller.ts
+++ b/packages/api/src/@core/auth/auth.controller.ts
@@ -25,7 +25,6 @@ import { RefreshDto } from './dto/refresh.dto';
import { ResetPasswordDto } from './dto/reset-password.dto';
import { RequestPasswordResetDto } from './dto/request-password-reset.dto';
-
@ApiTags('auth')
@ApiExcludeController()
@Controller('auth')
@@ -45,10 +44,15 @@ export class AuthController {
return this.authService.register(user);
}
- @ApiOperation({ operationId: 'requestPasswordReset', summary: 'Request Password Reset' })
+ @ApiOperation({
+ operationId: 'requestPasswordReset',
+ summary: 'Request Password Reset',
+ })
@ApiBody({ type: RequestPasswordResetDto })
@Post('password_reset_request')
- async requestPasswordReset(@Body() requestPasswordResetDto: RequestPasswordResetDto) {
+ async requestPasswordReset(
+ @Body() requestPasswordResetDto: RequestPasswordResetDto,
+ ) {
return this.authService.requestPasswordReset(requestPasswordResetDto);
}
diff --git a/packages/api/src/@core/auth/auth.module.ts b/packages/api/src/@core/auth/auth.module.ts
index 70577fec3..69fc9500e 100644
--- a/packages/api/src/@core/auth/auth.module.ts
+++ b/packages/api/src/@core/auth/auth.module.ts
@@ -8,6 +8,7 @@ import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { ApiKeyStrategy } from './strategies/auth-header-api-key.strategy';
import { JwtStrategy } from './strategies/jwt.strategy';
+import { MailModule } from '@@core/mailer/module';
@Module({
controllers: [AuthController],
@@ -22,6 +23,7 @@ import { JwtStrategy } from './strategies/jwt.strategy';
],
imports: [
PassportModule,
+ MailModule,
JwtModule.register({
secret: process.env.JWT_SECRET,
}),
diff --git a/packages/api/src/@core/auth/auth.service.ts b/packages/api/src/@core/auth/auth.service.ts
index ab18d4f17..8defe3eaa 100644
--- a/packages/api/src/@core/auth/auth.service.ts
+++ b/packages/api/src/@core/auth/auth.service.ts
@@ -1,19 +1,22 @@
import { LoggerService } from '@@core/@core-services/logger/logger.service';
import { ProjectsService } from '@@core/projects/projects.service';
-import { AuthError } from '@@core/utils/errors';
-import { Injectable, BadRequestException } from '@nestjs/common';
+import { MailerService } from '@nestjs-modules/mailer';
+import {
+ BadRequestException,
+ ConflictException,
+ Injectable,
+} from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import * as bcrypt from 'bcrypt';
import * as crypto from 'crypto';
+import * as nodemailer from 'nodemailer';
import { v4 as uuidv4 } from 'uuid';
import { PrismaService } from '../@core-services/prisma/prisma.service';
import { CreateUserDto } from './dto/create-user.dto';
import { LoginDto } from './dto/login.dto';
-import { VerifyUserDto } from './dto/verify-user.dto';
-import { ConflictException } from '@nestjs/common';
-import { ResetPasswordDto } from './dto/reset-password.dto';
import { RequestPasswordResetDto } from './dto/request-password-reset.dto';
-import * as nodemailer from 'nodemailer';
+import { ResetPasswordDto } from './dto/reset-password.dto';
+import { VerifyUserDto } from './dto/verify-user.dto';
@Injectable()
export class AuthService {
@@ -22,6 +25,7 @@ export class AuthService {
private projectService: ProjectsService,
private jwtService: JwtService,
private logger: LoggerService,
+ private mailerService: MailerService,
) {
this.logger.setContext(AuthService.name);
}
@@ -43,8 +47,11 @@ export class AuthService {
throw new BadRequestException('Invalid email or expired request');
}
- // Verify the reset token
- const isValidToken = await this.verifyResetToken(checkResetRequestIsValid.reset_token, reset_token);
+ // Verify the reset token
+ const isValidToken = await this.verifyResetToken(
+ checkResetRequestIsValid.reset_token,
+ reset_token,
+ );
if (!isValidToken) {
throw new BadRequestException('Invalid reset token');
@@ -54,7 +61,7 @@ export class AuthService {
const hashedPassword = await bcrypt.hash(new_password, 10);
// Update the user's password in the database
- const updatedPassword =await this.prisma.users.update({
+ const updatedPassword = await this.prisma.users.update({
where: { email },
data: { password_hash: hashedPassword },
});
@@ -62,16 +69,18 @@ export class AuthService {
return { message: 'Password reset successfully' };
}
- private async verifyResetToken(database_token: string, request_token: string): Promise {
- const isValidToken = await bcrypt.compare(request_token, database_token);
- return isValidToken;
+ private async verifyResetToken(
+ database_token: string,
+ request_token: string,
+ ): Promise {
+ const isValidToken = await bcrypt.compare(request_token, database_token);
+ return isValidToken;
}
-
async requestPasswordReset(requestPasswordResetDto: RequestPasswordResetDto) {
const { email } = requestPasswordResetDto;
- if (!email){
+ if (!email) {
throw new BadRequestException('Incorrect API request');
}
@@ -105,19 +114,19 @@ export class AuthService {
// Create a transporter object using the default SMTP transport
const transporter = nodemailer.createTransport({
- host: process.env.SMTP_HOST,
- port: Number(process.env.SMTP_PORT),
+ host: process.env.SMTP_HOST,
+ port: Number(process.env.SMTP_PORT),
//secure: false,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASSWORD,
- }
+ },
});
// Send mail with defined transport object
const info = await transporter.sendMail({
from: `${process.env.EMAIL_SENDING_ADDRESS}`,
- to: email,
+ to: email,
subject: 'Panora | Password Reset Request',
text: `You requested a password reset. Click the following link within one hour from now to reset your password: ${resetLink}`,
html: `You requested a password reset. Click the link to reset your password:
${resetLink} The link will expire after one hour
`,
@@ -126,8 +135,6 @@ export class AuthService {
this.logger.log(`Send reset email to ${email} with token ${resetToken}`);
}
-
-
async getUsers() {
try {
return await this.prisma.users.findMany();
@@ -156,11 +163,16 @@ export class AuthService {
async getApiKeys(project_id: string) {
try {
- return await this.prisma.api_keys.findMany({
+ const keys = await this.prisma.api_keys.findMany({
where: {
id_project: project_id,
},
});
+ const res = keys.map((key) => {
+ const { api_key_hash, ...rest } = key;
+ return rest;
+ });
+ return res;
} catch (error) {
throw error;
}
@@ -173,7 +185,9 @@ export class AuthService {
});
if (foundUser) {
- throw new ConflictException(`Email already exists. Try resetting your password.`);
+ throw new ConflictException(
+ `Email already exists. Try resetting your password.`,
+ );
}
return await this.createUser(user);
} catch (error) {
@@ -375,8 +389,6 @@ export class AuthService {
}
}
-
-
async getProjectIdForApiKey(apiKey: string) {
try {
// Decode the JWT to verify if it's valid and get the payload
@@ -431,4 +443,4 @@ export class AuthService {
throw error;
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/api/src/@core/auth/dto/password-recovery.dto.ts b/packages/api/src/@core/auth/dto/password-recovery.dto.ts
new file mode 100644
index 000000000..c42b85331
--- /dev/null
+++ b/packages/api/src/@core/auth/dto/password-recovery.dto.ts
@@ -0,0 +1,6 @@
+import { IsEmail } from 'class-validator';
+
+export class PasswordRecoveryDto {
+ @IsEmail()
+ email: string;
+}
diff --git a/packages/api/src/@core/auth/dto/reset-password.dto.ts b/packages/api/src/@core/auth/dto/reset-password.dto.ts
index 83e2483e4..8f7f2f706 100644
--- a/packages/api/src/@core/auth/dto/reset-password.dto.ts
+++ b/packages/api/src/@core/auth/dto/reset-password.dto.ts
@@ -15,4 +15,4 @@ export class ResetPasswordDto {
@IsString()
@IsNotEmpty()
reset_token: string;
-}
\ No newline at end of file
+}
diff --git a/packages/api/src/@core/connections-strategies/dto/delete-cs.dto.ts b/packages/api/src/@core/connections-strategies/dto/delete-cs.dto.ts
index 6bfe092d8..078db366c 100644
--- a/packages/api/src/@core/connections-strategies/dto/delete-cs.dto.ts
+++ b/packages/api/src/@core/connections-strategies/dto/delete-cs.dto.ts
@@ -1,6 +1,6 @@
import { ApiProperty } from '@nestjs/swagger';
export class DeleteCSDto {
- @ApiProperty()
+ @ApiProperty({ type: String })
id: string;
}
diff --git a/packages/api/src/@core/connections-strategies/dto/update-cs.dto.ts b/packages/api/src/@core/connections-strategies/dto/update-cs.dto.ts
index 66f307867..6dd5d76ca 100644
--- a/packages/api/src/@core/connections-strategies/dto/update-cs.dto.ts
+++ b/packages/api/src/@core/connections-strategies/dto/update-cs.dto.ts
@@ -1,12 +1,12 @@
import { ApiProperty } from '@nestjs/swagger';
export class UpdateCSDto {
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
id_cs: string;
- @ApiProperty()
+ @ApiProperty({ type: Boolean, nullable: true })
status: boolean;
- @ApiProperty()
+ @ApiProperty({ type: [String], nullable: true })
attributes: string[];
- @ApiProperty()
+ @ApiProperty({ type: [String], nullable: true })
values: string[];
}
diff --git a/packages/api/src/@core/field-mapping/dto/create-custom-field.dto.ts b/packages/api/src/@core/field-mapping/dto/create-custom-field.dto.ts
index d8de20e51..87abc4bf3 100644
--- a/packages/api/src/@core/field-mapping/dto/create-custom-field.dto.ts
+++ b/packages/api/src/@core/field-mapping/dto/create-custom-field.dto.ts
@@ -2,39 +2,127 @@ import { StandardObject } from '@@core/utils/types';
import { ApiProperty } from '@nestjs/swagger';
export class CustomFieldCreateDto {
- @ApiProperty({ type: String })
+ @ApiProperty({ type: String, nullable: true })
object_type_owner: StandardObject;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
name: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
description: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
data_type: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
source_custom_field_id: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
source_provider: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
linked_user_id: string;
}
export class DefineTargetFieldDto {
- @ApiProperty({ type: String })
+ @ApiProperty({ type: String, nullable: true })
object_type_owner: StandardObject;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
name: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
description: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
data_type: string;
}
export class MapFieldToProviderDto {
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true, description: 'Attribute Id' })
attributeId: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true, description: 'Attribute Id' })
source_custom_field_id: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true, description: 'Attribute Id' })
source_provider: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true, description: 'Attribute Id' })
linked_user_id: string;
}
+
+export class CustomFieldResponse {
+ @ApiProperty({ type: String, nullable: true, description: 'Attribute Id' })
+ id_attribute: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Status',
+ })
+ status: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Ressource Owner Type',
+ })
+ ressource_owner_type: string;
+
+ @ApiProperty({ type: String, nullable: true, description: 'Attribute Slug' })
+ slug: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Description',
+ })
+ description: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Data Type',
+ })
+ data_type: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Remote Id',
+ })
+ remote_id: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Source',
+ })
+ source: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Id Entity',
+ })
+ id_entity: string | null;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Id Project',
+ })
+ id_project: string;
+
+ @ApiProperty({ type: String, nullable: true, description: 'Attribute Scope' })
+ scope: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'Attribute Id Consumer',
+ })
+ id_consumer: string;
+
+ @ApiProperty({
+ type: Date,
+ nullable: true,
+ description: 'Attribute Created Date',
+ })
+ created_at: Date;
+
+ @ApiProperty({
+ type: Date,
+ nullable: true,
+ description: 'Attribute Modified Date',
+ })
+ modified_at: Date;
+}
diff --git a/packages/api/src/@core/field-mapping/field-mapping.controller.ts b/packages/api/src/@core/field-mapping/field-mapping.controller.ts
index 75c33f12a..8ffd3c345 100644
--- a/packages/api/src/@core/field-mapping/field-mapping.controller.ts
+++ b/packages/api/src/@core/field-mapping/field-mapping.controller.ts
@@ -11,6 +11,7 @@ import { LoggerService } from '../@core-services/logger/logger.service';
import { FieldMappingService } from './field-mapping.service';
import {
CustomFieldCreateDto,
+ CustomFieldResponse,
DefineTargetFieldDto,
MapFieldToProviderDto,
} from './dto/create-custom-field.dto';
@@ -22,6 +23,7 @@ import {
ApiExcludeEndpoint,
} from '@nestjs/swagger';
import { JwtAuthGuard } from '@@core/auth/guards/jwt-auth.guard';
+import { ApiPostCustomResponse } from '@@core/utils/dtos/openapi.respone.dto';
@ApiTags('fieldMappings')
@Controller('field_mappings')
@@ -75,7 +77,7 @@ export class FieldMappingController {
summary: 'Define target Field',
})
@ApiBody({ type: DefineTargetFieldDto })
- @ApiResponse({ status: 201 })
+ @ApiPostCustomResponse(CustomFieldResponse)
//define target field on our unified model
@Post('define')
@UseGuards(JwtAuthGuard)
@@ -95,7 +97,7 @@ export class FieldMappingController {
summary: 'Create Custom Field',
})
@ApiBody({ type: CustomFieldCreateDto })
- @ApiResponse({ status: 201 })
+ @ApiPostCustomResponse(CustomFieldResponse)
@Post()
@UseGuards(JwtAuthGuard)
createCustomField(@Request() req: any, @Body() data: CustomFieldCreateDto) {
@@ -105,7 +107,7 @@ export class FieldMappingController {
@ApiOperation({ operationId: 'map', summary: 'Map Custom Field' })
@ApiBody({ type: MapFieldToProviderDto })
- @ApiResponse({ status: 201 })
+ @ApiPostCustomResponse(CustomFieldResponse)
@UseGuards(JwtAuthGuard)
@Post('map')
mapFieldToProvider(@Body() mapFieldToProviderDto: MapFieldToProviderDto) {
diff --git a/packages/api/src/@core/linked-users/dto/create-linked-user.dto.ts b/packages/api/src/@core/linked-users/dto/create-linked-user.dto.ts
index 580154844..913006b64 100644
--- a/packages/api/src/@core/linked-users/dto/create-linked-user.dto.ts
+++ b/packages/api/src/@core/linked-users/dto/create-linked-user.dto.ts
@@ -1,15 +1,29 @@
import { ApiProperty } from '@nestjs/swagger';
export class CreateLinkedUserDto {
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
linked_user_origin_id: string;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
alias: string;
}
export class CreateBatchLinkedUserDto {
- @ApiProperty()
+ @ApiProperty({ type: [String], nullable: true })
linked_user_origin_ids: string[];
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
alias: string;
}
+
+export class LinkedUserResponse {
+ @ApiProperty({ type: String, nullable: true })
+ id_linked_user: string;
+
+ @ApiProperty({ type: String, nullable: true })
+ linked_user_origin_id: string;
+
+ @ApiProperty({ type: String, nullable: true })
+ alias: string;
+
+ @ApiProperty({ type: String, nullable: true })
+ id_project: string;
+}
diff --git a/packages/api/src/@core/linked-users/linked-users.controller.ts b/packages/api/src/@core/linked-users/linked-users.controller.ts
index 62434e48b..3d0bcd40b 100644
--- a/packages/api/src/@core/linked-users/linked-users.controller.ts
+++ b/packages/api/src/@core/linked-users/linked-users.controller.ts
@@ -12,6 +12,7 @@ import { LoggerService } from '../@core-services/logger/logger.service';
import {
CreateBatchLinkedUserDto,
CreateLinkedUserDto,
+ LinkedUserResponse,
} from './dto/create-linked-user.dto';
import {
ApiBody,
@@ -23,6 +24,12 @@ import {
} from '@nestjs/swagger';
import { JwtAuthGuard } from '@@core/auth/guards/jwt-auth.guard';
import { ApiKeyAuthGuard } from '@@core/auth/guards/api-key.guard';
+import {
+ ApiGetArrayCustomResponse,
+ ApiGetCustomResponse,
+ ApiPostArrayCustomResponse,
+ ApiPostCustomResponse,
+} from '@@core/utils/dtos/openapi.respone.dto';
@ApiTags('linkedUsers')
@Controller('linked_users')
@@ -36,7 +43,7 @@ export class LinkedUsersController {
@ApiOperation({ operationId: 'createLinkedUser', summary: 'Create Linked Users' })
@ApiBody({ type: CreateLinkedUserDto })
- @ApiResponse({ status: 201 })
+ @ApiPostCustomResponse(LinkedUserResponse)
@UseGuards(ApiKeyAuthGuard)
@Post()
addLinkedUser(
@@ -55,7 +62,7 @@ export class LinkedUsersController {
summary: 'Add Batch Linked Users',
})
@ApiBody({ type: CreateBatchLinkedUserDto })
- @ApiResponse({ status: 201 })
+ @ApiPostArrayCustomResponse(LinkedUserResponse)
@UseGuards(ApiKeyAuthGuard)
@Post('batch')
addBatchLinkedUsers(
@@ -70,7 +77,7 @@ export class LinkedUsersController {
operationId: 'listLinkedUsers',
summary: 'List Linked Users',
})
- @ApiResponse({ status: 200 })
+ @ApiGetArrayCustomResponse(LinkedUserResponse)
@UseGuards(ApiKeyAuthGuard)
@Get()
fetchLinkedUsers(@Request() req: any) {
@@ -83,7 +90,7 @@ export class LinkedUsersController {
summary: 'Retrieve Linked Users',
})
@ApiQuery({ name: 'id', required: true, type: String })
- @ApiResponse({ status: 200 })
+ @ApiGetCustomResponse(LinkedUserResponse)
@UseGuards(ApiKeyAuthGuard)
@Get('single')
getLinkedUser(@Query('id') id: string) {
@@ -96,7 +103,7 @@ export class LinkedUsersController {
summary: 'Retrieve a Linked User From A Remote Id',
})
@ApiQuery({ name: 'remoteId', required: true, type: String })
- @ApiResponse({ status: 200 })
+ @ApiGetCustomResponse(LinkedUserResponse)
@UseGuards(ApiKeyAuthGuard)
@Get('fromRemoteId')
linkedUserFromRemoteId(@Query('remoteId') id: string) {
diff --git a/packages/api/src/@core/mailer/module.ts b/packages/api/src/@core/mailer/module.ts
new file mode 100644
index 000000000..ca0789d90
--- /dev/null
+++ b/packages/api/src/@core/mailer/module.ts
@@ -0,0 +1,32 @@
+// src/mailer/mailer.module.ts
+
+import { Module } from '@nestjs/common';
+import { MailerModule } from '@nestjs-modules/mailer';
+import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter';
+import { join } from 'path';
+
+@Module({
+ imports: [
+ MailerModule.forRoot({
+ transport: {
+ host: process.env.MAIL_HOST,
+ secure: false,
+ auth: {
+ user: process.env.MAIL_USER,
+ pass: process.env.MAIL_PASSWORD,
+ },
+ },
+ defaults: {
+ from: '"No Reply" ',
+ },
+ template: {
+ dir: join(__dirname, 'templates'),
+ adapter: new HandlebarsAdapter(),
+ options: {
+ strict: true,
+ },
+ },
+ }),
+ ],
+})
+export class MailModule {}
diff --git a/packages/api/src/@core/mailer/templates/password-reset.hbs b/packages/api/src/@core/mailer/templates/password-reset.hbs
new file mode 100644
index 000000000..79d519751
--- /dev/null
+++ b/packages/api/src/@core/mailer/templates/password-reset.hbs
@@ -0,0 +1,18 @@
+
+
+
+
+ Password Reset
+
+
+ Hello {{name}},
+ We received a request to reset your password. If you didn't make this request, you can ignore this email.
+ To reset your password, please click the link below:
+ Reset Password
+ This link will expire in 1 hour.
+ If you're having trouble clicking the link, you can copy and paste the following URL into your browser:
+ {{resetUrl}}
+ Thank you,
+ Your Application Team
+
+
\ No newline at end of file
diff --git a/packages/api/src/@core/passthrough/dto/passthrough.dto.ts b/packages/api/src/@core/passthrough/dto/passthrough.dto.ts
index 728a557fe..576a63088 100644
--- a/packages/api/src/@core/passthrough/dto/passthrough.dto.ts
+++ b/packages/api/src/@core/passthrough/dto/passthrough.dto.ts
@@ -11,10 +11,16 @@ enum Action {
export class PassThroughRequestDto {
@ApiProperty({ name: 'method', enum: Action })
method: Action;
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
path: string;
- @ApiProperty()
+ @ApiProperty({
+ oneOf: [
+ { type: 'object', additionalProperties: true },
+ { type: 'array', items: { type: 'object', additionalProperties: true } },
+ ],
+ nullable: true,
+ })
data?: Record | Record[];
- @ApiProperty()
+ @ApiProperty({ type: Object, additionalProperties: true, nullable: true })
headers?: Record;
}
diff --git a/packages/api/src/@core/passthrough/passthrough.controller.ts b/packages/api/src/@core/passthrough/passthrough.controller.ts
index 442588a36..5ee0b43fb 100644
--- a/packages/api/src/@core/passthrough/passthrough.controller.ts
+++ b/packages/api/src/@core/passthrough/passthrough.controller.ts
@@ -10,6 +10,7 @@ import {
ApiResponse,
ApiTags,
} from '@nestjs/swagger';
+import { ApiPostCustomResponse } from '@@core/utils/dtos/openapi.respone.dto';
@ApiTags('passthrough')
@Controller('passthrough')
@@ -29,7 +30,7 @@ export class PassthroughController {
@ApiQuery({ name: 'linkedUserId', required: true, type: String })
@ApiQuery({ name: 'vertical', required: true, type: String })
@ApiBody({ type: PassThroughRequestDto })
- @ApiResponse({ status: 200, type: PassThroughResponse })
+ @ApiPostCustomResponse(PassThroughResponse)
@Post()
async passthroughRequest(
@Query('integrationId') integrationId: string,
diff --git a/packages/api/src/@core/passthrough/types/index.ts b/packages/api/src/@core/passthrough/types/index.ts
index d7e329d0b..77a2c5a5d 100644
--- a/packages/api/src/@core/passthrough/types/index.ts
+++ b/packages/api/src/@core/passthrough/types/index.ts
@@ -1,11 +1,11 @@
import { ApiProperty } from '@nestjs/swagger';
export class PassThroughResponse {
- @ApiProperty()
+ @ApiProperty({ type: String, nullable: true })
url: string;
- @ApiProperty()
+ @ApiProperty({ type: Number, nullable: true })
status: number;
- @ApiProperty()
+ @ApiProperty({ type: Object, nullable: true })
data: any;
// Define the properties here
}
diff --git a/packages/api/src/@core/sync/sync.controller.ts b/packages/api/src/@core/sync/sync.controller.ts
index 2d560a2fc..03e5aa6d5 100644
--- a/packages/api/src/@core/sync/sync.controller.ts
+++ b/packages/api/src/@core/sync/sync.controller.ts
@@ -1,10 +1,28 @@
+import { JwtAuthGuard } from '@@core/auth/guards/jwt-auth.guard';
import { Body, Controller, Get, Param, Post, UseGuards } from '@nestjs/common';
-import { CoreSyncService } from './sync.service';
+import {
+ ApiOperation,
+ ApiProperty,
+ ApiResponse,
+ ApiTags,
+} from '@nestjs/swagger';
import { LoggerService } from '../@core-services/logger/logger.service';
-import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
-import { ApiKeyAuthGuard } from '@@core/auth/guards/api-key.guard';
-import { JwtAuthGuard } from '@@core/auth/guards/jwt-auth.guard';
+import { CoreSyncService } from './sync.service';
+import { ApiPostCustomResponse } from '@@core/utils/dtos/openapi.respone.dto';
+
+export class ResyncStatusDto {
+ @ApiProperty({ type: Date, nullable: true })
+ timestamp: Date;
+ @ApiProperty({ type: String, nullable: true })
+ vertical: string;
+
+ @ApiProperty({ type: String, nullable: true })
+ provider: string;
+
+ @ApiProperty({ type: String, nullable: true })
+ status: string;
+}
@ApiTags('sync')
@Controller('sync')
export class SyncController {
@@ -30,7 +48,7 @@ export class SyncController {
operationId: 'resync',
summary: 'Resync common objects across a vertical',
})
- @ApiResponse({ status: 200 })
+ @ApiPostCustomResponse(ResyncStatusDto)
@UseGuards(JwtAuthGuard)
@Post('resync')
async resync(
diff --git a/packages/api/src/@core/utils/dtos/openapi.respone.dto.ts b/packages/api/src/@core/utils/dtos/openapi.respone.dto.ts
index cd539f007..fa7f8d0d3 100644
--- a/packages/api/src/@core/utils/dtos/openapi.respone.dto.ts
+++ b/packages/api/src/@core/utils/dtos/openapi.respone.dto.ts
@@ -44,6 +44,34 @@ export const ApiPostCustomResponse = >(
}),
);
+export const ApiPostGenericJson = (description: string) => {
+ return applyDecorators(
+ ApiOkResponse({
+ schema: {
+ properties: {
+ data: {
+ type: 'object',
+ additionalProperties: true,
+ description: description,
+ },
+ },
+ },
+ }),
+ );
+};
+export const ApiPostArrayCustomResponse = >(
+ dataDto: DataDto,
+) =>
+ applyDecorators(
+ ApiExtraModels(dataDto),
+ ApiCreatedResponse({
+ schema: {
+ type: 'array',
+ items: { $ref: getSchemaPath(dataDto) },
+ },
+ }),
+ );
+
export class PaginatedDto {
@ApiProperty()
prev_cursor: string;
diff --git a/packages/api/src/app.controller.ts b/packages/api/src/app.controller.ts
index 2c4f39221..34196752e 100644
--- a/packages/api/src/app.controller.ts
+++ b/packages/api/src/app.controller.ts
@@ -1,7 +1,8 @@
import { LoggerService } from '@@core/@core-services/logger/logger.service';
import { Controller, Get } from '@nestjs/common';
-import { ApiOperation } from '@nestjs/swagger';
+import { ApiOperation, ApiResponse } from '@nestjs/swagger';
import { AppService } from './app.service';
+import { ApiGetCustomResponse } from '@@core/utils/dtos/openapi.respone.dto';
@Controller()
export class AppController {
@@ -13,12 +14,14 @@ export class AppController {
}
@ApiOperation({ operationId: 'hello' })
+ @ApiGetCustomResponse(String)
@Get()
hello(): string {
return this.appService.getHello();
}
@ApiOperation({ operationId: 'health' })
+ @ApiGetCustomResponse(Number)
@Get('health')
health(): number {
return 200;
diff --git a/packages/api/src/ats/@lib/@types/index.ts b/packages/api/src/ats/@lib/@types/index.ts
index d4382617a..bc346f2c4 100644
--- a/packages/api/src/ats/@lib/@types/index.ts
+++ b/packages/api/src/ats/@lib/@types/index.ts
@@ -146,6 +146,7 @@ export type IAtsService =
export class Email {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The email address',
})
@IsString()
@@ -153,6 +154,7 @@ export class Email {
@ApiProperty({
type: String,
+ nullable: true,
description:
'The email address type. Authorized values are either PERSONAL or WORK.',
})
@@ -164,6 +166,7 @@ export class Email {
export class Phone {
@ApiProperty({
type: String,
+ nullable: true,
description:
'The phone number starting with a plus (+) followed by the country code (e.g +336676778890 for France)',
})
@@ -172,6 +175,7 @@ export class Phone {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The phone type. Authorized values are either MOBILE or WORK',
})
@IsIn(['MOBILE', 'WORK'])
@@ -180,6 +184,20 @@ export class Phone {
}
export class Url {
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The url.',
+ })
+ @IsString()
url: string;
+
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description:
+ 'The url type. It takes [WEBSITE | BLOG | LINKEDIN | GITHUB | OTHER]',
+ })
+ @IsString()
url_type: 'WEBSITE' | 'BLOG' | 'LINKEDIN' | 'GITHUB' | 'OTHER' | string;
}
diff --git a/packages/api/src/ats/activity/types/model.unified.ts b/packages/api/src/ats/activity/types/model.unified.ts
index f53a49ea6..415b58112 100644
--- a/packages/api/src/ats/activity/types/model.unified.ts
+++ b/packages/api/src/ats/activity/types/model.unified.ts
@@ -11,13 +11,18 @@ export type ActivityType = 'NOTE' | 'EMAIL' | 'OTHER';
export type ActivityVisibility = 'ADMIN_ONLY' | 'PUBLIC' | 'PRIVATE';
export class UnifiedAtsActivityInput {
- @ApiPropertyOptional({ type: String, description: 'The type of activity' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The type of activity',
+ })
@IsIn(['NOTE', 'EMAIL', 'OTHER'])
@IsOptional()
activity_type?: ActivityType | string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The subject of the activity',
})
@IsString()
@@ -26,6 +31,7 @@ export class UnifiedAtsActivityInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The body of the activity',
})
@IsString()
@@ -34,6 +40,7 @@ export class UnifiedAtsActivityInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The visibility of the activity',
})
@IsIn(['ADMIN_ONLY', 'PUBLIC', 'PRIVATE'])
@@ -42,6 +49,7 @@ export class UnifiedAtsActivityInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -49,8 +57,8 @@ export class UnifiedAtsActivityInput {
candidate_id?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The remote creation date of the activity',
})
@IsDateString()
@@ -58,7 +66,9 @@ export class UnifiedAtsActivityInput {
remote_created_at?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -69,6 +79,7 @@ export class UnifiedAtsActivityInput {
export class UnifiedAtsActivityOutput extends UnifiedAtsActivityInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the activity',
})
@IsUUID()
@@ -77,6 +88,7 @@ export class UnifiedAtsActivityOutput extends UnifiedAtsActivityInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the activity in the context of the 3rd Party',
})
@@ -85,7 +97,9 @@ export class UnifiedAtsActivityOutput extends UnifiedAtsActivityInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the activity in the context of the 3rd Party',
})
@@ -93,16 +107,18 @@ export class UnifiedAtsActivityOutput extends UnifiedAtsActivityInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/application/services/application.service.ts b/packages/api/src/ats/application/services/application.service.ts
index e8a8b27fe..c1ea3ed41 100644
--- a/packages/api/src/ats/application/services/application.service.ts
+++ b/packages/api/src/ats/application/services/application.service.ts
@@ -324,71 +324,73 @@ export class ApplicationService {
prev_cursor = Buffer.from(cursor).toString('base64');
}
- const unifiedApplications: UnifiedAtsApplicationOutput[] = await Promise.all(
- applications.map(async (application) => {
- const values = await this.prisma.value.findMany({
- where: {
- entity: { ressource_owner_id: application.id_ats_application },
- },
- include: { attribute: true },
- });
-
- const fieldMappingsMap = new Map();
- values.forEach((value) => {
- fieldMappingsMap.set(value.attribute.slug, value.data);
- });
-
- const field_mappings = Array.from(
- fieldMappingsMap,
- ([key, value]) => ({ [key]: value }),
- );
+ const unifiedApplications: UnifiedAtsApplicationOutput[] =
+ await Promise.all(
+ applications.map(async (application) => {
+ const values = await this.prisma.value.findMany({
+ where: {
+ entity: { ressource_owner_id: application.id_ats_application },
+ },
+ include: { attribute: true },
+ });
- const resOffers = await this.prisma.ats_offers.findMany({
- where: {
- id_ats_application: application.id_ats_application,
- },
- });
- let offers;
- if (resOffers && resOffers.length > 0) {
- offers = resOffers.map((off) => {
- return off.id_ats_offer;
+ const fieldMappingsMap = new Map();
+ values.forEach((value) => {
+ fieldMappingsMap.set(value.attribute.slug, value.data);
});
- }
-
- return {
- id: application.id_ats_application,
- applied_at: String(application.applied_at) || null,
- rejected_at: String(application.rejected_at) || null,
- offers: offers || null,
- source: application.source || null,
- credited_to: application.credited_to || null,
- current_stage: application.current_stage || null,
- reject_reason: application.reject_reason || null,
- candidate_id: application.id_ats_candidate || null,
- job_id: application.id_ats_job || null,
- field_mappings: field_mappings,
- remote_id: application.remote_id || null,
- created_at: application.created_at || null,
- modified_at: application.modified_at || null,
- remote_created_at: null,
- remote_modified_at: null,
- };
- }),
- );
- let res: UnifiedAtsApplicationOutput[] = unifiedApplications;
+ const field_mappings = Array.from(
+ fieldMappingsMap,
+ ([key, value]) => ({ [key]: value }),
+ );
- if (remote_data) {
- const remote_array_data: UnifiedAtsApplicationOutput[] = await Promise.all(
- res.map(async (application) => {
- const resp = await this.prisma.remote_data.findFirst({
- where: { ressource_owner_id: application.id },
+ const resOffers = await this.prisma.ats_offers.findMany({
+ where: {
+ id_ats_application: application.id_ats_application,
+ },
});
- const remote_data = JSON.parse(resp.data);
- return { ...application, remote_data };
+ let offers;
+ if (resOffers && resOffers.length > 0) {
+ offers = resOffers.map((off) => {
+ return off.id_ats_offer;
+ });
+ }
+
+ return {
+ id: application.id_ats_application,
+ applied_at: String(application.applied_at) || null,
+ rejected_at: String(application.rejected_at) || null,
+ offers: offers || null,
+ source: application.source || null,
+ credited_to: application.credited_to || null,
+ current_stage: application.current_stage || null,
+ reject_reason: application.reject_reason || null,
+ candidate_id: application.id_ats_candidate || null,
+ job_id: application.id_ats_job || null,
+ field_mappings: field_mappings,
+ remote_id: application.remote_id || null,
+ created_at: application.created_at || null,
+ modified_at: application.modified_at || null,
+ remote_created_at: null,
+ remote_modified_at: null,
+ };
}),
);
+ let res: UnifiedAtsApplicationOutput[] = unifiedApplications;
+
+ if (remote_data) {
+ const remote_array_data: UnifiedAtsApplicationOutput[] =
+ await Promise.all(
+ res.map(async (application) => {
+ const resp = await this.prisma.remote_data.findFirst({
+ where: { ressource_owner_id: application.id },
+ });
+ const remote_data = JSON.parse(resp.data);
+ return { ...application, remote_data };
+ }),
+ );
+
res = remote_array_data;
}
diff --git a/packages/api/src/ats/application/types/model.unified.ts b/packages/api/src/ats/application/types/model.unified.ts
index c664882f8..7dbd102a6 100644
--- a/packages/api/src/ats/application/types/model.unified.ts
+++ b/packages/api/src/ats/application/types/model.unified.ts
@@ -9,8 +9,8 @@ import {
export class UnifiedAtsApplicationInput {
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The application date',
})
@IsDateString()
@@ -18,8 +18,8 @@ export class UnifiedAtsApplicationInput {
applied_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The rejection date',
})
@IsDateString()
@@ -28,6 +28,7 @@ export class UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The offers UUIDs for the application',
})
@IsArray()
@@ -36,6 +37,7 @@ export class UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The source of the application',
})
@IsString()
@@ -44,6 +46,7 @@ export class UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the person credited for the application',
})
@IsUUID()
@@ -52,6 +55,7 @@ export class UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the current stage of the application',
})
@IsUUID()
@@ -60,6 +64,7 @@ export class UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The rejection reason for the application',
})
@IsString()
@@ -68,6 +73,7 @@ export class UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -80,7 +86,9 @@ export class UnifiedAtsApplicationInput {
job_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -91,6 +99,7 @@ export class UnifiedAtsApplicationInput {
export class UnifiedAtsApplicationOutput extends UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the application',
})
@IsUUID()
@@ -99,6 +108,7 @@ export class UnifiedAtsApplicationOutput extends UnifiedAtsApplicationInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the application in the context of the 3rd Party',
})
@@ -107,7 +117,9 @@ export class UnifiedAtsApplicationOutput extends UnifiedAtsApplicationInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the application in the context of the 3rd Party',
})
@@ -115,19 +127,34 @@ export class UnifiedAtsApplicationOutput extends UnifiedAtsApplicationInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
- remote_created_at: string;
- remote_modified_at: string;
+ @ApiPropertyOptional({
+ type: Date,
+ nullable: true,
+ description: 'The remote created date of the object',
+ })
+ @IsOptional()
+ remote_created_at?: string;
+
+ @ApiPropertyOptional({
+ type: Date,
+ nullable: true,
+ description: 'The remote modified date of the object',
+ })
+ @IsOptional()
+ remote_modified_at?: string;
}
diff --git a/packages/api/src/ats/attachment/types/model.unified.ts b/packages/api/src/ats/attachment/types/model.unified.ts
index 2a7ba6056..39428facc 100644
--- a/packages/api/src/ats/attachment/types/model.unified.ts
+++ b/packages/api/src/ats/attachment/types/model.unified.ts
@@ -13,24 +13,36 @@ export type AttachmentType =
| 'OFFER_LETTER'
| 'OTHER';
export class UnifiedAtsAttachmentInput {
- @ApiPropertyOptional({ type: String, description: 'The URL of the file' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The URL of the file',
+ })
@IsString()
@IsOptional()
file_url?: string;
- @ApiPropertyOptional({ type: String, description: 'The name of the file' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The name of the file',
+ })
@IsString()
@IsOptional()
file_name?: string;
- @ApiPropertyOptional({ type: String, description: 'The type of the file' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The type of the file',
+ })
@IsIn(['RESUME', 'COVER_LETTER', 'OFFER_LETTER', 'OTHER'])
@IsOptional()
attachment_type?: AttachmentType | string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The remote creation date of the attachment',
})
@IsDateString()
@@ -38,8 +50,8 @@ export class UnifiedAtsAttachmentInput {
remote_created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The remote modification date of the attachment',
})
@IsDateString()
@@ -48,6 +60,7 @@ export class UnifiedAtsAttachmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -55,7 +68,9 @@ export class UnifiedAtsAttachmentInput {
candidate_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -66,6 +81,7 @@ export class UnifiedAtsAttachmentInput {
export class UnifiedAtsAttachmentOutput extends UnifiedAtsAttachmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the attachment',
})
@IsUUID()
@@ -74,6 +90,7 @@ export class UnifiedAtsAttachmentOutput extends UnifiedAtsAttachmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The remote ID of the attachment',
})
@IsString()
@@ -81,7 +98,9 @@ export class UnifiedAtsAttachmentOutput extends UnifiedAtsAttachmentInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the attachment in the context of the 3rd Party',
})
@@ -89,16 +108,18 @@ export class UnifiedAtsAttachmentOutput extends UnifiedAtsAttachmentInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/candidate/types/model.unified.ts b/packages/api/src/ats/candidate/types/model.unified.ts
index 95132edb8..c38db4f41 100644
--- a/packages/api/src/ats/candidate/types/model.unified.ts
+++ b/packages/api/src/ats/candidate/types/model.unified.ts
@@ -14,6 +14,7 @@ import {
export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The first name of the candidate',
})
@IsString()
@@ -22,6 +23,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The last name of the candidate',
})
@IsString()
@@ -30,6 +32,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The company of the candidate',
})
@IsString()
@@ -38,6 +41,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The title of the candidate',
})
@IsString()
@@ -46,6 +50,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The locations of the candidate',
})
@IsString()
@@ -54,6 +59,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: Boolean,
+ nullable: true,
description: 'Whether the candidate is private',
})
@IsBoolean()
@@ -62,6 +68,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: Boolean,
+ nullable: true,
description: 'Whether the candidate is reachable by email',
})
@IsBoolean()
@@ -69,8 +76,8 @@ export class UnifiedAtsCandidateInput {
email_reachable?: boolean;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The remote creation date of the candidate',
})
@IsDateString()
@@ -78,8 +85,8 @@ export class UnifiedAtsCandidateInput {
remote_created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The remote modification date of the candidate',
})
@IsDateString()
@@ -87,8 +94,8 @@ export class UnifiedAtsCandidateInput {
remote_modified_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The last interaction date with the candidate',
})
@IsDateString()
@@ -97,6 +104,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The attachments UUIDs of the candidate',
})
@IsString({ each: true })
@@ -105,6 +113,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The applications UUIDs of the candidate',
})
@IsString({ each: true })
@@ -113,6 +122,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The tags of the candidate',
})
@IsString({ each: true })
@@ -121,6 +131,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: [Url],
+ nullable: true,
description:
'The urls of the candidate, possible values for Url type are WEBSITE, BLOG, LINKEDIN, GITHUB, or OTHER',
})
@@ -129,6 +140,7 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: [Phone],
+ nullable: true,
description: 'The phone numbers of the candidate',
})
@IsOptional()
@@ -136,13 +148,16 @@ export class UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: [Email],
+ nullable: true,
description: 'The email addresses of the candidate',
})
@IsOptional()
email_addresses?: Email[];
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -153,6 +168,7 @@ export class UnifiedAtsCandidateInput {
export class UnifiedAtsCandidateOutput extends UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -161,6 +177,7 @@ export class UnifiedAtsCandidateOutput extends UnifiedAtsCandidateInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the candidate in the context of the 3rd Party',
})
@IsString()
@@ -168,7 +185,9 @@ export class UnifiedAtsCandidateOutput extends UnifiedAtsCandidateInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the candidate in the context of the 3rd Party',
})
@@ -176,34 +195,44 @@ export class UnifiedAtsCandidateOutput extends UnifiedAtsCandidateInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
export class UnifiedCandidateUrlInput {
- @ApiPropertyOptional({ type: String, description: 'The value of the URL' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The value of the URL',
+ })
@IsString()
@IsOptional()
value?: string;
- @ApiPropertyOptional({ type: String, description: 'The type of the URL' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The type of the URL',
+ })
@IsString()
@IsOptional()
type?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The creation date of the URL',
})
@IsDateString()
@@ -211,8 +240,8 @@ export class UnifiedCandidateUrlInput {
created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The modification date of the URL',
})
@IsDateString()
@@ -221,6 +250,7 @@ export class UnifiedCandidateUrlInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -229,13 +259,18 @@ export class UnifiedCandidateUrlInput {
}
export class UnifiedCandidateUrlOutput extends UnifiedCandidateUrlInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the URL' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the URL',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The remote ID of the URL in the context of the 3rd Party',
})
@IsString()
@@ -243,7 +278,9 @@ export class UnifiedCandidateUrlOutput extends UnifiedCandidateUrlInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the URL in the context of the 3rd Party',
})
@IsOptional()
@@ -251,13 +288,18 @@ export class UnifiedCandidateUrlOutput extends UnifiedCandidateUrlInput {
}
export class UnifiedCandidatePhoneNumberInput {
- @ApiPropertyOptional({ type: String, description: 'The phone number value' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The phone number value',
+ })
@IsString()
@IsOptional()
value?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The type of phone number',
})
@IsString()
@@ -265,8 +307,8 @@ export class UnifiedCandidatePhoneNumberInput {
type?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The creation date of the phone number',
})
@IsDateString()
@@ -274,8 +316,8 @@ export class UnifiedCandidatePhoneNumberInput {
created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The modification date of the phone number',
})
@IsDateString()
@@ -284,6 +326,7 @@ export class UnifiedCandidatePhoneNumberInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -294,6 +337,7 @@ export class UnifiedCandidatePhoneNumberInput {
export class UnifiedCandidatePhoneNumberOutput extends UnifiedCandidatePhoneNumberInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the phone number',
})
@IsUUID()
@@ -302,6 +346,7 @@ export class UnifiedCandidatePhoneNumberOutput extends UnifiedCandidatePhoneNumb
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the phone number in the context of the 3rd Party',
})
@@ -310,7 +355,9 @@ export class UnifiedCandidatePhoneNumberOutput extends UnifiedCandidatePhoneNumb
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the phone number in the context of the 3rd Party',
})
@@ -326,6 +373,7 @@ export class UnifiedCandidateEmailAddressInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The type of email address',
})
@IsString()
@@ -333,8 +381,8 @@ export class UnifiedCandidateEmailAddressInput {
type?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The creation date of the email address',
})
@IsDateString()
@@ -342,8 +390,8 @@ export class UnifiedCandidateEmailAddressInput {
created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The modification date of the email address',
})
@IsDateString()
@@ -352,6 +400,7 @@ export class UnifiedCandidateEmailAddressInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -362,6 +411,7 @@ export class UnifiedCandidateEmailAddressInput {
export class UnifiedCandidateEmailAddressOutput extends UnifiedCandidateEmailAddressInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the email address',
})
@IsUUID()
@@ -370,6 +420,7 @@ export class UnifiedCandidateEmailAddressOutput extends UnifiedCandidateEmailAdd
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the email address in the context of the 3rd Party',
})
@@ -378,7 +429,9 @@ export class UnifiedCandidateEmailAddressOutput extends UnifiedCandidateEmailAdd
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the email address in the context of the 3rd Party',
})
diff --git a/packages/api/src/ats/department/types/model.unified.ts b/packages/api/src/ats/department/types/model.unified.ts
index 190c94e00..0c8623fb9 100644
--- a/packages/api/src/ats/department/types/model.unified.ts
+++ b/packages/api/src/ats/department/types/model.unified.ts
@@ -4,6 +4,7 @@ import { IsUUID, IsOptional, IsString, IsDateString } from 'class-validator';
export class UnifiedAtsDepartmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The name of the department',
})
@IsString()
@@ -11,7 +12,9 @@ export class UnifiedAtsDepartmentInput {
name?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -22,6 +25,7 @@ export class UnifiedAtsDepartmentInput {
export class UnifiedAtsDepartmentOutput extends UnifiedAtsDepartmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the department',
})
@IsUUID()
@@ -30,6 +34,7 @@ export class UnifiedAtsDepartmentOutput extends UnifiedAtsDepartmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the department in the context of the 3rd Party',
})
@@ -38,7 +43,9 @@ export class UnifiedAtsDepartmentOutput extends UnifiedAtsDepartmentInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the department in the context of the 3rd Party',
})
@@ -46,16 +53,18 @@ export class UnifiedAtsDepartmentOutput extends UnifiedAtsDepartmentInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/eeocs/types/model.unified.ts b/packages/api/src/ats/eeocs/types/model.unified.ts
index c38921e5e..88b15ca38 100644
--- a/packages/api/src/ats/eeocs/types/model.unified.ts
+++ b/packages/api/src/ats/eeocs/types/model.unified.ts
@@ -37,6 +37,7 @@ export type EeocsVeteranStatus =
export class UnifiedAtsEeocsInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -46,6 +47,7 @@ export class UnifiedAtsEeocsInput {
@ApiPropertyOptional({
type: String,
format: 'date-time',
+ nullable: true,
description: 'The submission date of the EEOC',
})
@IsDateString()
@@ -54,6 +56,7 @@ export class UnifiedAtsEeocsInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The race of the candidate',
})
@IsIn([
@@ -71,6 +74,7 @@ export class UnifiedAtsEeocsInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The gender of the candidate',
})
@IsIn(['MALE', 'FEMALE', 'NON_BINARY', 'OTHER', 'DECLINE_TO_SELF_IDENTIFY'])
@@ -79,6 +83,7 @@ export class UnifiedAtsEeocsInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The veteran status of the candidate',
})
@IsIn([
@@ -91,6 +96,7 @@ export class UnifiedAtsEeocsInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The disability status of the candidate',
})
@IsIn([
@@ -102,7 +108,9 @@ export class UnifiedAtsEeocsInput {
disability_status?: EeocsDisabilityStatus | string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -111,13 +119,18 @@ export class UnifiedAtsEeocsInput {
}
export class UnifiedAtsEeocsOutput extends UnifiedAtsEeocsInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the EEOC' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the EEOC',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The remote ID of the EEOC in the context of the 3rd Party',
})
@IsString()
@@ -125,23 +138,27 @@ export class UnifiedAtsEeocsOutput extends UnifiedAtsEeocsInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the EEOC in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/interview/types/model.unified.ts b/packages/api/src/ats/interview/types/model.unified.ts
index bda37b045..56cad11cb 100644
--- a/packages/api/src/ats/interview/types/model.unified.ts
+++ b/packages/api/src/ats/interview/types/model.unified.ts
@@ -13,6 +13,7 @@ export type InterviewStatus = 'SCHEDULED' | 'AWAITING_FEEDBACK' | 'COMPLETED';
export class UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The status of the interview',
})
@IsIn(['SCHEDULED', 'AWAITING_FEEDBACK', 'COMPLETED'])
@@ -21,6 +22,7 @@ export class UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the application',
})
@IsUUID()
@@ -29,6 +31,7 @@ export class UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the job interview stage',
})
@IsUUID()
@@ -37,6 +40,7 @@ export class UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the organizer',
})
@IsUUID()
@@ -45,6 +49,7 @@ export class UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The UUIDs of the interviewers',
})
@IsArray()
@@ -53,6 +58,7 @@ export class UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The location of the interview',
})
@IsString()
@@ -60,8 +66,8 @@ export class UnifiedAtsInterviewInput {
location?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The start date and time of the interview',
})
@IsDateString()
@@ -69,8 +75,8 @@ export class UnifiedAtsInterviewInput {
start_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The end date and time of the interview',
})
@IsDateString()
@@ -78,8 +84,8 @@ export class UnifiedAtsInterviewInput {
end_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The remote creation date of the interview',
})
@IsDateString()
@@ -87,8 +93,8 @@ export class UnifiedAtsInterviewInput {
remote_created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The remote modification date of the interview',
})
@IsDateString()
@@ -96,7 +102,9 @@ export class UnifiedAtsInterviewInput {
remote_updated_at?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -107,6 +115,7 @@ export class UnifiedAtsInterviewInput {
export class UnifiedAtsInterviewOutput extends UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the interview',
})
@IsUUID()
@@ -115,6 +124,7 @@ export class UnifiedAtsInterviewOutput extends UnifiedAtsInterviewInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the interview in the context of the 3rd Party',
})
@@ -123,7 +133,9 @@ export class UnifiedAtsInterviewOutput extends UnifiedAtsInterviewInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the interview in the context of the 3rd Party',
})
@@ -131,16 +143,18 @@ export class UnifiedAtsInterviewOutput extends UnifiedAtsInterviewInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/job/types/model.unified.ts b/packages/api/src/ats/job/types/model.unified.ts
index fce004c85..4a47a0049 100644
--- a/packages/api/src/ats/job/types/model.unified.ts
+++ b/packages/api/src/ats/job/types/model.unified.ts
@@ -13,36 +13,54 @@ export type JobStatus = 'OPEN' | 'CLOSED' | 'DRAFT' | 'ARCHIVED' | 'PENDING';
export type JobType = 'POSTING' | 'REQUISITION' | 'PROFILE';
export class UnifiedAtsJobInput {
- @ApiPropertyOptional({ type: String, description: 'The name of the job' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The name of the job',
+ })
@IsString()
@IsOptional()
name?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The description of the job',
})
@IsString()
@IsOptional()
description?: string;
- @ApiPropertyOptional({ type: String, description: 'The code of the job' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The code of the job',
+ })
@IsString()
@IsOptional()
code?: string;
- @ApiPropertyOptional({ type: String, description: 'The status of the job' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The status of the job',
+ })
@IsIn(['OPEN', 'CLOSED', 'DRAFT', 'ARCHIVED', 'PENDING'])
@IsOptional()
status?: JobStatus | string;
- @ApiPropertyOptional({ type: String, description: 'The type of the job' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The type of the job',
+ })
@IsIn(['POSTING', 'REQUISITION', 'PROFILE'])
@IsOptional()
type?: JobType | string;
@ApiPropertyOptional({
type: Boolean,
+ nullable: true,
description: 'Whether the job is confidential',
})
@IsBoolean()
@@ -51,6 +69,7 @@ export class UnifiedAtsJobInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The departments UUIDs associated with the job',
})
@IsArray()
@@ -59,6 +78,7 @@ export class UnifiedAtsJobInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The offices UUIDs associated with the job',
})
@IsArray()
@@ -67,6 +87,7 @@ export class UnifiedAtsJobInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The managers UUIDs associated with the job',
})
@IsArray()
@@ -75,6 +96,7 @@ export class UnifiedAtsJobInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The recruiters UUIDs associated with the job',
})
@IsArray()
@@ -84,6 +106,7 @@ export class UnifiedAtsJobInput {
@ApiPropertyOptional({
type: String,
format: 'date-time',
+ nullable: true,
description: 'The remote creation date of the job',
})
@IsDateString()
@@ -93,6 +116,7 @@ export class UnifiedAtsJobInput {
@ApiPropertyOptional({
type: String,
format: 'date-time',
+ nullable: true,
description: 'The remote modification date of the job',
})
@IsDateString()
@@ -100,7 +124,9 @@ export class UnifiedAtsJobInput {
remote_updated_at?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -109,13 +135,18 @@ export class UnifiedAtsJobInput {
}
export class UnifiedAtsJobOutput extends UnifiedAtsJobInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the job' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the job',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The remote ID of the job in the context of the 3rd Party',
})
@IsString()
@@ -123,23 +154,27 @@ export class UnifiedAtsJobOutput extends UnifiedAtsJobInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the job in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/jobinterviewstage/types/model.unified.ts b/packages/api/src/ats/jobinterviewstage/types/model.unified.ts
index 2447d6d39..f283d413e 100644
--- a/packages/api/src/ats/jobinterviewstage/types/model.unified.ts
+++ b/packages/api/src/ats/jobinterviewstage/types/model.unified.ts
@@ -10,24 +10,35 @@ import {
export class UnifiedAtsJobinterviewstageInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The name of the job interview stage',
})
@IsString()
@IsOptional()
name?: string;
- @ApiPropertyOptional({ type: Number, description: 'The order of the stage' })
+ @ApiPropertyOptional({
+ type: Number,
+ nullable: true,
+ description: 'The order of the stage',
+ })
@IsInt()
@IsOptional()
stage_order?: number;
- @ApiPropertyOptional({ type: String, description: 'The UUID of the job' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the job',
+ })
@IsUUID()
@IsOptional()
job_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -38,6 +49,7 @@ export class UnifiedAtsJobinterviewstageInput {
export class UnifiedAtsJobinterviewstageOutput extends UnifiedAtsJobinterviewstageInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the job interview stage',
})
@IsUUID()
@@ -46,6 +58,7 @@ export class UnifiedAtsJobinterviewstageOutput extends UnifiedAtsJobinterviewsta
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the job interview stage in the context of the 3rd Party',
})
@@ -54,7 +67,9 @@ export class UnifiedAtsJobinterviewstageOutput extends UnifiedAtsJobinterviewsta
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the job interview stage in the context of the 3rd Party',
})
@@ -62,16 +77,18 @@ export class UnifiedAtsJobinterviewstageOutput extends UnifiedAtsJobinterviewsta
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/offer/types/model.unified.ts b/packages/api/src/ats/offer/types/model.unified.ts
index 7bd617858..82fe21d77 100644
--- a/packages/api/src/ats/offer/types/model.unified.ts
+++ b/packages/api/src/ats/offer/types/model.unified.ts
@@ -18,48 +18,56 @@ export type OfferStatus =
| 'SIGNED'
| 'DEPRECATED';
export class UnifiedAtsOfferInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the creator' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the creator',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
created_by?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
description: 'The remote creation date of the offer',
+ nullable: true,
})
@IsDateString()
@IsOptional()
remote_created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
description: 'The closing date of the offer',
+ nullable: true,
})
@IsDateString()
@IsOptional()
closed_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
description: 'The sending date of the offer',
+ nullable: true,
})
@IsDateString()
@IsOptional()
sent_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
description: 'The start date of the offer',
+ nullable: true,
})
@IsDateString()
@IsOptional()
start_date?: string;
- @ApiPropertyOptional({ type: String, description: 'The status of the offer' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The status of the offer',
+ nullable: true,
+ })
@IsIn([
'DRAFT',
'APPROVAL_SENT',
@@ -77,22 +85,29 @@ export class UnifiedAtsOfferInput {
@ApiPropertyOptional({
type: String,
description: 'The UUID of the application',
+ nullable: true,
})
@IsUUID()
@IsOptional()
application_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedAtsOfferOutput extends UnifiedAtsOfferInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the offer' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the offer',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
id?: string;
@@ -100,29 +115,34 @@ export class UnifiedAtsOfferOutput extends UnifiedAtsOfferInput {
@ApiPropertyOptional({
type: String,
description: 'The remote ID of the offer in the context of the 3rd Party',
+ nullable: true,
})
@IsString()
@IsOptional()
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The remote data of the offer in the context of the 3rd Party',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The created date of the object',
+ nullable: true,
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The modified date of the object',
+ nullable: true,
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/office/types/model.unified.ts b/packages/api/src/ats/office/types/model.unified.ts
index 49ea63bc8..09cbaaa03 100644
--- a/packages/api/src/ats/office/types/model.unified.ts
+++ b/packages/api/src/ats/office/types/model.unified.ts
@@ -2,13 +2,18 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsOptional, IsString, IsDateString } from 'class-validator';
export class UnifiedAtsOfficeInput {
- @ApiPropertyOptional({ type: String, description: 'The name of the office' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The name of the office',
+ })
@IsString()
@IsOptional()
name?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The location of the office',
})
@IsString()
@@ -16,7 +21,9 @@ export class UnifiedAtsOfficeInput {
location?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -32,6 +39,7 @@ export class UnifiedAtsOfficeOutput extends UnifiedAtsOfficeInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The remote ID of the office in the context of the 3rd Party',
})
@IsString()
@@ -39,7 +47,9 @@ export class UnifiedAtsOfficeOutput extends UnifiedAtsOfficeInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the office in the context of the 3rd Party',
})
@@ -47,16 +57,18 @@ export class UnifiedAtsOfficeOutput extends UnifiedAtsOfficeInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/rejectreason/types/model.unified.ts b/packages/api/src/ats/rejectreason/types/model.unified.ts
index 5763835f9..aac5f1977 100644
--- a/packages/api/src/ats/rejectreason/types/model.unified.ts
+++ b/packages/api/src/ats/rejectreason/types/model.unified.ts
@@ -4,6 +4,7 @@ import { IsUUID, IsOptional, IsString } from 'class-validator';
export class UnifiedAtsRejectreasonInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The name of the reject reason',
})
@IsString()
@@ -11,7 +12,9 @@ export class UnifiedAtsRejectreasonInput {
name?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -22,6 +25,7 @@ export class UnifiedAtsRejectreasonInput {
export class UnifiedAtsRejectreasonOutput extends UnifiedAtsRejectreasonInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the reject reason',
})
@IsUUID()
@@ -30,6 +34,7 @@ export class UnifiedAtsRejectreasonOutput extends UnifiedAtsRejectreasonInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the reject reason in the context of the 3rd Party',
})
@@ -38,7 +43,9 @@ export class UnifiedAtsRejectreasonOutput extends UnifiedAtsRejectreasonInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the reject reason in the context of the 3rd Party',
})
@@ -46,16 +53,18 @@ export class UnifiedAtsRejectreasonOutput extends UnifiedAtsRejectreasonInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/scorecard/types/model.unified.ts b/packages/api/src/ats/scorecard/types/model.unified.ts
index b4f543d57..b5ff86519 100644
--- a/packages/api/src/ats/scorecard/types/model.unified.ts
+++ b/packages/api/src/ats/scorecard/types/model.unified.ts
@@ -16,6 +16,7 @@ export type ScoreCardRecommendation =
export class UnifiedAtsScorecardInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The overall recommendation',
})
@IsIn(['DEFINITELY_NO', 'NO', 'YES', 'STRONG_YES', 'NO_DECISION'])
@@ -24,6 +25,7 @@ export class UnifiedAtsScorecardInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the application',
})
@IsUUID()
@@ -32,6 +34,7 @@ export class UnifiedAtsScorecardInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the interview',
})
@IsUUID()
@@ -40,7 +43,7 @@ export class UnifiedAtsScorecardInput {
@ApiPropertyOptional({
type: String,
- format: 'date-time',
+ nullable: true,
description: 'The remote creation date of the scorecard',
})
@IsDateString()
@@ -49,7 +52,7 @@ export class UnifiedAtsScorecardInput {
@ApiPropertyOptional({
type: String,
- format: 'date-time',
+ nullable: true,
description: 'The submission date of the scorecard',
})
@IsDateString()
@@ -57,7 +60,9 @@ export class UnifiedAtsScorecardInput {
submitted_at?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -76,6 +81,7 @@ export class UnifiedAtsScorecardOutput extends UnifiedAtsScorecardInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The remote ID of the scorecard in the context of the 3rd Party',
})
@@ -84,7 +90,9 @@ export class UnifiedAtsScorecardOutput extends UnifiedAtsScorecardInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the scorecard in the context of the 3rd Party',
})
@@ -92,16 +100,18 @@ export class UnifiedAtsScorecardOutput extends UnifiedAtsScorecardInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ats/tag/types/model.unified.ts b/packages/api/src/ats/tag/types/model.unified.ts
index f2fabbf44..44966b8f2 100644
--- a/packages/api/src/ats/tag/types/model.unified.ts
+++ b/packages/api/src/ats/tag/types/model.unified.ts
@@ -2,13 +2,18 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsOptional, IsString, IsDateString } from 'class-validator';
export class UnifiedAtsTagInput {
- @ApiPropertyOptional({ type: String, description: 'The name of the tag' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The name of the tag',
+ })
@IsString()
@IsOptional()
name?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the candidate',
})
@IsUUID()
@@ -16,7 +21,9 @@ export class UnifiedAtsTagInput {
id_ats_candidate?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -25,13 +32,18 @@ export class UnifiedAtsTagInput {
}
export class UnifiedAtsTagOutput extends UnifiedAtsTagInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the tag' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the tag',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The remote ID of the tag in the context of the 3rd Party',
})
@IsString()
@@ -39,15 +51,17 @@ export class UnifiedAtsTagOutput extends UnifiedAtsTagInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the tag in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The creation date of the tag',
})
@IsDateString()
@@ -55,8 +69,8 @@ export class UnifiedAtsTagOutput extends UnifiedAtsTagInput {
created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
+ nullable: true,
description: 'The modification date of the tag',
})
@IsDateString()
diff --git a/packages/api/src/ats/user/types/model.unified.ts b/packages/api/src/ats/user/types/model.unified.ts
index 018f233ba..65fba7807 100644
--- a/packages/api/src/ats/user/types/model.unified.ts
+++ b/packages/api/src/ats/user/types/model.unified.ts
@@ -19,6 +19,7 @@ export class UnifiedAtsUserInput {
@ApiPropertyOptional({
type: String,
description: 'The first name of the user',
+ nullable: true,
})
@IsString()
@IsOptional()
@@ -27,12 +28,17 @@ export class UnifiedAtsUserInput {
@ApiPropertyOptional({
type: String,
description: 'The last name of the user',
+ nullable: true,
})
@IsString()
@IsOptional()
last_name?: string;
- @ApiPropertyOptional({ type: String, description: 'The email of the user' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The email of the user',
+ nullable: true,
+ })
@IsString()
@IsOptional()
email?: string;
@@ -40,6 +46,7 @@ export class UnifiedAtsUserInput {
@ApiPropertyOptional({
type: Boolean,
description: 'Whether the user is disabled',
+ nullable: true,
})
@IsBoolean()
@IsOptional()
@@ -48,6 +55,7 @@ export class UnifiedAtsUserInput {
@ApiPropertyOptional({
type: String,
description: 'The access role of the user',
+ nullable: true,
})
@IsIn([
'SUPER_ADMIN',
@@ -60,34 +68,40 @@ export class UnifiedAtsUserInput {
access_role?: UserAccessRole | string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
description: 'The remote creation date of the user',
+ nullable: true,
})
@IsDateString()
@IsOptional()
remote_created_at?: string;
@ApiPropertyOptional({
- type: String,
- format: 'date-time',
+ type: Date,
description: 'The remote modification date of the user',
+ nullable: true,
})
@IsDateString()
@IsOptional()
remote_modified_at?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedAtsUserOutput extends UnifiedAtsUserInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the user' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the user',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
id?: string;
@@ -95,29 +109,34 @@ export class UnifiedAtsUserOutput extends UnifiedAtsUserInput {
@ApiPropertyOptional({
type: String,
description: 'The remote ID of the user in the context of the 3rd Party',
+ nullable: true,
})
@IsString()
@IsOptional()
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The remote data of the user in the context of the 3rd Party',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
description: 'The created date of the object',
+ nullable: true,
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
description: 'The modified date of the object',
+ nullable: true,
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/@lib/@types/index.ts b/packages/api/src/crm/@lib/@types/index.ts
index 1b0797cf4..543982f91 100644
--- a/packages/api/src/crm/@lib/@types/index.ts
+++ b/packages/api/src/crm/@lib/@types/index.ts
@@ -306,6 +306,7 @@ export const countryPhoneFormats: { [countryCode: string]: string } = {
export class Email {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The email address',
})
@IsString()
@@ -313,6 +314,7 @@ export class Email {
@ApiProperty({
type: String,
+ nullable: true,
description:
'The email address type. Authorized values are either PERSONAL or WORK.',
})
@@ -322,6 +324,7 @@ export class Email {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The owner type of an email',
})
@IsString()
@@ -333,6 +336,7 @@ export class Email {
export class Phone {
@ApiProperty({
type: String,
+ nullable: true,
description:
'The phone number starting with a plus (+) followed by the country code (e.g +336676778890 for France)',
})
@@ -341,6 +345,7 @@ export class Phone {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The phone type. Authorized values are either MOBILE or WORK',
})
@IsIn(['MOBILE', 'WORK'])
@@ -349,6 +354,7 @@ export class Phone {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The owner type of a phone number',
})
@IsString()
@@ -358,6 +364,7 @@ export class Phone {
export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The street',
})
@IsString()
@@ -365,6 +372,7 @@ export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description: 'More information about the street ',
})
@IsString()
@@ -373,6 +381,7 @@ export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The city',
})
@IsString()
@@ -380,6 +389,7 @@ export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The state',
})
@IsString()
@@ -387,6 +397,7 @@ export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The postal code',
})
@IsString()
@@ -394,6 +405,7 @@ export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The country',
})
@IsString()
@@ -401,6 +413,7 @@ export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description:
'The address type. Authorized values are either PERSONAL or WORK.',
})
@@ -411,6 +424,7 @@ export class Address {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The owner type of the address',
})
@IsOptional()
diff --git a/packages/api/src/crm/company/types/model.unified.ts b/packages/api/src/crm/company/types/model.unified.ts
index 30844a753..ebbf03894 100644
--- a/packages/api/src/crm/company/types/model.unified.ts
+++ b/packages/api/src/crm/company/types/model.unified.ts
@@ -9,7 +9,11 @@ import {
} from 'class-validator';
export class UnifiedCrmCompanyInput {
- @ApiProperty({ type: String, description: 'The name of the company' })
+ @ApiProperty({
+ type: String,
+ description: 'The name of the company',
+ nullable: true,
+ })
@IsString()
name: string;
@@ -17,6 +21,7 @@ export class UnifiedCrmCompanyInput {
type: String,
description:
'The industry of the company. Authorized values can be found in the Industry enum.',
+ nullable: true,
})
@IsEnum(Industry)
@IsOptional()
@@ -25,6 +30,7 @@ export class UnifiedCrmCompanyInput {
@ApiPropertyOptional({
type: Number,
description: 'The number of employees of the company',
+ nullable: true,
})
@IsNumber()
@IsOptional()
@@ -33,6 +39,7 @@ export class UnifiedCrmCompanyInput {
@ApiPropertyOptional({
type: String,
description: 'The UUID of the user who owns the company',
+ nullable: true,
})
@IsOptional()
@IsUUID()
@@ -41,6 +48,7 @@ export class UnifiedCrmCompanyInput {
@ApiPropertyOptional({
description: 'The email addresses of the company',
type: [Email],
+ nullable: true,
})
@IsOptional()
email_addresses?: Email[];
@@ -48,6 +56,7 @@ export class UnifiedCrmCompanyInput {
@ApiPropertyOptional({
description: 'The addresses of the company',
type: [Address],
+ nullable: true,
})
@IsOptional()
addresses?: Address[];
@@ -55,21 +64,28 @@ export class UnifiedCrmCompanyInput {
@ApiPropertyOptional({
description: 'The phone numbers of the company',
type: [Phone],
+ nullable: true,
})
@IsOptional()
phone_numbers?: Phone[];
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The custom field mappings of the company between the remote 3rd party & Panora',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedCrmCompanyOutput extends UnifiedCrmCompanyInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the company' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the company',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
id?: string;
@@ -77,30 +93,35 @@ export class UnifiedCrmCompanyOutput extends UnifiedCrmCompanyInput {
@ApiPropertyOptional({
type: String,
description: 'The id of the company in the context of the Crm 3rd Party',
+ nullable: true,
})
@IsString()
@IsOptional()
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The remote data of the company in the context of the Crm 3rd Party',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The created date of the object',
+ nullable: true,
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The modified date of the object',
+ nullable: true,
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/contact/types/model.unified.ts b/packages/api/src/crm/contact/types/model.unified.ts
index 0a26435d7..ec7b111be 100644
--- a/packages/api/src/crm/contact/types/model.unified.ts
+++ b/packages/api/src/crm/contact/types/model.unified.ts
@@ -4,16 +4,25 @@ import { IsOptional, IsString, IsUUID } from 'class-validator';
import { Type } from 'class-transformer';
export class UnifiedCrmContactInput {
- @ApiProperty({ type: String, description: 'The first name of the contact' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The first name of the contact',
+ })
@IsString()
first_name: string;
- @ApiProperty({ type: String, description: 'The last name of the contact' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The last name of the contact',
+ })
@IsString()
last_name: string;
@ApiPropertyOptional({
type: [Email],
+ nullable: true,
description: 'The email addresses of the contact',
})
@IsOptional()
@@ -22,6 +31,7 @@ export class UnifiedCrmContactInput {
@ApiPropertyOptional({
type: [Phone],
+ nullable: true,
description: 'The phone numbers of the contact',
})
@IsOptional()
@@ -30,6 +40,7 @@ export class UnifiedCrmContactInput {
@ApiPropertyOptional({
type: [Address],
+ nullable: true,
description: 'The addresses of the contact',
})
@IsOptional()
@@ -38,6 +49,7 @@ export class UnifiedCrmContactInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the user who owns the contact',
})
@IsUUID()
@@ -45,22 +57,29 @@ export class UnifiedCrmContactInput {
user_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the contact between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedCrmContactOutput extends UnifiedCrmContactInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the contact' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the contact',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the contact in the context of the Crm 3rd Party',
})
@IsString()
@@ -68,7 +87,9 @@ export class UnifiedCrmContactOutput extends UnifiedCrmContactInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the contact in the context of the Crm 3rd Party',
})
@@ -76,16 +97,18 @@ export class UnifiedCrmContactOutput extends UnifiedCrmContactInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/deal/types/model.unified.ts b/packages/api/src/crm/deal/types/model.unified.ts
index 1b1967282..559982c1a 100644
--- a/packages/api/src/crm/deal/types/model.unified.ts
+++ b/packages/api/src/crm/deal/types/model.unified.ts
@@ -2,20 +2,33 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsNumber, IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedCrmDealInput {
- @ApiProperty({ type: String, description: 'The name of the deal' })
+ @ApiProperty({
+ type: String,
+ description: 'The name of the deal',
+ nullable: true,
+ })
@IsString()
name: string;
- @ApiProperty({ type: String, description: 'The description of the deal' })
+ @ApiProperty({
+ type: String,
+ description: 'The description of the deal',
+ nullable: true,
+ })
@IsString()
description: string;
- @ApiProperty({ type: Number, description: 'The amount of the deal' })
+ @ApiProperty({
+ type: Number,
+ description: 'The amount of the deal',
+ nullable: true,
+ })
@IsNumber()
amount: number;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the user who is on the deal',
})
@IsUUID()
@@ -24,6 +37,7 @@ export class UnifiedCrmDealInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the stage of the deal',
})
@IsUUID()
@@ -32,6 +46,7 @@ export class UnifiedCrmDealInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the company tied to the deal',
})
@IsUUID()
@@ -39,22 +54,29 @@ export class UnifiedCrmDealInput {
company_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the company between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedCrmDealOutput extends UnifiedCrmDealInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the deal' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the deal',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the deal in the context of the Crm 3rd Party',
})
@IsString()
@@ -62,7 +84,9 @@ export class UnifiedCrmDealOutput extends UnifiedCrmDealInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the deal in the context of the Crm 3rd Party',
})
@@ -70,16 +94,18 @@ export class UnifiedCrmDealOutput extends UnifiedCrmDealInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/engagement/types/model.unified.ts b/packages/api/src/crm/engagement/types/model.unified.ts
index 019d7c647..15a0bef8f 100644
--- a/packages/api/src/crm/engagement/types/model.unified.ts
+++ b/packages/api/src/crm/engagement/types/model.unified.ts
@@ -7,6 +7,7 @@ export type EngagementType = 'EMAIL' | 'CALL' | 'MEETING';
export class UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The content of the engagement',
})
@IsString()
@@ -15,6 +16,7 @@ export class UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The direction of the engagement. Authorized values are INBOUND or OUTBOUND',
})
@@ -26,22 +28,32 @@ export class UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The subject of the engagement',
})
@IsString()
@IsOptional()
subject?: string;
- @ApiPropertyOptional({ description: 'The start time of the engagement' })
+ @ApiPropertyOptional({
+ type: Date,
+ nullable: true,
+ description: 'The start time of the engagement',
+ })
@IsOptional()
start_at?: Date;
- @ApiPropertyOptional({ description: 'The end time of the engagement' })
+ @ApiPropertyOptional({
+ type: Date,
+ nullable: true,
+ description: 'The end time of the engagement',
+ })
@IsOptional()
end_time?: Date;
@ApiProperty({
type: String,
+ nullable: true,
description:
'The type of the engagement. Authorized values are EMAIL, CALL or MEETING',
})
@@ -52,6 +64,7 @@ export class UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the user tied to the engagement',
})
@IsUUID()
@@ -60,6 +73,7 @@ export class UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the company tied to the engagement',
})
@IsUUID()
@@ -68,15 +82,18 @@ export class UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The UUIDs of contacts tied to the engagement object',
})
@IsOptional()
contacts?: string[]; // array of UUIDs of Engagement Contacts objects
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the engagement between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
@@ -85,6 +102,7 @@ export class UnifiedCrmEngagementInput {
export class UnifiedCrmEngagementOutput extends UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the engagement',
})
@IsUUID()
@@ -93,6 +111,7 @@ export class UnifiedCrmEngagementOutput extends UnifiedCrmEngagementInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the engagement in the context of the Crm 3rd Party',
})
@IsString()
@@ -100,7 +119,9 @@ export class UnifiedCrmEngagementOutput extends UnifiedCrmEngagementInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The remote data of the engagement in the context of the Crm 3rd Party',
})
@@ -108,16 +129,18 @@ export class UnifiedCrmEngagementOutput extends UnifiedCrmEngagementInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/note/types/model.unified.ts b/packages/api/src/crm/note/types/model.unified.ts
index a833ee6ba..194262dd5 100644
--- a/packages/api/src/crm/note/types/model.unified.ts
+++ b/packages/api/src/crm/note/types/model.unified.ts
@@ -2,12 +2,17 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedCrmNoteInput {
- @ApiProperty({ type: String, description: 'The content of the note' })
+ @ApiProperty({
+ type: String,
+ description: 'The content of the note',
+ nullable: true,
+ })
@IsString()
content: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the user tied the note',
})
@IsUUID()
@@ -16,6 +21,7 @@ export class UnifiedCrmNoteInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the company tied to the note',
})
@IsUUID()
@@ -24,6 +30,7 @@ export class UnifiedCrmNoteInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID fo the contact tied to the note',
})
@IsUUID()
@@ -32,6 +39,7 @@ export class UnifiedCrmNoteInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the deal tied to the note',
})
@IsUUID()
@@ -39,23 +47,29 @@ export class UnifiedCrmNoteInput {
deal_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the note between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedCrmNoteOutput extends UnifiedCrmNoteInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the note' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the note',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
-
+ nullable: true,
description: 'The id of the note in the context of the Crm 3rd Party',
})
@IsString()
@@ -63,7 +77,9 @@ export class UnifiedCrmNoteOutput extends UnifiedCrmNoteInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the note in the context of the Crm 3rd Party',
})
@@ -71,16 +87,18 @@ export class UnifiedCrmNoteOutput extends UnifiedCrmNoteInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/stage/types/model.unified.ts b/packages/api/src/crm/stage/types/model.unified.ts
index b0d997f7c..e34ffcc31 100644
--- a/packages/api/src/crm/stage/types/model.unified.ts
+++ b/packages/api/src/crm/stage/types/model.unified.ts
@@ -2,21 +2,31 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedCrmStageInput {
- @ApiProperty({ type: String, description: 'The name of the stage' })
+ @ApiProperty({
+ type: String,
+ description: 'The name of the stage',
+ nullable: true,
+ })
@IsString()
stage_name: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The custom field mappings of the stage between the remote 3rd party & Panora',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedCrmStageOutput extends UnifiedCrmStageInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the stage' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the stage',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
id?: string;
@@ -24,30 +34,35 @@ export class UnifiedCrmStageOutput extends UnifiedCrmStageInput {
@ApiPropertyOptional({
type: String,
description: 'The id of the stage in the context of the Crm 3rd Party',
+ nullable: true,
})
@IsString()
@IsOptional()
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The remote data of the stage in the context of the Crm 3rd Party',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The created date of the object',
+ nullable: true,
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The modified date of the object',
+ nullable: true,
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/task/types/model.unified.ts b/packages/api/src/crm/task/types/model.unified.ts
index b6598b3b6..234e056ec 100644
--- a/packages/api/src/crm/task/types/model.unified.ts
+++ b/packages/api/src/crm/task/types/model.unified.ts
@@ -3,11 +3,19 @@ import { IsIn, IsOptional, IsString, IsUUID } from 'class-validator';
export type TaskStatus = 'PENDING' | 'COMPLETED';
export class UnifiedCrmTaskInput {
- @ApiProperty({ type: String, description: 'The subject of the task' })
+ @ApiProperty({
+ type: String,
+ description: 'The subject of the task',
+ nullable: true,
+ })
@IsString()
subject: string;
- @ApiProperty({ type: String, description: 'The content of the task' })
+ @ApiProperty({
+ type: String,
+ description: 'The content of the task',
+ nullable: true,
+ })
@IsString()
content: string;
@@ -15,23 +23,31 @@ export class UnifiedCrmTaskInput {
type: String,
description:
'The status of the task. Authorized values are PENDING, COMPLETED.',
+ nullable: true,
})
@IsIn(['PENDING', 'COMPLETED'], {
message: 'Type must be either PENDING or COMPLETED',
})
status: TaskStatus | string;
- @ApiPropertyOptional({ description: 'The due date of the task' })
+ @ApiPropertyOptional({
+ description: 'The due date of the task',
+ nullable: true,
+ })
@IsOptional()
due_date?: Date;
- @ApiPropertyOptional({ description: 'The finished date of the task' })
+ @ApiPropertyOptional({
+ description: 'The finished date of the task',
+ nullable: true,
+ })
@IsOptional()
finished_date?: Date;
@ApiPropertyOptional({
type: String,
description: 'The UUID of the user tied to the task',
+ nullable: true,
})
@IsUUID()
@IsOptional()
@@ -39,7 +55,8 @@ export class UnifiedCrmTaskInput {
@ApiPropertyOptional({
type: String,
- description: 'The UUID fo the company tied to the task',
+ description: 'The UUID of the company tied to the task',
+ nullable: true,
})
@IsUUID()
@IsOptional()
@@ -48,54 +65,65 @@ export class UnifiedCrmTaskInput {
@ApiPropertyOptional({
type: String,
description: 'The UUID of the deal tied to the task',
+ nullable: true,
})
@IsString()
@IsOptional()
deal_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The custom field mappings of the task between the remote 3rd party & Panora',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedCrmTaskOutput extends UnifiedCrmTaskInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the task' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the task',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
-
description: 'The id of the task in the context of the Crm 3rd Party',
+ nullable: true,
})
@IsString()
@IsOptional()
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The remote data of the task in the context of the Crm 3rd Party',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The created date of the object',
+ nullable: true,
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The modified date of the object',
+ nullable: true,
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/crm/user/types/model.unified.ts b/packages/api/src/crm/user/types/model.unified.ts
index f5d34a62a..c57bf96d0 100644
--- a/packages/api/src/crm/user/types/model.unified.ts
+++ b/packages/api/src/crm/user/types/model.unified.ts
@@ -2,25 +2,39 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedCrmUserInput {
- @ApiProperty({ type: String, description: 'The name of the user' })
+ @ApiProperty({
+ type: String,
+ description: 'The name of the user',
+ nullable: true,
+ })
@IsString()
name: string;
- @ApiProperty({ type: String, description: 'The email of the user' })
+ @ApiProperty({
+ type: String,
+ description: 'The email of the user',
+ nullable: true,
+ })
@IsString()
email: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The custom field mappings of the user between the remote 3rd party & Panora',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedCrmUserOutput extends UnifiedCrmUserInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the user' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the user',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
id?: string;
@@ -28,30 +42,35 @@ export class UnifiedCrmUserOutput extends UnifiedCrmUserInput {
@ApiPropertyOptional({
type: String,
description: 'The id of the user in the context of the Crm 3rd Party',
+ nullable: true,
})
@IsString()
@IsOptional()
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The remote data of the user in the context of the Crm 3rd Party',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
description: 'The created date of the object',
+ nullable: true,
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
description: 'The modified date of the object',
+ nullable: true,
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/filestorage/drive/types/model.unified.ts b/packages/api/src/filestorage/drive/types/model.unified.ts
index 467bbfd12..1429bf1f2 100644
--- a/packages/api/src/filestorage/drive/types/model.unified.ts
+++ b/packages/api/src/filestorage/drive/types/model.unified.ts
@@ -2,23 +2,34 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsOptional, IsString } from 'class-validator';
export class UnifiedFilestorageDriveInput {
- @ApiProperty({ type: String, description: 'The name of the drive' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The name of the drive',
+ })
@IsString()
name: string;
@ApiProperty({
type: String,
+ nullable: true,
description: 'When the third party s drive was created.',
})
@IsString()
remote_created_at: string;
- @ApiProperty({ type: String, description: 'The url of the drive' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The url of the drive',
+ })
@IsString()
drive_url: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -27,13 +38,18 @@ export class UnifiedFilestorageDriveInput {
}
export class UnifiedFilestorageDriveOutput extends UnifiedFilestorageDriveInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the drive' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the drive',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the drive in the context of the 3rd Party',
})
@IsString()
@@ -41,23 +57,27 @@ export class UnifiedFilestorageDriveOutput extends UnifiedFilestorageDriveInput
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the drive in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/filestorage/file/types/model.unified.ts b/packages/api/src/filestorage/file/types/model.unified.ts
index e5c2e7913..be63aaa8d 100644
--- a/packages/api/src/filestorage/file/types/model.unified.ts
+++ b/packages/api/src/filestorage/file/types/model.unified.ts
@@ -4,25 +4,42 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsOptional, IsString } from 'class-validator';
export class UnifiedFilestorageFileInput {
- @ApiProperty({ type: String, description: 'The name of the file' })
+ @ApiProperty({
+ type: String,
+ description: 'The name of the file',
+ nullable: true,
+ })
@IsString()
name: string;
- @ApiProperty({ type: String, description: 'The url of the file' })
+ @ApiProperty({
+ type: String,
+ description: 'The url of the file',
+ nullable: true,
+ })
@IsString()
file_url: string;
- @ApiProperty({ type: String, description: 'The mime type of the file' })
+ @ApiProperty({
+ type: String,
+ description: 'The mime type of the file',
+ nullable: true,
+ })
@IsString()
mime_type: string;
- @ApiProperty({ type: String, description: 'The size of the file' })
+ @ApiProperty({
+ type: String,
+ description: 'The size of the file',
+ nullable: true,
+ })
@IsString()
size: string;
@ApiProperty({
type: String,
description: 'The UUID of the folder tied to the file',
+ nullable: true,
})
@IsString()
folder_id: string;
@@ -30,6 +47,7 @@ export class UnifiedFilestorageFileInput {
@ApiProperty({
type: String,
description: 'The UUID of the permission tied to the file',
+ nullable: true,
})
@IsString()
permission: string | UnifiedFilestoragePermissionOutput;
@@ -37,21 +55,28 @@ export class UnifiedFilestorageFileInput {
@ApiProperty({
type: String,
description: 'The UUID of the shared link tied to the file',
+ nullable: true,
})
@IsString()
shared_link: string | UnifiedFilestorageSharedlinkOutput;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedFilestorageFileOutput extends UnifiedFilestorageFileInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the file' })
+ @ApiPropertyOptional({
+ type: String,
+ description: 'The UUID of the file',
+ nullable: true,
+ })
@IsUUID()
@IsOptional()
id?: string;
@@ -59,29 +84,34 @@ export class UnifiedFilestorageFileOutput extends UnifiedFilestorageFileInput {
@ApiPropertyOptional({
type: String,
description: 'The id of the file in the context of the 3rd Party',
+ nullable: true,
})
@IsString()
@IsOptional()
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
description: 'The remote data of the file in the context of the 3rd Party',
+ nullable: true,
+ additionalProperties: true,
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
description: 'The created date of the object',
+ nullable: true,
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
description: 'The modified date of the object',
+ nullable: true,
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/filestorage/folder/services/folder.service.ts b/packages/api/src/filestorage/folder/services/folder.service.ts
index 482655631..d20191723 100644
--- a/packages/api/src/filestorage/folder/services/folder.service.ts
+++ b/packages/api/src/filestorage/folder/services/folder.service.ts
@@ -327,83 +327,85 @@ export class FolderService {
prev_cursor = Buffer.from(cursor).toString('base64');
}
- const unifiedFolders: UnifiedFilestorageFolderOutput[] = await Promise.all(
- folders.map(async (folder) => {
- // Fetch field mappings for the folder
- const values = await this.prisma.value.findMany({
- where: {
- entity: {
- ressource_owner_id: folder.id_fs_folder,
- },
- },
- include: {
- attribute: true,
- },
- });
-
- // Create a map to store unique field mappings
- const fieldMappingsMap = new Map();
-
- values.forEach((value) => {
- fieldMappingsMap.set(value.attribute.slug, value.data);
- });
-
- // Convert the map to an array of objects
- const field_mappings = Array.from(
- fieldMappingsMap,
- ([key, value]) => ({ [key]: value }),
- );
-
- let permission;
- if (folder.id_fs_permission) {
- const perm = await this.prisma.fs_permissions.findUnique({
+ const unifiedFolders: UnifiedFilestorageFolderOutput[] =
+ await Promise.all(
+ folders.map(async (folder) => {
+ // Fetch field mappings for the folder
+ const values = await this.prisma.value.findMany({
where: {
- id_fs_permission: folder.id_fs_permission,
+ entity: {
+ ressource_owner_id: folder.id_fs_folder,
+ },
+ },
+ include: {
+ attribute: true,
},
});
- permission = perm;
- }
-
- const sharedLink = await this.prisma.fs_shared_links.findFirst({
- where: {
- id_fs_folder: folder.id_fs_folder,
- },
- });
-
- // Transform to UnifiedFilestorageFolderOutput format
- return {
- id: folder.id_fs_folder,
- folder_url: folder.folder_url,
- size: String(folder.size),
- name: folder.name,
- description: folder.description,
- parent_folder_id: folder.parent_folder,
- drive_id: folder.id_fs_drive,
- permission: permission || null,
- shared_link: sharedLink || null,
- field_mappings: field_mappings,
- remote_id: folder.remote_id,
- created_at: folder.created_at,
- modified_at: folder.modified_at,
- };
- }),
- );
- let res: UnifiedFilestorageFolderOutput[] = unifiedFolders;
+ // Create a map to store unique field mappings
+ const fieldMappingsMap = new Map();
- if (remote_data) {
- const remote_array_data: UnifiedFilestorageFolderOutput[] = await Promise.all(
- res.map(async (folder) => {
- const resp = await this.prisma.remote_data.findFirst({
+ values.forEach((value) => {
+ fieldMappingsMap.set(value.attribute.slug, value.data);
+ });
+
+ // Convert the map to an array of objects
+ const field_mappings = Array.from(
+ fieldMappingsMap,
+ ([key, value]) => ({ [key]: value }),
+ );
+
+ let permission;
+ if (folder.id_fs_permission) {
+ const perm = await this.prisma.fs_permissions.findUnique({
+ where: {
+ id_fs_permission: folder.id_fs_permission,
+ },
+ });
+ permission = perm;
+ }
+
+ const sharedLink = await this.prisma.fs_shared_links.findFirst({
where: {
- ressource_owner_id: folder.id,
+ id_fs_folder: folder.id_fs_folder,
},
});
- const remote_data = JSON.parse(resp.data);
- return { ...folder, remote_data };
+
+ // Transform to UnifiedFilestorageFolderOutput format
+ return {
+ id: folder.id_fs_folder,
+ folder_url: folder.folder_url,
+ size: String(folder.size),
+ name: folder.name,
+ description: folder.description,
+ parent_folder_id: folder.parent_folder,
+ drive_id: folder.id_fs_drive,
+ permission: permission || null,
+ shared_link: sharedLink || null,
+ field_mappings: field_mappings,
+ remote_id: folder.remote_id,
+ created_at: folder.created_at,
+ modified_at: folder.modified_at,
+ };
}),
);
+ let res: UnifiedFilestorageFolderOutput[] = unifiedFolders;
+
+ if (remote_data) {
+ const remote_array_data: UnifiedFilestorageFolderOutput[] =
+ await Promise.all(
+ res.map(async (folder) => {
+ const resp = await this.prisma.remote_data.findFirst({
+ where: {
+ ressource_owner_id: folder.id,
+ },
+ });
+ const remote_data = JSON.parse(resp.data);
+ return { ...folder, remote_data };
+ }),
+ );
+
res = remote_array_data;
}
diff --git a/packages/api/src/filestorage/folder/types/model.unified.ts b/packages/api/src/filestorage/folder/types/model.unified.ts
index 322a615a6..41f8cee17 100644
--- a/packages/api/src/filestorage/folder/types/model.unified.ts
+++ b/packages/api/src/filestorage/folder/types/model.unified.ts
@@ -4,15 +4,27 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsOptional, IsString } from 'class-validator';
export class UnifiedFilestorageFolderInput {
- @ApiProperty({ type: String, description: 'The name of the folder' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The name of the folder',
+ })
@IsString()
name: string;
- @ApiProperty({ type: String, description: 'The size of the folder' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The size of the folder',
+ })
@IsString()
size: string;
- @ApiProperty({ type: String, description: 'The url of the folder' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The url of the folder',
+ })
@IsString()
folder_url: string;
@@ -22,6 +34,7 @@ export class UnifiedFilestorageFolderInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The UUID of the drive tied to the folder',
})
@IsString()
@@ -29,6 +42,7 @@ export class UnifiedFilestorageFolderInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The UUID of the parent folder',
})
@IsString()
@@ -36,6 +50,7 @@ export class UnifiedFilestorageFolderInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The UUID of the shared link tied to the folder',
})
@IsString()
@@ -43,13 +58,16 @@ export class UnifiedFilestorageFolderInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The UUID of the permission tied to the folder',
})
@IsString()
permission: string | UnifiedFilestoragePermissionOutput;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -58,13 +76,18 @@ export class UnifiedFilestorageFolderInput {
}
export class UnifiedFilestorageFolderOutput extends UnifiedFilestorageFolderInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the folder' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the folder',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the folder in the context of the 3rd Party',
})
@IsString()
@@ -72,7 +95,9 @@ export class UnifiedFilestorageFolderOutput extends UnifiedFilestorageFolderInpu
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The remote data of the folder in the context of the 3rd Party',
})
@@ -80,16 +105,18 @@ export class UnifiedFilestorageFolderOutput extends UnifiedFilestorageFolderInpu
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/filestorage/group/types/model.unified.ts b/packages/api/src/filestorage/group/types/model.unified.ts
index 6c2f991de..752f0df01 100644
--- a/packages/api/src/filestorage/group/types/model.unified.ts
+++ b/packages/api/src/filestorage/group/types/model.unified.ts
@@ -3,7 +3,11 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsOptional, IsString } from 'class-validator';
export class UnifiedFilestorageGroupInput {
- @ApiProperty({ type: String, description: 'The name of the group' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The name of the group',
+ })
@IsString()
name: string;
@@ -13,6 +17,7 @@ export class UnifiedFilestorageGroupInput {
@ApiProperty({
type: Boolean,
+ nullable: true,
description:
'Indicates whether or not this object has been deleted in the third party platform.',
})
@@ -20,7 +25,9 @@ export class UnifiedFilestorageGroupInput {
remote_was_deleted: boolean;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -31,6 +38,7 @@ export class UnifiedFilestorageGroupInput {
export class UnifiedFilestorageGroupOutput extends UnifiedFilestorageGroupInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the group',
})
@IsUUID()
@@ -39,6 +47,7 @@ export class UnifiedFilestorageGroupOutput extends UnifiedFilestorageGroupInput
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the group in the context of the 3rd Party',
})
@IsString()
@@ -46,23 +55,27 @@ export class UnifiedFilestorageGroupOutput extends UnifiedFilestorageGroupInput
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the group in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/filestorage/permission/types/model.unified.ts b/packages/api/src/filestorage/permission/types/model.unified.ts
index 0d74edecf..08efe1ed2 100644
--- a/packages/api/src/filestorage/permission/types/model.unified.ts
+++ b/packages/api/src/filestorage/permission/types/model.unified.ts
@@ -5,17 +5,26 @@ export type PermissionType = 'USER' | 'GROUP' | 'COMPANY' | 'ANYONE';
export type PermissionRole = 'READ' | 'WRITE' | 'OWNER';
export class UnifiedFilestoragePermissionInput {
- @ApiProperty({ type: [String], description: 'The roles of the permission' })
+ @ApiProperty({
+ type: [String],
+ nullable: true,
+ description: 'The roles of the permission',
+ })
@IsString()
roles: (PermissionRole | string)[];
- @ApiProperty({ type: String, description: 'The type of the permission' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The type of the permission',
+ })
@IsIn(['USER', 'GROUP', 'COMPANY', 'ANYONE'])
@IsString()
type: PermissionType | string;
@ApiProperty({
type: String,
+ nullable: true,
description: 'The UUID of the user tied to the permission',
})
@IsString()
@@ -23,13 +32,16 @@ export class UnifiedFilestoragePermissionInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The UUID of the group tied to the permission',
})
@IsString()
group_id: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -40,6 +52,7 @@ export class UnifiedFilestoragePermissionInput {
export class UnifiedFilestoragePermissionOutput extends UnifiedFilestoragePermissionInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the permission',
})
@IsUUID()
@@ -48,6 +61,7 @@ export class UnifiedFilestoragePermissionOutput extends UnifiedFilestoragePermis
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the permission in the context of the 3rd Party',
})
@IsString()
@@ -55,7 +69,9 @@ export class UnifiedFilestoragePermissionOutput extends UnifiedFilestoragePermis
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The remote data of the permission in the context of the 3rd Party',
})
@@ -63,16 +79,18 @@ export class UnifiedFilestoragePermissionOutput extends UnifiedFilestoragePermis
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/filestorage/sharedlink/types/model.unified.ts b/packages/api/src/filestorage/sharedlink/types/model.unified.ts
index da28a6191..e0c20cf7e 100644
--- a/packages/api/src/filestorage/sharedlink/types/model.unified.ts
+++ b/packages/api/src/filestorage/sharedlink/types/model.unified.ts
@@ -3,6 +3,7 @@ import { IsUUID, IsOptional, IsString } from 'class-validator';
export class UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The url of the shared link',
})
@IsString()
@@ -10,6 +11,7 @@ export class UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The download url of the shared link',
})
@IsString()
@@ -17,6 +19,7 @@ export class UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the folder tied to the shared link',
})
@IsString()
@@ -24,6 +27,7 @@ export class UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the file tied to the shared link',
})
@IsString()
@@ -31,6 +35,7 @@ export class UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The scope of the shared link',
})
@IsString()
@@ -38,6 +43,7 @@ export class UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: Boolean,
+ nullable: true,
description: 'If the shared link is protected by a password or not',
})
@IsString()
@@ -45,13 +51,16 @@ export class UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The password of the shared link',
})
@IsString()
password?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
})
@@ -62,6 +71,7 @@ export class UnifiedFilestorageSharedlinkInput {
export class UnifiedFilestorageSharedlinkOutput extends UnifiedFilestorageSharedlinkInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the shared link',
})
@IsUUID()
@@ -70,6 +80,7 @@ export class UnifiedFilestorageSharedlinkOutput extends UnifiedFilestorageShared
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the shared link in the context of the 3rd Party',
})
@IsString()
@@ -77,7 +88,9 @@ export class UnifiedFilestorageSharedlinkOutput extends UnifiedFilestorageShared
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the shared link in the context of the 3rd Party',
})
@@ -85,16 +98,18 @@ export class UnifiedFilestorageSharedlinkOutput extends UnifiedFilestorageShared
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/filestorage/user/types/model.unified.ts b/packages/api/src/filestorage/user/types/model.unified.ts
index b7b3b29fa..2a3c09c36 100644
--- a/packages/api/src/filestorage/user/types/model.unified.ts
+++ b/packages/api/src/filestorage/user/types/model.unified.ts
@@ -2,12 +2,17 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsUUID, IsOptional, IsString } from 'class-validator';
export class UnifiedFilestorageUserInput {
- @ApiProperty({ type: String, description: 'The name of the user' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The name of the user',
+ })
@IsString()
name: string;
@ApiProperty({
type: String,
+ nullable: true,
description: 'The email of the user',
})
@IsString()
@@ -15,15 +20,18 @@ export class UnifiedFilestorageUserInput {
@ApiProperty({
type: Boolean,
+ nullable: true,
description: 'Whether the user is the one who linked this account.',
})
@IsString()
is_me: boolean;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the object between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
@@ -32,6 +40,7 @@ export class UnifiedFilestorageUserInput {
export class UnifiedUserOutput extends UnifiedFilestorageUserInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the user',
})
@IsUUID()
@@ -40,6 +49,7 @@ export class UnifiedUserOutput extends UnifiedFilestorageUserInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the user in the context of the 3rd Party',
})
@IsString()
@@ -47,23 +57,27 @@ export class UnifiedUserOutput extends UnifiedFilestorageUserInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the user in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/hris/timeoffbalance/timeoffbalance.controller.ts b/packages/api/src/hris/timeoffbalance/timeoffbalance.controller.ts
index d8de5231f..b33eb17d4 100644
--- a/packages/api/src/hris/timeoffbalance/timeoffbalance.controller.ts
+++ b/packages/api/src/hris/timeoffbalance/timeoffbalance.controller.ts
@@ -28,7 +28,10 @@ import {
import { ConnectionUtils } from '@@core/connections/@utils';
import { ApiKeyAuthGuard } from '@@core/auth/guards/api-key.guard';
import { FetchObjectsQueryDto } from '@@core/utils/dtos/fetch-objects-query.dto';
-import { ApiGetCustomResponse, ApiPaginatedResponse } from '@@core/utils/dtos/openapi.respone.dto';
+import {
+ ApiGetCustomResponse,
+ ApiPaginatedResponse,
+} from '@@core/utils/dtos/openapi.respone.dto';
//@ApiKeyAuth()
@ApiTags('hris/timeoffbalances')
diff --git a/packages/api/src/main.ts b/packages/api/src/main.ts
index 4f8a30ea3..0280cb482 100644
--- a/packages/api/src/main.ts
+++ b/packages/api/src/main.ts
@@ -1,18 +1,13 @@
import '@@core/@core-services/sentry/instrument';
-import * as Sentry from '@sentry/node';
-import {
- BaseExceptionFilter,
- HttpAdapterHost,
- NestFactory,
-} from '@nestjs/core';
-import { AppModule } from './app.module';
-import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
-import { Logger, LoggerErrorInterceptor } from 'nestjs-pino';
-import * as fs from 'fs';
-import * as cookieParser from 'cookie-parser';
+import { NestFactory } from '@nestjs/core';
+import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { useContainer } from 'class-validator';
+import * as cookieParser from 'cookie-parser';
import * as cors from 'cors';
+import * as fs from 'fs';
import * as yaml from 'js-yaml';
+import { Logger, LoggerErrorInterceptor } from 'nestjs-pino';
+import { AppModule } from './app.module';
function addSpeakeasyGroup(document: any) {
for (const path in document.paths) {
diff --git a/packages/api/src/ticketing/account/types/model.unified.ts b/packages/api/src/ticketing/account/types/model.unified.ts
index 3411c38fe..c302414df 100644
--- a/packages/api/src/ticketing/account/types/model.unified.ts
+++ b/packages/api/src/ticketing/account/types/model.unified.ts
@@ -2,34 +2,46 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedTicketingAccountInput {
- @ApiProperty({ type: String, description: 'The name of the account' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The name of the account',
+ })
@IsString()
name: string;
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The domains of the account',
})
@IsOptional()
domains?: string[];
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the account between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedTicketingAccountOutput extends UnifiedTicketingAccountInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the account' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the account',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the account in the context of the 3rd Party',
})
@IsString()
@@ -37,7 +49,9 @@ export class UnifiedTicketingAccountOutput extends UnifiedTicketingAccountInput
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the account in the context of the 3rd Party',
})
@@ -45,16 +59,18 @@ export class UnifiedTicketingAccountOutput extends UnifiedTicketingAccountInput
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/attachment/types/model.unified.ts b/packages/api/src/ticketing/attachment/types/model.unified.ts
index cf4c0eb0c..b59d57e33 100644
--- a/packages/api/src/ticketing/attachment/types/model.unified.ts
+++ b/packages/api/src/ticketing/attachment/types/model.unified.ts
@@ -2,16 +2,25 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedTicketingAttachmentInput {
- @ApiProperty({ type: String, description: 'The file name of the attachment' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The file name of the attachment',
+ })
@IsString()
file_name: string;
- @ApiProperty({ type: String, description: 'The file url of the attachment' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The file url of the attachment',
+ })
@IsString()
file_url: string;
@ApiProperty({
type: String,
+ nullable: true,
description: "The uploader's UUID of the attachment",
})
@IsString()
@@ -20,6 +29,7 @@ export class UnifiedTicketingAttachmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the ticket the attachment is tied to',
})
@IsUUID()
@@ -28,6 +38,7 @@ export class UnifiedTicketingAttachmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the comment the attachment is tied to',
})
@IsUUID()
@@ -35,9 +46,11 @@ export class UnifiedTicketingAttachmentInput {
comment_id?: string; // UUID of Comment object
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the attachment between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
@@ -46,6 +59,7 @@ export class UnifiedTicketingAttachmentInput {
export class UnifiedTicketingAttachmentOutput extends UnifiedTicketingAttachmentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the attachment',
})
@IsUUID()
@@ -54,6 +68,7 @@ export class UnifiedTicketingAttachmentOutput extends UnifiedTicketingAttachment
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the attachment in the context of the 3rd Party',
})
@IsString()
@@ -61,7 +76,9 @@ export class UnifiedTicketingAttachmentOutput extends UnifiedTicketingAttachment
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ additionalProperties: true,
+ nullable: true,
description:
'The remote data of the attachment in the context of the 3rd Party',
})
@@ -69,16 +86,18 @@ export class UnifiedTicketingAttachmentOutput extends UnifiedTicketingAttachment
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/collection/types/model.unified.ts b/packages/api/src/ticketing/collection/types/model.unified.ts
index d26681329..80338b3f2 100644
--- a/packages/api/src/ticketing/collection/types/model.unified.ts
+++ b/packages/api/src/ticketing/collection/types/model.unified.ts
@@ -6,6 +6,7 @@ export type CollectionType = 'PROJECT' | 'LIST';
export class UnifiedTicketingCollectionInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The name of the collection',
})
@IsString()
@@ -13,6 +14,7 @@ export class UnifiedTicketingCollectionInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The description of the collection',
})
@IsString()
@@ -21,6 +23,7 @@ export class UnifiedTicketingCollectionInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The type of the collection. Authorized values are either PROJECT or LIST ',
})
@@ -34,6 +37,7 @@ export class UnifiedTicketingCollectionInput {
export class UnifiedTicketingCollectionOutput extends UnifiedTicketingCollectionInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the collection',
})
@IsUUID()
@@ -42,6 +46,7 @@ export class UnifiedTicketingCollectionOutput extends UnifiedTicketingCollection
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the collection in the context of the 3rd Party',
})
@IsString()
@@ -49,7 +54,9 @@ export class UnifiedTicketingCollectionOutput extends UnifiedTicketingCollection
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the collection in the context of the 3rd Party',
})
@@ -57,16 +64,18 @@ export class UnifiedTicketingCollectionOutput extends UnifiedTicketingCollection
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/comment/types/model.unified.ts b/packages/api/src/ticketing/comment/types/model.unified.ts
index aa53ccd24..198a94d9e 100644
--- a/packages/api/src/ticketing/comment/types/model.unified.ts
+++ b/packages/api/src/ticketing/comment/types/model.unified.ts
@@ -5,12 +5,17 @@ import { IsBoolean, IsIn, IsOptional, IsString, IsUUID } from 'class-validator';
export type CommentCreatorType = 'USER' | 'CONTACT';
export class UnifiedTicketingCommentInput {
- @ApiProperty({ type: String, description: 'The body of the comment' })
+ @ApiProperty({
+ type: String,
+ nullable: true,
+ description: 'The body of the comment',
+ })
@IsString()
body: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The html body of the comment',
})
@IsString()
@@ -19,6 +24,7 @@ export class UnifiedTicketingCommentInput {
@ApiPropertyOptional({
type: Boolean,
+ nullable: true,
description: 'The public status of the comment',
})
@IsOptional()
@@ -27,6 +33,7 @@ export class UnifiedTicketingCommentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The creator type of the comment. Authorized values are either USER or CONTACT',
})
@@ -38,6 +45,7 @@ export class UnifiedTicketingCommentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the ticket the comment is tied to',
})
@IsUUID()
@@ -46,6 +54,7 @@ export class UnifiedTicketingCommentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The UUID of the contact which the comment belongs to (if no user_id specified)',
})
@@ -55,6 +64,7 @@ export class UnifiedTicketingCommentInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The UUID of the user which the comment belongs to (if no contact_id specified)',
})
@@ -64,6 +74,7 @@ export class UnifiedTicketingCommentInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The attachements UUIDs tied to the comment',
})
@IsOptional()
@@ -71,13 +82,18 @@ export class UnifiedTicketingCommentInput {
}
export class UnifiedTicketingCommentOutput extends UnifiedTicketingCommentInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the comment' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the comment',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the comment in the context of the 3rd Party',
})
@IsString()
@@ -85,7 +101,9 @@ export class UnifiedTicketingCommentOutput extends UnifiedTicketingCommentInput
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the comment in the context of the 3rd Party',
})
@@ -93,16 +111,18 @@ export class UnifiedTicketingCommentOutput extends UnifiedTicketingCommentInput
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/contact/types/model.unified.ts b/packages/api/src/ticketing/contact/types/model.unified.ts
index 6970344cb..87374173f 100644
--- a/packages/api/src/ticketing/contact/types/model.unified.ts
+++ b/packages/api/src/ticketing/contact/types/model.unified.ts
@@ -4,6 +4,7 @@ import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedTicketingContactInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The name of the contact',
})
@IsString()
@@ -11,6 +12,7 @@ export class UnifiedTicketingContactInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The email address of the contact',
})
@IsString()
@@ -18,6 +20,7 @@ export class UnifiedTicketingContactInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The phone number of the contact',
})
@IsString()
@@ -26,6 +29,7 @@ export class UnifiedTicketingContactInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The details of the contact',
})
@IsOptional()
@@ -33,9 +37,11 @@ export class UnifiedTicketingContactInput {
details?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the contact between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
@@ -49,6 +55,7 @@ export class UnifiedTicketingContactOutput extends UnifiedTicketingContactInput
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the contact in the context of the 3rd Party',
})
@IsOptional()
@@ -56,7 +63,9 @@ export class UnifiedTicketingContactOutput extends UnifiedTicketingContactInput
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the contact in the context of the 3rd Party',
})
@@ -64,16 +73,18 @@ export class UnifiedTicketingContactOutput extends UnifiedTicketingContactInput
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/tag/types/model.unified.ts b/packages/api/src/ticketing/tag/types/model.unified.ts
index e4d7d6e61..beaa15c99 100644
--- a/packages/api/src/ticketing/tag/types/model.unified.ts
+++ b/packages/api/src/ticketing/tag/types/model.unified.ts
@@ -4,28 +4,36 @@ import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedTicketingTagInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The name of the tag',
})
@IsString()
name: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the tag between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedTicketingTagOutput extends UnifiedTicketingTagInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the tag' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the tag',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the tag in the context of the 3rd Party',
})
@IsString()
@@ -33,23 +41,27 @@ export class UnifiedTicketingTagOutput extends UnifiedTicketingTagInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the tag in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/team/types/model.unified.ts b/packages/api/src/ticketing/team/types/model.unified.ts
index 7efbc2344..9785000ac 100644
--- a/packages/api/src/ticketing/team/types/model.unified.ts
+++ b/packages/api/src/ticketing/team/types/model.unified.ts
@@ -4,6 +4,7 @@ import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedTicketingTeamInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The name of the team',
})
@IsString()
@@ -11,6 +12,7 @@ export class UnifiedTicketingTeamInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The description of the team',
})
@IsString()
@@ -18,22 +20,29 @@ export class UnifiedTicketingTeamInput {
description?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the team between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedTicketingTeamOutput extends UnifiedTicketingTeamInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the team' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the team',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the team in the context of the 3rd Party',
})
@IsString()
@@ -41,23 +50,27 @@ export class UnifiedTicketingTeamOutput extends UnifiedTicketingTeamInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the team in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/ticket/types/model.unified.ts b/packages/api/src/ticketing/ticket/types/model.unified.ts
index e537ab4ec..24577e332 100644
--- a/packages/api/src/ticketing/ticket/types/model.unified.ts
+++ b/packages/api/src/ticketing/ticket/types/model.unified.ts
@@ -12,6 +12,7 @@ export type TicketPriority = 'HIGH' | 'MEDIUM' | 'LOW';
export class UnifiedTicketingTicketInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The name of the ticket',
})
@IsString()
@@ -19,6 +20,7 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The status of the ticket. Authorized values are OPEN or CLOSED.',
})
@@ -30,6 +32,7 @@ export class UnifiedTicketingTicketInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The description of the ticket',
})
@IsString()
@@ -37,6 +40,7 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: Date,
+ nullable: true,
description: 'The date the ticket is due',
})
@IsOptional()
@@ -44,6 +48,7 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The type of the ticket. Authorized values are PROBLEM, QUESTION, or TASK',
})
@@ -55,6 +60,7 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the parent ticket',
})
@IsUUID()
@@ -63,6 +69,7 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The collection UUIDs the ticket belongs to',
})
@IsUUID()
@@ -71,13 +78,15 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The tags names of the ticket',
})
@IsOptional()
- tags?: (string | UnifiedTicketingTagOutput)[]; // tags names
+ tags?: (string | UnifiedTicketingTagOutput)[];
@ApiPropertyOptional({
type: Date,
+ nullable: true,
description: 'The date the ticket has been completed',
})
@IsOptional()
@@ -85,6 +94,7 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description:
'The priority of the ticket. Authorized values are HIGH, MEDIUM or LOW.',
})
@@ -96,13 +106,15 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The users UUIDs the ticket is assigned to',
})
@IsOptional()
- assigned_to?: string[]; //UUID of Users objects
+ assigned_to?: string[];
@ApiPropertyOptional({
type: UnifiedTicketingCommentInput,
+ nullable: true,
description: 'The comment of the ticket',
})
@IsOptional()
@@ -110,6 +122,7 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the account which the ticket belongs to',
})
@IsUUID()
@@ -118,36 +131,44 @@ export class UnifiedTicketingTicketInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The UUID of the contact which the ticket belongs to',
})
@IsUUID()
@IsOptional()
contact_id?: string;
- // optional but may exist if ticket contains attachments
@ApiPropertyOptional({
type: [String],
- description: 'The attachements UUIDs tied to the ticket',
+ nullable: true,
+ description: 'The attachments UUIDs tied to the ticket',
})
@IsOptional()
attachments?: (string | UnifiedTicketingAttachmentInput)[];
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the ticket between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedTicketingTicketOutput extends UnifiedTicketingTicketInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the ticket' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the ticket',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the ticket in the context of the 3rd Party',
})
@IsString()
@@ -155,7 +176,9 @@ export class UnifiedTicketingTicketOutput extends UnifiedTicketingTicketInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description:
'The remote data of the ticket in the context of the 3rd Party',
})
@@ -163,16 +186,18 @@ export class UnifiedTicketingTicketOutput extends UnifiedTicketingTicketInput {
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/src/ticketing/user/types/model.unified.ts b/packages/api/src/ticketing/user/types/model.unified.ts
index b9be5c616..22cc29204 100644
--- a/packages/api/src/ticketing/user/types/model.unified.ts
+++ b/packages/api/src/ticketing/user/types/model.unified.ts
@@ -4,6 +4,7 @@ import { IsOptional, IsString, IsUUID } from 'class-validator';
export class UnifiedTicketingUserInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The name of the user',
})
@IsString()
@@ -11,6 +12,7 @@ export class UnifiedTicketingUserInput {
@ApiProperty({
type: String,
+ nullable: true,
description: 'The email address of the user',
})
@IsString()
@@ -18,6 +20,7 @@ export class UnifiedTicketingUserInput {
@ApiPropertyOptional({
type: [String],
+ nullable: true,
description: 'The teams whose the user is part of',
})
@IsOptional()
@@ -25,6 +28,7 @@ export class UnifiedTicketingUserInput {
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The account or organization the user is part of',
})
@IsUUID()
@@ -32,22 +36,29 @@ export class UnifiedTicketingUserInput {
account_id?: string;
@ApiProperty({
- type: {},
+ type: Object,
+ nullable: true,
description:
'The custom field mappings of the user between the remote 3rd party & Panora',
+ additionalProperties: true,
})
@IsOptional()
field_mappings?: Record;
}
export class UnifiedTicketingUserOutput extends UnifiedTicketingUserInput {
- @ApiPropertyOptional({ type: String, description: 'The UUID of the user' })
+ @ApiPropertyOptional({
+ type: String,
+ nullable: true,
+ description: 'The UUID of the user',
+ })
@IsUUID()
@IsOptional()
id?: string;
@ApiPropertyOptional({
type: String,
+ nullable: true,
description: 'The id of the user in the context of the 3rd Party',
})
@IsString()
@@ -55,23 +66,27 @@ export class UnifiedTicketingUserOutput extends UnifiedTicketingUserInput {
remote_id?: string;
@ApiPropertyOptional({
- type: {},
+ type: Object,
+ nullable: true,
+ additionalProperties: true,
description: 'The remote data of the user in the context of the 3rd Party',
})
@IsOptional()
remote_data?: Record;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The created date of the object',
})
@IsOptional()
- created_at?: any;
+ created_at?: Date;
@ApiPropertyOptional({
- type: {},
+ type: Date,
+ nullable: true,
description: 'The modified date of the object',
})
@IsOptional()
- modified_at?: any;
+ modified_at?: Date;
}
diff --git a/packages/api/swagger/swagger-spec.yaml b/packages/api/swagger/swagger-spec.yaml
index c82a7dad4..65521e5a6 100644
--- a/packages/api/swagger/swagger-spec.yaml
+++ b/packages/api/swagger/swagger-spec.yaml
@@ -11,7 +11,7 @@ paths:
content:
application/json:
schema:
- type: string
+ $ref: '#/components/schemas/String'
/health:
get:
operationId: health
@@ -23,7 +23,7 @@ paths:
content:
application/json:
schema:
- type: number
+ $ref: '#/components/schemas/Number'
/webhooks:
get:
operationId: listWebhooks
@@ -79,6 +79,7 @@ paths:
$ref: '#/components/schemas/WebhookResponse'
tags: *ref_0
x-speakeasy-group: webhooks.{id}
+ x-speakeasy-group: webhooks.{id}
put:
operationId: updateStatus
summary: Update webhook status
@@ -99,6 +100,7 @@ paths:
$ref: '#/components/schemas/WebhookResponse'
tags: *ref_0
x-speakeasy-group: webhooks.{id}
+ x-speakeasy-group: webhooks.{id}
/webhooks/verifyEvent:
post:
operationId: verifyEvent
@@ -111,14 +113,21 @@ paths:
schema:
$ref: '#/components/schemas/SignatureVerificationDto'
responses:
- '201':
+ '200':
description: ''
content:
application/json:
schema:
- $ref: '#/components/schemas/EventPayload'
+ properties:
+ data:
+ type: object
+ additionalProperties: true
+ description: Dynamic event payload
+ '201':
+ description: ''
tags: *ref_0
x-speakeasy-group: webhooks.verifyevent
+ x-speakeasy-group: webhooks.verifyevent
/ticketing/tickets:
get:
operationId: listTicketingTicket
@@ -495,11 +504,13 @@ paths:
summary: Resync common objects across a vertical
parameters: []
responses:
- '200':
- description: ''
'201':
description: ''
- tags: *ref_5
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ResyncStatusDto'
+ tags: *ref_9
x-speakeasy-group: sync
/crm/companies:
get:
@@ -1694,7 +1705,11 @@ paths:
responses:
'201':
description: ''
- tags: &ref_18
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LinkedUserResponse'
+ tags: &ref_34
- linkedUsers
get:
operationId: listLinkedUsers
@@ -1703,7 +1718,13 @@ paths:
responses:
'200':
description: ''
- tags: *ref_18
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/LinkedUserResponse'
+ tags: *ref_34
/linked_users/batch:
post:
operationId: importBatch
@@ -1718,7 +1739,13 @@ paths:
responses:
'201':
description: ''
- tags: *ref_18
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/LinkedUserResponse'
+ tags: *ref_34
x-speakeasy-group: linked_users.batch
/linked_users/single:
get:
@@ -1733,7 +1760,11 @@ paths:
responses:
'200':
description: ''
- tags: *ref_18
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LinkedUserResponse'
+ tags: *ref_34
x-speakeasy-group: linked_users.single
/linked_users/fromRemoteId:
get:
@@ -1748,7 +1779,11 @@ paths:
responses:
'200':
description: ''
- tags: *ref_18
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LinkedUserResponse'
+ tags: *ref_34
x-speakeasy-group: linked_users.fromremoteid
/field_mappings/define:
post:
@@ -1764,9 +1799,14 @@ paths:
responses:
'201':
description: ''
- tags: &ref_19
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CustomFieldResponse'
+ tags: &ref_35
- fieldMappings
x-speakeasy-group: field_mappings.define
+ x-speakeasy-group: field_mappings.define
/field_mappings:
post:
operationId: defineCustomField
@@ -1781,7 +1821,11 @@ paths:
responses:
'201':
description: ''
- tags: *ref_19
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CustomFieldResponse'
+ tags: *ref_35
/field_mappings/map:
post:
operationId: map
@@ -1796,7 +1840,11 @@ paths:
responses:
'201':
description: ''
- tags: *ref_19
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CustomFieldResponse'
+ tags: *ref_35
x-speakeasy-group: field_mappings.map
/passthrough:
post:
@@ -1825,12 +1873,6 @@ paths:
schema:
$ref: '#/components/schemas/PassThroughRequestDto'
responses:
- '200':
- description: ''
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PassThroughResponse'
'201':
description: ''
content:
@@ -7746,47 +7788,67 @@ servers:
description: Sandbox server
- url: https://api-dev.panora.dev
description: Development server
+ - url: https://api-dev.panora.dev
+ description: Development server
components:
securitySchemes:
bearer:
type: http
scheme: bearer
+ bearer:
+ type: http
+ scheme: bearer
schemas:
+ String:
+ type: object
+ properties: {}
+ Number:
+ type: object
+ properties: {}
WebhookResponse:
type: object
properties:
id_webhook_endpoint:
type: string
+ nullable: true
description: The unique UUID of the webhook.
endpoint_description:
type: string
nullable: true
+ nullable: true
description: The description of the webhook.
url:
type: string
+ nullable: true
description: The endpoint url of the webhook.
secret:
type: string
+ nullable: true
description: The secret of the webhook.
active:
type: boolean
+ nullable: true
description: The status of the webhook.
created_at:
format: date-time
type: string
+ nullable: true
description: The created date of the webhook.
scope:
+ nullable: true
description: The events that the webhook listen to.
type: array
items:
type: string
id_project:
type: string
+ nullable: true
description: The project id tied to the webhook.
last_update:
format: date-time
type: string
nullable: true
+ nullable: true
description: The last update date of the webhook.
required:
- id_webhook_endpoint
@@ -7803,11 +7865,14 @@ components:
properties:
url:
type: string
+ nullable: true
description: The endpoint url of the webhook.
description:
type: string
+ nullable: true
description: The description of the webhook.
scope:
+ nullable: true
description: The events that the webhook listen to.
type: array
items:
@@ -7815,20 +7880,21 @@ components:
required:
- url
- scope
- EventPayload:
- type: object
- properties: {}
SignatureVerificationDto:
type: object
properties:
payload:
type: object
+ additionalProperties: true
+ nullable: true
description: The payload event of the webhook.
signature:
type: string
+ nullable: true
description: The signature of the webhook.
secret:
type: string
+ nullable: true
description: The secret of the webhook.
required:
- payload
@@ -7854,32 +7920,40 @@ components:
properties:
body:
type: string
+ nullable: true
description: The body of the comment
html_body:
type: string
+ nullable: true
description: The html body of the comment
is_private:
type: boolean
+ nullable: true
description: The public status of the comment
creator_type:
type: string
+ nullable: true
description: >-
The creator type of the comment. Authorized values are either USER
or CONTACT
ticket_id:
type: string
+ nullable: true
description: The UUID of the ticket the comment is tied to
contact_id:
type: string
+ nullable: true
description: >-
The UUID of the contact which the comment belongs to (if no user_id
specified)
user_id:
type: string
+ nullable: true
description: >-
The UUID of the user which the comment belongs to (if no contact_id
specified)
attachments:
+ nullable: true
description: The attachements UUIDs tied to the comment
type: array
items:
@@ -7891,29 +7965,37 @@ components:
properties:
name:
type: string
+ nullable: true
description: The name of the ticket
status:
type: string
+ nullable: true
description: The status of the ticket. Authorized values are OPEN or CLOSED.
description:
type: string
+ nullable: true
description: The description of the ticket
due_date:
format: date-time
type: string
+ nullable: true
description: The date the ticket is due
type:
type: string
+ nullable: true
description: >-
The type of the ticket. Authorized values are PROBLEM, QUESTION, or
TASK
parent_ticket:
type: string
+ nullable: true
description: The UUID of the parent ticket
collections:
type: string
+ nullable: true
description: The collection UUIDs the ticket belongs to
tags:
+ nullable: true
description: The tags names of the ticket
type: array
items:
@@ -7921,85 +8003,108 @@ components:
completed_at:
format: date-time
type: string
+ nullable: true
description: The date the ticket has been completed
priority:
type: string
+ nullable: true
description: >-
The priority of the ticket. Authorized values are HIGH, MEDIUM or
LOW.
assigned_to:
+ nullable: true
description: The users UUIDs the ticket is assigned to
type: array
items:
type: string
comment:
+ nullable: true
description: The comment of the ticket
allOf:
- $ref: '#/components/schemas/UnifiedTicketingCommentInput'
account_id:
type: string
+ nullable: true
description: The UUID of the account which the ticket belongs to
contact_id:
type: string
+ nullable: true
description: The UUID of the contact which the ticket belongs to
attachments:
- description: The attachements UUIDs tied to the ticket
+ nullable: true
+ description: The attachments UUIDs tied to the ticket
type: array
items:
type: string
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the ticket between the remote 3rd party
+ & Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the ticket
remote_id:
type: string
+ nullable: true
description: The id of the ticket in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the ticket in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- description
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingTicketInput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the ticket
status:
type: string
+ nullable: true
description: The status of the ticket. Authorized values are OPEN or CLOSED.
description:
type: string
+ nullable: true
description: The description of the ticket
due_date:
format: date-time
type: string
+ nullable: true
description: The date the ticket is due
type:
type: string
+ nullable: true
description: >-
The type of the ticket. Authorized values are PROBLEM, QUESTION, or
TASK
parent_ticket:
type: string
+ nullable: true
description: The UUID of the parent ticket
collections:
type: string
+ nullable: true
description: The collection UUIDs the ticket belongs to
tags:
+ nullable: true
description: The tags names of the ticket
type: array
items:
@@ -8007,169 +8112,237 @@ components:
completed_at:
format: date-time
type: string
+ nullable: true
description: The date the ticket has been completed
priority:
type: string
+ nullable: true
description: >-
The priority of the ticket. Authorized values are HIGH, MEDIUM or
LOW.
assigned_to:
+ nullable: true
description: The users UUIDs the ticket is assigned to
type: array
items:
type: string
comment:
+ nullable: true
description: The comment of the ticket
allOf:
- $ref: '#/components/schemas/UnifiedTicketingCommentInput'
account_id:
type: string
+ nullable: true
description: The UUID of the account which the ticket belongs to
contact_id:
type: string
+ nullable: true
description: The UUID of the contact which the ticket belongs to
attachments:
- description: The attachements UUIDs tied to the ticket
+ nullable: true
+ description: The attachments UUIDs tied to the ticket
type: array
items:
type: string
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the ticket between the remote 3rd party
+ & Panora
+ additionalProperties: true
required:
- name
- description
- - field_mappings
UnifiedTicketingUserOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the user
email_address:
type: string
+ nullable: true
description: The email address of the user
teams:
+ nullable: true
description: The teams whose the user is part of
type: array
items:
type: string
account_id:
type: string
+ nullable: true
description: The account or organization the user is part of
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the user between the remote 3rd party &
+ Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the user
remote_id:
type: string
+ nullable: true
description: The id of the user in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the user in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- email_address
- field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingAccountOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the account
domains:
+ nullable: true
description: The domains of the account
type: array
items:
type: string
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the account between the remote 3rd
+ party & Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the account
remote_id:
type: string
+ nullable: true
description: The id of the account in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the account in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingContactOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the contact
email_address:
type: string
+ nullable: true
description: The email address of the contact
phone_number:
type: string
+ nullable: true
description: The phone number of the contact
details:
type: string
+ nullable: true
description: The details of the contact
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the contact between the remote 3rd
+ party & Panora
+ additionalProperties: true
id:
type: string
description: The UUID of the contact
remote_id:
type: string
+ nullable: true
description: The id of the contact in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the contact in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- email_address
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ ResyncStatusDto:
+ type: object
+ properties:
+ timestamp:
+ format: date-time
+ type: string
+ nullable: true
+ vertical:
+ type: string
+ nullable: true
+ provider:
+ type: string
+ nullable: true
+ status:
+ type: string
+ nullable: true
+ required:
+ - timestamp
+ - vertical
+ - provider
+ - status
Email:
type: object
properties:
email_address:
type: string
+ nullable: true
description: The email address
email_address_type:
type: string
+ nullable: true
description: >-
The email address type. Authorized values are either PERSONAL or
WORK.
owner_type:
type: string
+ nullable: true
description: The owner type of an email
required:
- email_address
@@ -8179,27 +8352,35 @@ components:
properties:
street_1:
type: string
+ nullable: true
description: The street
street_2:
type: string
+ nullable: true
description: 'More information about the street '
city:
type: string
+ nullable: true
description: The city
state:
type: string
+ nullable: true
description: The state
postal_code:
type: string
+ nullable: true
description: The postal code
country:
type: string
+ nullable: true
description: The country
address_type:
type: string
+ nullable: true
description: The address type. Authorized values are either PERSONAL or WORK.
owner_type:
type: string
+ nullable: true
description: The owner type of the address
required:
- street_1
@@ -8215,14 +8396,17 @@ components:
properties:
phone_number:
type: string
+ nullable: true
description: >-
The phone number starting with a plus (+) followed by the country
code (e.g +336676778890 for France)
phone_type:
type: string
+ nullable: true
description: The phone type. Authorized values are either MOBILE or WORK
owner_type:
type: string
+ nullable: true
description: The owner type of a phone number
required:
- phone_number
@@ -8233,743 +8417,968 @@ components:
name:
type: string
description: The name of the company
+ nullable: true
industry:
type: string
description: >-
The industry of the company. Authorized values can be found in the
Industry enum.
+ nullable: true
number_of_employees:
type: number
description: The number of employees of the company
+ nullable: true
user_id:
type: string
description: The UUID of the user who owns the company
+ nullable: true
email_addresses:
description: The email addresses of the company
+ nullable: true
type: array
items:
$ref: '#/components/schemas/Email'
addresses:
description: The addresses of the company
+ nullable: true
type: array
items:
$ref: '#/components/schemas/Address'
phone_numbers:
description: The phone numbers of the company
+ nullable: true
type: array
items:
$ref: '#/components/schemas/Phone'
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the company between the remote 3rd
+ party & Panora
+ nullable: true
+ additionalProperties: true
id:
type: string
description: The UUID of the company
+ nullable: true
remote_id:
type: string
description: The id of the company in the context of the Crm 3rd Party
+ nullable: true
remote_data:
type: object
- properties: {}
+ description: The remote data of the company in the context of the Crm 3rd Party
+ nullable: true
+ additionalProperties: true
created_at:
type: object
- properties: {}
+ description: The created date of the object
+ nullable: true
modified_at:
type: object
- properties: {}
+ description: The modified date of the object
+ nullable: true
required:
- name
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedCrmCompanyInput:
type: object
properties:
name:
type: string
description: The name of the company
+ nullable: true
industry:
type: string
description: >-
The industry of the company. Authorized values can be found in the
Industry enum.
+ nullable: true
number_of_employees:
type: number
description: The number of employees of the company
+ nullable: true
user_id:
type: string
description: The UUID of the user who owns the company
+ nullable: true
email_addresses:
description: The email addresses of the company
+ nullable: true
type: array
items:
$ref: '#/components/schemas/Email'
addresses:
description: The addresses of the company
+ nullable: true
type: array
items:
$ref: '#/components/schemas/Address'
phone_numbers:
description: The phone numbers of the company
+ nullable: true
type: array
items:
$ref: '#/components/schemas/Phone'
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the company between the remote 3rd
+ party & Panora
+ nullable: true
+ additionalProperties: true
required:
- name
- - field_mappings
UnifiedCrmContactOutput:
type: object
properties:
first_name:
type: string
+ nullable: true
description: The first name of the contact
last_name:
type: string
+ nullable: true
description: The last name of the contact
email_addresses:
+ nullable: true
description: The email addresses of the contact
type: array
items:
$ref: '#/components/schemas/Email'
phone_numbers:
+ nullable: true
description: The phone numbers of the contact
type: array
items:
$ref: '#/components/schemas/Phone'
addresses:
+ nullable: true
description: The addresses of the contact
type: array
items:
$ref: '#/components/schemas/Address'
user_id:
type: string
+ nullable: true
description: The UUID of the user who owns the contact
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the contact between the remote 3rd
+ party & Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the contact
remote_id:
type: string
+ nullable: true
description: The id of the contact in the context of the Crm 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the contact in the context of the Crm 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- first_name
- last_name
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedCrmContactInput:
type: object
properties:
first_name:
type: string
+ nullable: true
description: The first name of the contact
last_name:
type: string
+ nullable: true
description: The last name of the contact
email_addresses:
+ nullable: true
description: The email addresses of the contact
type: array
items:
$ref: '#/components/schemas/Email'
phone_numbers:
+ nullable: true
description: The phone numbers of the contact
type: array
items:
$ref: '#/components/schemas/Phone'
addresses:
+ nullable: true
description: The addresses of the contact
type: array
items:
$ref: '#/components/schemas/Address'
user_id:
type: string
+ nullable: true
description: The UUID of the user who owns the contact
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the contact between the remote 3rd
+ party & Panora
+ additionalProperties: true
required:
- first_name
- last_name
- - field_mappings
UnifiedCrmDealOutput:
type: object
properties:
name:
type: string
description: The name of the deal
+ nullable: true
description:
type: string
description: The description of the deal
+ nullable: true
amount:
type: number
description: The amount of the deal
+ nullable: true
user_id:
type: string
+ nullable: true
description: The UUID of the user who is on the deal
stage_id:
type: string
+ nullable: true
description: The UUID of the stage of the deal
company_id:
type: string
+ nullable: true
description: The UUID of the company tied to the deal
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the company between the remote 3rd
+ party & Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the deal
remote_id:
type: string
+ nullable: true
description: The id of the deal in the context of the Crm 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the deal in the context of the Crm 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- description
- amount
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedCrmDealInput:
type: object
properties:
name:
type: string
description: The name of the deal
+ nullable: true
description:
type: string
description: The description of the deal
+ nullable: true
amount:
type: number
description: The amount of the deal
+ nullable: true
user_id:
type: string
+ nullable: true
description: The UUID of the user who is on the deal
stage_id:
type: string
+ nullable: true
description: The UUID of the stage of the deal
company_id:
type: string
+ nullable: true
description: The UUID of the company tied to the deal
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the company between the remote 3rd
+ party & Panora
+ additionalProperties: true
required:
- name
- description
- amount
- - field_mappings
UnifiedCrmEngagementOutput:
type: object
properties:
content:
type: string
+ nullable: true
description: The content of the engagement
direction:
type: string
+ nullable: true
description: >-
The direction of the engagement. Authorized values are INBOUND or
OUTBOUND
subject:
type: string
+ nullable: true
description: The subject of the engagement
start_at:
format: date-time
type: string
+ nullable: true
description: The start time of the engagement
end_time:
format: date-time
type: string
+ nullable: true
description: The end time of the engagement
type:
type: string
+ nullable: true
description: >-
The type of the engagement. Authorized values are EMAIL, CALL or
MEETING
user_id:
type: string
+ nullable: true
description: The UUID of the user tied to the engagement
company_id:
type: string
+ nullable: true
description: The UUID of the company tied to the engagement
contacts:
+ nullable: true
description: The UUIDs of contacts tied to the engagement object
type: array
items:
type: string
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the engagement between the remote 3rd
+ party & Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the engagement
remote_id:
type: string
+ nullable: true
description: The id of the engagement in the context of the Crm 3rd Party
remote_data:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The remote data of the engagement in the context of the Crm 3rd
+ Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- type
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedCrmEngagementInput:
type: object
properties:
content:
type: string
+ nullable: true
description: The content of the engagement
direction:
type: string
+ nullable: true
description: >-
The direction of the engagement. Authorized values are INBOUND or
OUTBOUND
subject:
type: string
+ nullable: true
description: The subject of the engagement
start_at:
format: date-time
type: string
+ nullable: true
description: The start time of the engagement
end_time:
format: date-time
type: string
+ nullable: true
description: The end time of the engagement
type:
type: string
+ nullable: true
description: >-
The type of the engagement. Authorized values are EMAIL, CALL or
MEETING
user_id:
type: string
+ nullable: true
description: The UUID of the user tied to the engagement
company_id:
type: string
+ nullable: true
description: The UUID of the company tied to the engagement
contacts:
+ nullable: true
description: The UUIDs of contacts tied to the engagement object
type: array
items:
type: string
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the engagement between the remote 3rd
+ party & Panora
+ additionalProperties: true
required:
- type
- - field_mappings
UnifiedCrmNoteOutput:
type: object
properties:
content:
type: string
description: The content of the note
+ nullable: true
user_id:
type: string
+ nullable: true
description: The UUID of the user tied the note
company_id:
type: string
+ nullable: true
description: The UUID of the company tied to the note
contact_id:
type: string
+ nullable: true
description: The UUID fo the contact tied to the note
deal_id:
type: string
+ nullable: true
description: The UUID of the deal tied to the note
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the note between the remote 3rd party &
+ Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the note
remote_id:
type: string
+ nullable: true
description: The id of the note in the context of the Crm 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the note in the context of the Crm 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- content
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedCrmNoteInput:
type: object
properties:
content:
type: string
description: The content of the note
+ nullable: true
user_id:
type: string
+ nullable: true
description: The UUID of the user tied the note
company_id:
type: string
+ nullable: true
description: The UUID of the company tied to the note
contact_id:
type: string
+ nullable: true
description: The UUID fo the contact tied to the note
deal_id:
type: string
+ nullable: true
description: The UUID of the deal tied to the note
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the note between the remote 3rd party &
+ Panora
+ additionalProperties: true
required:
- content
- - field_mappings
UnifiedCrmStageOutput:
type: object
properties:
stage_name:
type: string
description: The name of the stage
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the stage between the remote 3rd party
+ & Panora
+ nullable: true
+ additionalProperties: true
id:
type: string
description: The UUID of the stage
+ nullable: true
remote_id:
type: string
description: The id of the stage in the context of the Crm 3rd Party
+ nullable: true
remote_data:
type: object
- properties: {}
+ description: The remote data of the stage in the context of the Crm 3rd Party
+ nullable: true
+ additionalProperties: true
created_at:
type: object
- properties: {}
+ description: The created date of the object
+ nullable: true
modified_at:
type: object
- properties: {}
+ description: The modified date of the object
+ nullable: true
required:
- stage_name
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedCrmTaskOutput:
type: object
properties:
subject:
type: string
description: The subject of the task
+ nullable: true
content:
type: string
description: The content of the task
+ nullable: true
status:
type: string
description: The status of the task. Authorized values are PENDING, COMPLETED.
+ nullable: true
due_date:
format: date-time
type: string
description: The due date of the task
+ nullable: true
finished_date:
format: date-time
type: string
description: The finished date of the task
+ nullable: true
user_id:
type: string
description: The UUID of the user tied to the task
+ nullable: true
company_id:
type: string
- description: The UUID fo the company tied to the task
+ description: The UUID of the company tied to the task
+ nullable: true
deal_id:
type: string
description: The UUID of the deal tied to the task
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the task between the remote 3rd party &
+ Panora
+ nullable: true
+ additionalProperties: true
id:
type: string
description: The UUID of the task
+ nullable: true
remote_id:
type: string
description: The id of the task in the context of the Crm 3rd Party
+ nullable: true
remote_data:
type: object
- properties: {}
+ description: The remote data of the task in the context of the Crm 3rd Party
+ nullable: true
+ additionalProperties: true
created_at:
type: object
- properties: {}
+ description: The created date of the object
+ nullable: true
modified_at:
type: object
- properties: {}
+ description: The modified date of the object
+ nullable: true
required:
- subject
- content
- status
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedCrmTaskInput:
type: object
properties:
subject:
type: string
description: The subject of the task
+ nullable: true
content:
type: string
description: The content of the task
+ nullable: true
status:
type: string
description: The status of the task. Authorized values are PENDING, COMPLETED.
+ nullable: true
due_date:
format: date-time
type: string
description: The due date of the task
+ nullable: true
finished_date:
format: date-time
type: string
description: The finished date of the task
+ nullable: true
user_id:
type: string
description: The UUID of the user tied to the task
+ nullable: true
company_id:
type: string
- description: The UUID fo the company tied to the task
+ description: The UUID of the company tied to the task
+ nullable: true
deal_id:
type: string
description: The UUID of the deal tied to the task
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the task between the remote 3rd party &
+ Panora
+ nullable: true
+ additionalProperties: true
required:
- subject
- content
- status
- - field_mappings
UnifiedCrmUserOutput:
type: object
properties:
name:
type: string
description: The name of the user
+ nullable: true
email:
type: string
description: The email of the user
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the user between the remote 3rd party &
+ Panora
+ nullable: true
+ additionalProperties: true
id:
type: string
description: The UUID of the user
+ nullable: true
remote_id:
type: string
description: The id of the user in the context of the Crm 3rd Party
+ nullable: true
remote_data:
type: object
- properties: {}
+ description: The remote data of the user in the context of the Crm 3rd Party
+ nullable: true
+ additionalProperties: true
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ description: The created date of the object
+ nullable: true
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ description: The modified date of the object
+ nullable: true
required:
- name
- email
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingCollectionOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the collection
description:
type: string
+ nullable: true
description: The description of the collection
collection_type:
type: string
+ nullable: true
description: >-
The type of the collection. Authorized values are either PROJECT or
LIST
id:
type: string
+ nullable: true
description: The UUID of the collection
remote_id:
type: string
+ nullable: true
description: The id of the collection in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the collection in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingCommentOutput:
type: object
properties:
body:
type: string
+ nullable: true
description: The body of the comment
html_body:
type: string
+ nullable: true
description: The html body of the comment
is_private:
type: boolean
+ nullable: true
description: The public status of the comment
creator_type:
type: string
+ nullable: true
description: >-
The creator type of the comment. Authorized values are either USER
or CONTACT
ticket_id:
type: string
+ nullable: true
description: The UUID of the ticket the comment is tied to
contact_id:
type: string
+ nullable: true
description: >-
The UUID of the contact which the comment belongs to (if no user_id
specified)
user_id:
type: string
+ nullable: true
description: >-
The UUID of the user which the comment belongs to (if no contact_id
specified)
attachments:
+ nullable: true
description: The attachements UUIDs tied to the comment
type: array
items:
type: string
id:
type: string
+ nullable: true
description: The UUID of the comment
remote_id:
type: string
+ nullable: true
description: The id of the comment in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the comment in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- body
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingTagOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the tag
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the tag between the remote 3rd party &
+ Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the tag
remote_id:
type: string
+ nullable: true
description: The id of the tag in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the tag in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingTeamOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the team
description:
type: string
+ nullable: true
description: The description of the team
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the team between the remote 3rd party &
+ Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the team
remote_id:
type: string
+ nullable: true
description: The id of the team in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the team in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- - field_mappings
- - remote_data
- - created_at
- - modified_at
- CreateLinkedUserDto:
+ LinkedUserResponse:
type: object
properties:
- linked_user_origin_id:
+ id_linked_user:
type: string
+ nullable: true
+ linked_user_origin_id:
+ type: string
+ nullable: true
+ alias:
+ type: string
+ nullable: true
+ id_project:
+ type: string
+ nullable: true
+ required:
+ - id_linked_user
+ - linked_user_origin_id
+ - alias
+ - id_project
+ CreateLinkedUserDto:
+ type: object
+ properties:
+ linked_user_origin_id:
+ type: string
+ nullable: true
alias:
type: string
+ nullable: true
required:
- linked_user_origin_id
- alias
@@ -8977,25 +9386,107 @@ components:
type: object
properties:
linked_user_origin_ids:
+ nullable: true
type: array
items:
type: string
alias:
type: string
+ nullable: true
required:
- linked_user_origin_ids
- alias
+ CustomFieldResponse:
+ type: object
+ properties:
+ id_attribute:
+ type: string
+ nullable: true
+ description: Attribute Id
+ status:
+ type: string
+ nullable: true
+ description: Attribute Status
+ ressource_owner_type:
+ type: string
+ nullable: true
+ description: Attribute Ressource Owner Type
+ slug:
+ type: string
+ nullable: true
+ description: Attribute Slug
+ description:
+ type: string
+ nullable: true
+ description: Attribute Description
+ data_type:
+ type: string
+ nullable: true
+ description: Attribute Data Type
+ remote_id:
+ type: string
+ nullable: true
+ description: Attribute Remote Id
+ source:
+ type: string
+ nullable: true
+ description: Attribute Source
+ id_entity:
+ type: string
+ nullable: true
+ description: Attribute Id Entity
+ id_project:
+ type: string
+ nullable: true
+ description: Attribute Id Project
+ scope:
+ type: string
+ nullable: true
+ description: Attribute Scope
+ id_consumer:
+ type: string
+ nullable: true
+ description: Attribute Id Consumer
+ created_at:
+ format: date-time
+ type: string
+ nullable: true
+ description: Attribute Created Date
+ modified_at:
+ format: date-time
+ type: string
+ nullable: true
+ description: Attribute Modified Date
+ required:
+ - id_attribute
+ - status
+ - ressource_owner_type
+ - slug
+ - description
+ - data_type
+ - remote_id
+ - source
+ - id_entity
+ - id_project
+ - scope
+ - id_consumer
+ - created_at
+ - modified_at
DefineTargetFieldDto:
type: object
properties:
object_type_owner:
type: string
+ nullable: true
name:
type: string
+ nullable: true
description:
type: string
+ nullable: true
data_type:
type: string
+ nullable: true
required:
- object_type_owner
- name
@@ -9006,18 +9497,25 @@ components:
properties:
object_type_owner:
type: string
+ nullable: true
name:
type: string
+ nullable: true
description:
type: string
+ nullable: true
data_type:
type: string
+ nullable: true
source_custom_field_id:
type: string
+ nullable: true
source_provider:
type: string
+ nullable: true
linked_user_id:
type: string
+ nullable: true
required:
- object_type_owner
- name
@@ -9031,17 +9529,41 @@ components:
properties:
attributeId:
type: string
+ nullable: true
+ description: Attribute Id
source_custom_field_id:
type: string
+ nullable: true
+ description: Attribute Id
source_provider:
type: string
+ nullable: true
+ description: Attribute Id
linked_user_id:
type: string
+ nullable: true
+ description: Attribute Id
required:
- attributeId
- source_custom_field_id
- source_provider
- linked_user_id
+ PassThroughResponse:
+ type: object
+ properties:
+ url:
+ type: string
+ nullable: true
+ status:
+ type: number
+ nullable: true
+ data:
+ type: object
+ nullable: true
+ required:
+ - url
+ - status
+ - data
PassThroughRequestDto:
type: object
properties:
@@ -9055,26 +9577,23 @@ components:
type: string
path:
type: string
+ nullable: true
data:
- type: object
+ oneOf:
+ - type: object
+ additionalProperties: true
+ - type: array
+ items:
+ type: object
+ additionalProperties: true
+ nullable: true
headers:
type: object
+ additionalProperties: true
+ nullable: true
required:
- method
- path
- PassThroughResponse:
- type: object
- properties:
- url:
- type: string
- status:
- type: number
- data:
- type: object
- required:
- - url
- - status
- - data
UnifiedHrisBankinfoOutput:
type: object
properties: {}
@@ -9176,298 +9695,400 @@ components:
properties:
activity_type:
type: string
+ nullable: true
description: The type of activity
subject:
type: string
+ nullable: true
description: The subject of the activity
body:
type: string
+ nullable: true
description: The body of the activity
visibility:
type: string
+ nullable: true
description: The visibility of the activity
candidate_id:
type: string
+ nullable: true
description: The UUID of the candidate
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the activity
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the activity
remote_id:
type: string
+ nullable: true
description: The remote ID of the activity in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the activity in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsActivityInput:
type: object
properties:
activity_type:
type: string
+ nullable: true
description: The type of activity
subject:
type: string
+ nullable: true
description: The subject of the activity
body:
type: string
+ nullable: true
description: The body of the activity
visibility:
type: string
+ nullable: true
description: The visibility of the activity
candidate_id:
type: string
+ nullable: true
description: The UUID of the candidate
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the activity
field_mappings:
type: object
- properties: {}
- required:
- - field_mappings
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
UnifiedAtsApplicationOutput:
type: object
properties:
applied_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The application date
rejected_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The rejection date
offers:
+ nullable: true
description: The offers UUIDs for the application
type: array
items:
type: string
source:
type: string
+ nullable: true
description: The source of the application
credited_to:
type: string
+ nullable: true
description: The UUID of the person credited for the application
current_stage:
type: string
+ nullable: true
description: The UUID of the current stage of the application
reject_reason:
type: string
+ nullable: true
description: The rejection reason for the application
candidate_id:
type: string
+ nullable: true
description: The UUID of the candidate
job_id:
type: string
description: The UUID of the job
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the application
remote_id:
type: string
+ nullable: true
description: The remote ID of the application in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the application in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
+ remote_created_at:
+ format: date-time
+ type: string
+ nullable: true
+ description: The remote created date of the object
+ remote_modified_at:
+ format: date-time
+ type: string
+ nullable: true
+ description: The remote modified date of the object
UnifiedAtsApplicationInput:
type: object
properties:
applied_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The application date
rejected_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The rejection date
offers:
+ nullable: true
description: The offers UUIDs for the application
type: array
items:
type: string
source:
type: string
+ nullable: true
description: The source of the application
credited_to:
type: string
+ nullable: true
description: The UUID of the person credited for the application
current_stage:
type: string
+ nullable: true
description: The UUID of the current stage of the application
reject_reason:
type: string
+ nullable: true
description: The rejection reason for the application
candidate_id:
type: string
+ nullable: true
description: The UUID of the candidate
job_id:
type: string
description: The UUID of the job
field_mappings:
type: object
- properties: {}
- required:
- - field_mappings
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
UnifiedAtsAttachmentOutput:
type: object
properties:
file_url:
type: string
+ nullable: true
description: The URL of the file
file_name:
type: string
+ nullable: true
description: The name of the file
attachment_type:
type: string
+ nullable: true
description: The type of the file
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the attachment
remote_modified_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote modification date of the attachment
candidate_id:
type: string
+ nullable: true
description: The UUID of the candidate
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the attachment
remote_id:
type: string
+ nullable: true
description: The remote ID of the attachment
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the attachment in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsAttachmentInput:
type: object
properties:
file_url:
type: string
+ nullable: true
description: The URL of the file
file_name:
type: string
+ nullable: true
description: The name of the file
attachment_type:
type: string
+ nullable: true
description: The type of the file
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the attachment
remote_modified_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote modification date of the attachment
candidate_id:
type: string
+ nullable: true
description: The UUID of the candidate
field_mappings:
type: object
- properties: {}
- required:
- - field_mappings
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
Url:
type: object
- properties: {}
+ properties:
+ url:
+ type: string
+ nullable: true
+ description: The url.
+ url_type:
+ type: string
+ nullable: true
+ description: The url type. It takes [WEBSITE | BLOG | LINKEDIN | GITHUB | OTHER]
+ required:
+ - url
+ - url_type
UnifiedAtsCandidateOutput:
type: object
properties:
first_name:
type: string
+ nullable: true
description: The first name of the candidate
last_name:
type: string
+ nullable: true
description: The last name of the candidate
company:
type: string
+ nullable: true
description: The company of the candidate
title:
type: string
+ nullable: true
description: The title of the candidate
locations:
type: string
+ nullable: true
description: The locations of the candidate
is_private:
type: boolean
+ nullable: true
description: Whether the candidate is private
email_reachable:
type: boolean
+ nullable: true
description: Whether the candidate is reachable by email
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the candidate
remote_modified_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote modification date of the candidate
last_interaction_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The last interaction date with the candidate
attachments:
+ nullable: true
description: The attachments UUIDs of the candidate
type: array
items:
type: string
applications:
+ nullable: true
description: The applications UUIDs of the candidate
type: array
items:
type: string
tags:
+ nullable: true
description: The tags of the candidate
type: array
items:
type: string
urls:
+ nullable: true
description: >-
The urls of the candidate, possible values for Url type are WEBSITE,
BLOG, LINKEDIN, GITHUB, or OTHER
@@ -9475,90 +10096,113 @@ components:
items:
$ref: '#/components/schemas/Url'
phone_numbers:
+ nullable: true
description: The phone numbers of the candidate
type: array
items:
$ref: '#/components/schemas/Phone'
email_addresses:
+ nullable: true
description: The email addresses of the candidate
type: array
items:
$ref: '#/components/schemas/Email'
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the candidate
remote_id:
type: string
+ nullable: true
description: The id of the candidate in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the candidate in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsCandidateInput:
type: object
properties:
first_name:
type: string
+ nullable: true
description: The first name of the candidate
last_name:
type: string
+ nullable: true
description: The last name of the candidate
company:
type: string
+ nullable: true
description: The company of the candidate
title:
type: string
+ nullable: true
description: The title of the candidate
locations:
type: string
+ nullable: true
description: The locations of the candidate
is_private:
type: boolean
+ nullable: true
description: Whether the candidate is private
email_reachable:
type: boolean
+ nullable: true
description: Whether the candidate is reachable by email
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the candidate
remote_modified_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote modification date of the candidate
last_interaction_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The last interaction date with the candidate
attachments:
+ nullable: true
description: The attachments UUIDs of the candidate
type: array
items:
type: string
applications:
+ nullable: true
description: The applications UUIDs of the candidate
type: array
items:
type: string
tags:
+ nullable: true
description: The tags of the candidate
type: array
items:
type: string
urls:
+ nullable: true
description: >-
The urls of the candidate, possible values for Url type are WEBSITE,
BLOG, LINKEDIN, GITHUB, or OTHER
@@ -9566,229 +10210,292 @@ components:
items:
$ref: '#/components/schemas/Url'
phone_numbers:
+ nullable: true
description: The phone numbers of the candidate
type: array
items:
$ref: '#/components/schemas/Phone'
email_addresses:
+ nullable: true
description: The email addresses of the candidate
type: array
items:
$ref: '#/components/schemas/Email'
field_mappings:
type: object
- properties: {}
- required:
- - field_mappings
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
UnifiedAtsDepartmentOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the department
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the department
remote_id:
type: string
+ nullable: true
description: The remote ID of the department in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the department in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsInterviewOutput:
type: object
properties:
status:
type: string
+ nullable: true
description: The status of the interview
application_id:
type: string
+ nullable: true
description: The UUID of the application
job_interview_stage_id:
type: string
+ nullable: true
description: The UUID of the job interview stage
organized_by:
type: string
+ nullable: true
description: The UUID of the organizer
interviewers:
+ nullable: true
description: The UUIDs of the interviewers
type: array
items:
type: string
location:
type: string
+ nullable: true
description: The location of the interview
start_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The start date and time of the interview
end_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The end date and time of the interview
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the interview
remote_updated_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote modification date of the interview
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the interview
remote_id:
type: string
+ nullable: true
description: The remote ID of the interview in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the interview in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsInterviewInput:
type: object
properties:
status:
type: string
+ nullable: true
description: The status of the interview
application_id:
type: string
+ nullable: true
description: The UUID of the application
job_interview_stage_id:
type: string
+ nullable: true
description: The UUID of the job interview stage
organized_by:
type: string
+ nullable: true
description: The UUID of the organizer
interviewers:
+ nullable: true
description: The UUIDs of the interviewers
type: array
items:
type: string
location:
type: string
+ nullable: true
description: The location of the interview
start_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The start date and time of the interview
end_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The end date and time of the interview
remote_created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote creation date of the interview
remote_updated_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The remote modification date of the interview
field_mappings:
type: object
- properties: {}
- required:
- - field_mappings
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
UnifiedAtsJobinterviewstageOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the job interview stage
stage_order:
type: number
+ nullable: true
description: The order of the stage
job_id:
type: string
+ nullable: true
description: The UUID of the job
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the job interview stage
remote_id:
type: string
+ nullable: true
description: >-
The remote ID of the job interview stage in the context of the 3rd
Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: >-
+ The remote data of the job interview stage in the context of the 3rd
+ Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsJobOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the job
description:
type: string
+ nullable: true
description: The description of the job
code:
type: string
+ nullable: true
description: The code of the job
status:
type: string
+ nullable: true
description: The status of the job
type:
type: string
+ nullable: true
description: The type of the job
confidential:
type: boolean
+ nullable: true
description: Whether the job is confidential
departments:
+ nullable: true
description: The departments UUIDs associated with the job
type: array
items:
type: string
offices:
+ nullable: true
description: The offices UUIDs associated with the job
type: array
items:
type: string
managers:
+ nullable: true
description: The managers UUIDs associated with the job
type: array
items:
type: string
recruiters:
+ nullable: true
description: The recruiters UUIDs associated with the job
type: array
items:
@@ -9796,315 +10503,397 @@ components:
remote_created_at:
type: string
format: date-time
+ nullable: true
description: The remote creation date of the job
remote_updated_at:
type: string
format: date-time
+ nullable: true
description: The remote modification date of the job
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the job
remote_id:
type: string
+ nullable: true
description: The remote ID of the job in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the job in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsOfferOutput:
type: object
properties:
created_by:
type: string
description: The UUID of the creator
+ nullable: true
remote_created_at:
- type: string
format: date-time
+ type: string
description: The remote creation date of the offer
+ nullable: true
closed_at:
- type: string
format: date-time
+ type: string
description: The closing date of the offer
+ nullable: true
sent_at:
- type: string
format: date-time
+ type: string
description: The sending date of the offer
+ nullable: true
start_date:
- type: string
format: date-time
+ type: string
description: The start date of the offer
+ nullable: true
status:
type: string
description: The status of the offer
+ nullable: true
application_id:
type: string
description: The UUID of the application
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
+ nullable: true
+ additionalProperties: true
id:
type: string
description: The UUID of the offer
+ nullable: true
remote_id:
type: string
description: The remote ID of the offer in the context of the 3rd Party
+ nullable: true
remote_data:
type: object
- properties: {}
+ description: The remote data of the offer in the context of the 3rd Party
+ nullable: true
+ additionalProperties: true
created_at:
type: object
- properties: {}
+ description: The created date of the object
+ nullable: true
modified_at:
type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ description: The modified date of the object
+ nullable: true
UnifiedAtsOfficeOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the office
location:
type: string
+ nullable: true
description: The location of the office
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
description: The UUID of the office
remote_id:
type: string
+ nullable: true
description: The remote ID of the office in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the office in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsRejectreasonOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the reject reason
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the reject reason
remote_id:
type: string
+ nullable: true
description: The remote ID of the reject reason in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the reject reason in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsScorecardOutput:
type: object
properties:
overall_recommendation:
type: string
+ nullable: true
description: The overall recommendation
application_id:
type: string
+ nullable: true
description: The UUID of the application
interview_id:
type: string
+ nullable: true
description: The UUID of the interview
remote_created_at:
type: string
- format: date-time
+ nullable: true
description: The remote creation date of the scorecard
submitted_at:
type: string
- format: date-time
+ nullable: true
description: The submission date of the scorecard
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
description: The UUID of the scorecard
remote_id:
type: string
+ nullable: true
description: The remote ID of the scorecard in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the scorecard in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAtsTagOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the tag
id_ats_candidate:
type: string
+ nullable: true
description: The UUID of the candidate
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the tag
remote_id:
type: string
+ nullable: true
description: The remote ID of the tag in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the tag in the context of the 3rd Party
created_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The creation date of the tag
modified_at:
- type: string
format: date-time
+ type: string
+ nullable: true
description: The modification date of the tag
- required:
- - field_mappings
- - remote_data
UnifiedAtsUserOutput:
type: object
properties:
first_name:
type: string
description: The first name of the user
+ nullable: true
last_name:
type: string
description: The last name of the user
+ nullable: true
email:
type: string
description: The email of the user
+ nullable: true
disabled:
type: boolean
description: Whether the user is disabled
+ nullable: true
access_role:
type: string
description: The access role of the user
+ nullable: true
remote_created_at:
- type: string
format: date-time
+ type: string
description: The remote creation date of the user
+ nullable: true
remote_modified_at:
- type: string
format: date-time
+ type: string
description: The remote modification date of the user
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
+ nullable: true
+ additionalProperties: true
id:
type: string
description: The UUID of the user
+ nullable: true
remote_id:
type: string
description: The remote ID of the user in the context of the 3rd Party
+ nullable: true
remote_data:
type: object
- properties: {}
+ description: The remote data of the user in the context of the 3rd Party
+ nullable: true
+ additionalProperties: true
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ description: The created date of the object
+ nullable: true
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ description: The modified date of the object
+ nullable: true
UnifiedAtsEeocsOutput:
type: object
properties:
candidate_id:
type: string
+ nullable: true
description: The UUID of the candidate
submitted_at:
type: string
format: date-time
+ nullable: true
description: The submission date of the EEOC
race:
type: string
+ nullable: true
description: The race of the candidate
gender:
type: string
+ nullable: true
description: The gender of the candidate
veteran_status:
type: string
+ nullable: true
description: The veteran status of the candidate
disability_status:
type: string
+ nullable: true
description: The disability status of the candidate
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the EEOC
remote_id:
type: string
+ nullable: true
description: The remote ID of the EEOC in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the EEOC in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
- required:
- - field_mappings
- - remote_data
- - created_at
- - modified_at
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
UnifiedAccountingAccountOutput:
type: object
properties: {}
@@ -10194,81 +10983,111 @@ components:
properties:
name:
type: string
+ nullable: true
description: The name of the drive
remote_created_at:
type: string
+ nullable: true
description: When the third party s drive was created.
drive_url:
type: string
+ nullable: true
description: The url of the drive
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the drive
remote_id:
type: string
+ nullable: true
description: The id of the drive in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the drive in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- remote_created_at
- drive_url
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedFilestorageFileOutput:
type: object
properties:
name:
type: string
description: The name of the file
+ nullable: true
file_url:
type: string
description: The url of the file
+ nullable: true
mime_type:
type: string
description: The mime type of the file
+ nullable: true
size:
type: string
description: The size of the file
+ nullable: true
folder_id:
type: string
description: The UUID of the folder tied to the file
+ nullable: true
permission:
type: string
description: The UUID of the permission tied to the file
+ nullable: true
shared_link:
type: string
description: The UUID of the shared link tied to the file
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
+ nullable: true
+ additionalProperties: true
id:
type: string
description: The UUID of the file
+ nullable: true
remote_id:
type: string
description: The id of the file in the context of the 3rd Party
+ nullable: true
remote_data:
type: object
- properties: {}
+ description: The remote data of the file in the context of the 3rd Party
+ nullable: true
+ additionalProperties: true
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ description: The created date of the object
+ nullable: true
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ description: The modified date of the object
+ nullable: true
required:
- name
- file_url
@@ -10277,37 +11096,44 @@ components:
- folder_id
- permission
- shared_link
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedFilestorageFileInput:
type: object
properties:
name:
type: string
description: The name of the file
+ nullable: true
file_url:
type: string
description: The url of the file
+ nullable: true
mime_type:
type: string
description: The mime type of the file
+ nullable: true
size:
type: string
description: The size of the file
+ nullable: true
folder_id:
type: string
description: The UUID of the folder tied to the file
+ nullable: true
permission:
type: string
description: The UUID of the permission tied to the file
+ nullable: true
shared_link:
type: string
description: The UUID of the shared link tied to the file
+ nullable: true
field_mappings:
type: object
- properties: {}
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
+ nullable: true
+ additionalProperties: true
required:
- name
- file_url
@@ -10316,52 +11142,70 @@ components:
- folder_id
- permission
- shared_link
- - field_mappings
UnifiedFilestorageFolderOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the folder
size:
type: string
+ nullable: true
description: The size of the folder
folder_url:
type: string
+ nullable: true
description: The url of the folder
description:
type: string
description: The description of the folder
drive_id:
type: string
+ nullable: true
description: The UUID of the drive tied to the folder
parent_folder_id:
type: string
+ nullable: true
description: The UUID of the parent folder
shared_link:
type: string
+ nullable: true
description: The UUID of the shared link tied to the folder
permission:
type: string
+ nullable: true
description: The UUID of the permission tied to the folder
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the folder
remote_id:
type: string
+ nullable: true
description: The id of the folder in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: The remote data of the folder in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- size
@@ -10371,40 +11215,47 @@ components:
- parent_folder_id
- shared_link
- permission
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedFilestorageFolderInput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the folder
size:
type: string
+ nullable: true
description: The size of the folder
folder_url:
type: string
+ nullable: true
description: The url of the folder
description:
type: string
description: The description of the folder
drive_id:
type: string
+ nullable: true
description: The UUID of the drive tied to the folder
parent_folder_id:
type: string
+ nullable: true
description: The UUID of the parent folder
shared_link:
type: string
+ nullable: true
description: The UUID of the shared link tied to the folder
permission:
type: string
+ nullable: true
description: The UUID of the permission tied to the folder
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
required:
- name
- size
@@ -10414,12 +11265,12 @@ components:
- parent_folder_id
- shared_link
- permission
- - field_mappings
UnifiedFilestorageGroupOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the group
users:
description: Uuids of users of the group
@@ -10428,143 +11279,184 @@ components:
type: string
remote_was_deleted:
type: boolean
+ nullable: true
description: >-
Indicates whether or not this object has been deleted in the third
party platform.
field_mappings:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
id:
type: string
+ nullable: true
description: The UUID of the group
remote_id:
type: string
+ nullable: true
description: The id of the group in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the group in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- users
- remote_was_deleted
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedUserOutput:
type: object
properties:
name:
type: string
+ nullable: true
description: The name of the user
email:
type: string
+ nullable: true
description: The email of the user
is_me:
type: boolean
+ nullable: true
description: Whether the user is the one who linked this account.
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the object between the remote 3rd party
+ & Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the user
remote_id:
type: string
+ nullable: true
description: The id of the user in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ nullable: true
+ additionalProperties: true
+ description: The remote data of the user in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- name
- email
- is_me
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingAttachmentOutput:
type: object
properties:
file_name:
type: string
+ nullable: true
description: The file name of the attachment
file_url:
type: string
+ nullable: true
description: The file url of the attachment
uploader:
type: string
+ nullable: true
description: The uploader's UUID of the attachment
ticket_id:
type: string
+ nullable: true
description: The UUID of the ticket the attachment is tied to
comment_id:
type: string
+ nullable: true
description: The UUID of the comment the attachment is tied to
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the attachment between the remote 3rd
+ party & Panora
+ additionalProperties: true
id:
type: string
+ nullable: true
description: The UUID of the attachment
remote_id:
type: string
+ nullable: true
description: The id of the attachment in the context of the 3rd Party
remote_data:
type: object
- properties: {}
+ additionalProperties: true
+ nullable: true
+ description: The remote data of the attachment in the context of the 3rd Party
created_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The created date of the object
modified_at:
- type: object
- properties: {}
+ format: date-time
+ type: string
+ nullable: true
+ description: The modified date of the object
required:
- file_name
- file_url
- uploader
- - field_mappings
- - remote_data
- - created_at
- - modified_at
UnifiedTicketingAttachmentInput:
type: object
properties:
file_name:
type: string
+ nullable: true
description: The file name of the attachment
file_url:
type: string
+ nullable: true
description: The file url of the attachment
uploader:
type: string
+ nullable: true
description: The uploader's UUID of the attachment
ticket_id:
type: string
+ nullable: true
description: The UUID of the ticket the attachment is tied to
comment_id:
type: string
+ nullable: true
description: The UUID of the comment the attachment is tied to
field_mappings:
type: object
- properties: {}
+ nullable: true
+ description: >-
+ The custom field mappings of the attachment between the remote 3rd
+ party & Panora
+ additionalProperties: true
required:
- file_name
- file_url
- uploader
- - field_mappings
x-speakeasy-name-override:
- operationId: ^retrieve.*
methodNameOverride: retrieve
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 28ce560e4..904d3ba94 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -566,6 +566,9 @@ importers:
specifier: ^17.7.2
version: 17.7.2
devDependencies:
+ '@nestjs-modules/mailer':
+ specifier: ^2.0.2
+ version: 2.0.2(@nestjs/common@10.3.7)(@nestjs/core@10.3.7)(nodemailer@6.9.14)
'@nestjs/cli':
specifier: ^10.0.0
version: 10.3.2
@@ -914,7 +917,7 @@ packages:
resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
@@ -923,7 +926,7 @@ packages:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
dev: false
/@babel/helper-compilation-targets@7.23.6:
@@ -962,7 +965,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.24.0
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
/@babel/helper-function-name@7.24.7:
resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
@@ -975,7 +978,7 @@ packages:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
/@babel/helper-hoist-variables@7.24.7:
resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
@@ -987,7 +990,7 @@ packages:
resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
/@babel/helper-module-imports@7.24.7:
resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
@@ -1009,7 +1012,7 @@ packages:
'@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-validator-identifier': 7.24.7
dev: true
/@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9):
@@ -1035,7 +1038,7 @@ packages:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
dev: true
/@babel/helper-simple-access@7.24.7:
@@ -1051,7 +1054,7 @@ packages:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
/@babel/helper-split-export-declaration@7.24.7:
resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
@@ -1059,18 +1062,10 @@ packages:
dependencies:
'@babel/types': 7.24.9
- /@babel/helper-string-parser@7.24.1:
- resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
- engines: {node: '>=6.9.0'}
-
/@babel/helper-string-parser@7.24.8:
resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
engines: {node: '>=6.9.0'}
- /@babel/helper-validator-identifier@7.22.20:
- resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
- engines: {node: '>=6.9.0'}
-
/@babel/helper-validator-identifier@7.24.7:
resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
engines: {node: '>=6.9.0'}
@@ -1090,7 +1085,7 @@ packages:
dependencies:
'@babel/template': 7.24.0
'@babel/traverse': 7.24.1(supports-color@5.5.0)
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
transitivePeerDependencies:
- supports-color
dev: true
@@ -1106,7 +1101,7 @@ packages:
resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-validator-identifier': 7.24.7
chalk: 2.4.2
js-tokens: 4.0.0
picocolors: 1.0.0
@@ -1125,7 +1120,8 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
+ dev: true
/@babel/parser@7.24.8:
resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==}
@@ -1304,8 +1300,8 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.24.2
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/parser': 7.24.8
+ '@babel/types': 7.24.9
/@babel/template@7.24.7:
resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==}
@@ -1325,8 +1321,8 @@ packages:
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/parser': 7.24.8
+ '@babel/types': 7.24.9
debug: 4.3.4(supports-color@5.5.0)
globals: 11.12.0
transitivePeerDependencies:
@@ -1353,9 +1349,10 @@ packages:
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-string-parser': 7.24.1
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-string-parser': 7.24.8
+ '@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
+ dev: true
/@babel/types@7.24.9:
resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==}
@@ -1566,6 +1563,112 @@ packages:
'@jridgewell/trace-mapping': 0.3.9
dev: true
+ /@css-inline/css-inline-android-arm-eabi@0.14.1:
+ resolution: {integrity: sha512-LNUR8TY4ldfYi0mi/d4UNuHJ+3o8yLQH9r2Nt6i4qeg1i7xswfL3n/LDLRXvGjBYqeEYNlhlBQzbPwMX1qrU6A==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-android-arm64@0.14.1:
+ resolution: {integrity: sha512-tH5us0NYGoTNBHOUHVV7j9KfJ4DtFOeTLA3cM0XNoMtArNu2pmaaBMFJPqECzavfXkLc7x5Z22UPZYjoyHfvCA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-darwin-arm64@0.14.1:
+ resolution: {integrity: sha512-QE5W1YRIfRayFrtrcK/wqEaxNaqLULPI0gZB4ArbFRd3d56IycvgBasDTHPre5qL2cXCO3VyPx+80XyHOaVkag==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-darwin-x64@0.14.1:
+ resolution: {integrity: sha512-mAvv2sN8awNFsbvBzlFkZPbCNZ6GCWY5/YcIz7V5dPYw+bHHRbjnlkNTEZq5BsDxErVrMIGvz05PGgzuNvZvdQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-linux-arm-gnueabihf@0.14.1:
+ resolution: {integrity: sha512-AWC44xL0X7BgKvrWEqfSqkT2tJA5kwSGrAGT+m0gt11wnTYySvQ6YpX0fTY9i3ppYGu4bEdXFjyK2uY1DTQMHA==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-linux-arm64-gnu@0.14.1:
+ resolution: {integrity: sha512-drj0ciiJgdP3xKXvNAt4W+FH4KKMs8vB5iKLJ3HcH07sNZj58Sx++2GxFRS1el3p+GFp9OoYA6dgouJsGEqt0Q==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-linux-arm64-musl@0.14.1:
+ resolution: {integrity: sha512-FzknI+st8eA8YQSdEJU9ykcM0LZjjigBuynVF5/p7hiMm9OMP8aNhWbhZ8LKJpKbZrQsxSGS4g9Vnr6n6FiSdQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-linux-x64-gnu@0.14.1:
+ resolution: {integrity: sha512-yubbEye+daDY/4vXnyASAxH88s256pPati1DfVoZpU1V0+KP0BZ1dByZOU1ktExurbPH3gZOWisAnBE9xon0Uw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-linux-x64-musl@0.14.1:
+ resolution: {integrity: sha512-6CRAZzoy1dMLPC/tns2rTt1ZwPo0nL/jYBEIAsYTCWhfAnNnpoLKVh5Nm+fSU3OOwTTqU87UkGrFJhObD/wobQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline-win32-x64-msvc@0.14.1:
+ resolution: {integrity: sha512-nzotGiaiuiQW78EzsiwsHZXbxEt6DiMUFcDJ6dhiliomXxnlaPyBfZb6/FMBgRJOf6sknDt/5695OttNmbMYzg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@css-inline/css-inline@0.14.1:
+ resolution: {integrity: sha512-u4eku+hnPqqHIGq/ZUQcaP0TrCbYeLIYBaK7qClNRGZbnh8RC4gVxLEIo8Pceo1nOK9E5G4Lxzlw5KnXcvflfA==}
+ engines: {node: '>= 10'}
+ optionalDependencies:
+ '@css-inline/css-inline-android-arm-eabi': 0.14.1
+ '@css-inline/css-inline-android-arm64': 0.14.1
+ '@css-inline/css-inline-darwin-arm64': 0.14.1
+ '@css-inline/css-inline-darwin-x64': 0.14.1
+ '@css-inline/css-inline-linux-arm-gnueabihf': 0.14.1
+ '@css-inline/css-inline-linux-arm64-gnu': 0.14.1
+ '@css-inline/css-inline-linux-arm64-musl': 0.14.1
+ '@css-inline/css-inline-linux-x64-gnu': 0.14.1
+ '@css-inline/css-inline-linux-x64-musl': 0.14.1
+ '@css-inline/css-inline-win32-x64-msvc': 0.14.1
+ dev: true
+
/@ctrl/tinycolor@3.6.1:
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines: {node: '>=10'}
@@ -2734,6 +2837,32 @@ packages:
dev: false
optional: true
+ /@nestjs-modules/mailer@2.0.2(@nestjs/common@10.3.7)(@nestjs/core@10.3.7)(nodemailer@6.9.14):
+ resolution: {integrity: sha512-+z4mADQasg0H1ZaGu4zZTuKv2pu+XdErqx99PLFPzCDNTN/q9U59WPgkxVaHnsvKHNopLj5Xap7G4ZpptduoYw==}
+ peerDependencies:
+ '@nestjs/common': '>=7.0.9'
+ '@nestjs/core': '>=7.0.9'
+ nodemailer: '>=6.4.6'
+ dependencies:
+ '@css-inline/css-inline': 0.14.1
+ '@nestjs/common': 10.3.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.1.14)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.7(@nestjs/common@10.3.7)(@nestjs/platform-express@10.3.7)(reflect-metadata@0.1.14)(rxjs@7.8.1)
+ glob: 10.3.12
+ nodemailer: 6.9.14
+ optionalDependencies:
+ '@types/ejs': 3.1.5
+ '@types/mjml': 4.7.4
+ '@types/pug': 2.0.10
+ ejs: 3.1.10
+ handlebars: 4.7.8
+ liquidjs: 10.16.1
+ mjml: 4.15.3
+ preview-email: 3.0.20
+ pug: 3.0.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
/@nestjs/bull-shared@10.1.1(@nestjs/common@10.3.7)(@nestjs/core@10.3.7):
resolution: {integrity: sha512-su7eThDrSz1oQagEi8l+1CyZ7N6nMgmyAX0DuZoXqT1KEVEDqGX7x80RlPVF60m/8SYOskckGMjJROSfNQcErw==}
peerDependencies:
@@ -3243,6 +3372,12 @@ packages:
transitivePeerDependencies:
- encoding
+ /@one-ini/wasm@0.1.1:
+ resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@opentelemetry/api-logs@0.51.1:
resolution: {integrity: sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==}
engines: {node: '>=14'}
@@ -5281,6 +5416,15 @@ packages:
resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==}
dev: true
+ /@selderee/plugin-htmlparser2@0.11.0:
+ resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
+ requiresBuild: true
+ dependencies:
+ domhandler: 5.0.3
+ selderee: 0.11.0
+ dev: true
+ optional: true
+
/@sentry-internal/tracing@7.109.0:
resolution: {integrity: sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw==}
engines: {node: '>=8'}
@@ -5646,20 +5790,20 @@ packages:
/@types/babel__generator@7.6.8:
resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
dev: true
/@types/babel__template@7.4.4:
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
dependencies:
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/parser': 7.24.8
+ '@babel/types': 7.24.9
dev: true
/@types/babel__traverse@7.20.5:
resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
dev: true
/@types/body-parser@1.19.5:
@@ -5743,6 +5887,11 @@ packages:
resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
dev: false
+ /@types/ejs@3.1.5:
+ resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==}
+ dev: true
+ optional: true
+
/@types/eslint-scope@3.7.7:
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
dependencies:
@@ -5884,6 +6033,19 @@ packages:
resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
dev: false
+ /@types/mjml-core@4.15.0:
+ resolution: {integrity: sha512-jSRWTOpwRS/uHIBfGdvLl0a7MaoBZZYHKI+HhsFYChrUOKVJTnjSYsuV6wx0snv6ZaX3TUo5OP/gNsz/uzZz1A==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@types/mjml@4.7.4:
+ resolution: {integrity: sha512-vyi1vzWgMzFMwZY7GSZYX0GU0dmtC8vLHwpgk+NWmwbwRSrlieVyJ9sn5elodwUfklJM7yGl0zQeet1brKTWaQ==}
+ dependencies:
+ '@types/mjml-core': 4.15.0
+ dev: true
+ optional: true
+
/@types/mysql@2.15.22:
resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==}
dependencies:
@@ -5968,6 +6130,11 @@ packages:
/@types/prop-types@15.7.12:
resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
+ /@types/pug@2.0.10:
+ resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
+ dev: true
+ optional: true
+
/@types/qs@6.9.14:
resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==}
@@ -6440,6 +6607,13 @@ packages:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
dev: false
+ /abbrev@2.0.0:
+ resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -6454,20 +6628,12 @@ packages:
mime-types: 2.1.35
negotiator: 0.6.3
- /acorn-import-assertions@1.9.0(acorn@8.11.3):
+ /acorn-import-assertions@1.9.0(acorn@8.12.1):
resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
peerDependencies:
acorn: ^8
dependencies:
- acorn: 8.11.3
-
- /acorn-import-attributes@1.9.5(acorn@8.11.3):
- resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
- peerDependencies:
- acorn: ^8
- dependencies:
- acorn: 8.11.3
- dev: false
+ acorn: 8.12.1
/acorn-import-attributes@1.9.5(acorn@8.12.1):
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
@@ -6475,7 +6641,6 @@ packages:
acorn: ^8
dependencies:
acorn: 8.12.1
- dev: true
/acorn-jsx@5.3.2(acorn@8.11.3):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -6490,16 +6655,24 @@ packages:
engines: {node: '>=0.4.0'}
dev: true
+ /acorn@7.4.1:
+ resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
/acorn@8.11.3:
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
engines: {node: '>=0.4.0'}
hasBin: true
+ dev: true
/acorn@8.12.1:
resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
engines: {node: '>=0.4.0'}
hasBin: true
- dev: true
/adler-32@1.3.1:
resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==}
@@ -6566,6 +6739,16 @@ packages:
require-from-string: 2.0.2
uri-js: 4.4.1
+ /alce@1.2.0:
+ resolution: {integrity: sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==}
+ engines: {node: '>=0.8.0'}
+ requiresBuild: true
+ dependencies:
+ esprima: 1.2.5
+ estraverse: 1.9.3
+ dev: true
+ optional: true
+
/ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
dependencies:
@@ -6853,6 +7036,12 @@ packages:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
dev: true
+ /assert-never@1.3.0:
+ resolution: {integrity: sha512-9Z3vxQ+berkL/JJo0dK+EY3Lp0s3NtSnP3VCLsh5HDcZPrh0M+KQRK5sWhUeyPPH+/RCxZqOxLMR+YC6vlviEQ==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
dev: true
@@ -6868,6 +7057,12 @@ packages:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
dev: false
+ /async@3.2.5:
+ resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@@ -6983,7 +7178,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/template': 7.24.0
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.5
dev: true
@@ -7034,6 +7229,15 @@ packages:
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4)
dev: true
+ /babel-walk@3.0.0-canary-5:
+ resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
+ engines: {node: '>= 10.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@babel/types': 7.24.9
+ dev: true
+ optional: true
+
/backo2@1.0.2:
resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==}
requiresBuild: true
@@ -7100,6 +7304,12 @@ packages:
transitivePeerDependencies:
- supports-color
+ /boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/boxen@7.1.1:
resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==}
engines: {node: '>=14.16'}
@@ -7269,6 +7479,15 @@ packages:
engines: {node: '>=6'}
dev: true
+ /camel-case@3.0.0:
+ resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==}
+ requiresBuild: true
+ dependencies:
+ no-case: 2.3.2
+ upper-case: 1.1.3
+ dev: true
+ optional: true
+
/camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
@@ -7322,6 +7541,16 @@ packages:
escape-string-regexp: 1.0.5
supports-color: 5.5.0
+ /chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+ optional: true
+
/chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -7338,9 +7567,45 @@ packages:
engines: {node: '>=10'}
dev: true
+ /character-parser@2.2.0:
+ resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
+ requiresBuild: true
+ dependencies:
+ is-regex: 1.1.4
+ dev: true
+ optional: true
+
/chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ /cheerio-select@2.1.0:
+ resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
+ requiresBuild: true
+ dependencies:
+ boolbase: 1.0.0
+ css-select: 5.1.0
+ css-what: 6.1.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ dev: true
+ optional: true
+
+ /cheerio@1.0.0-rc.12:
+ resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
+ engines: {node: '>= 6'}
+ requiresBuild: true
+ dependencies:
+ cheerio-select: 2.1.0
+ dom-serializer: 2.0.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ htmlparser2: 8.0.2
+ parse5: 7.1.2
+ parse5-htmlparser2-tree-adapter: 7.0.0
+ dev: true
+ optional: true
+
/chokidar@3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
@@ -7414,6 +7679,15 @@ packages:
resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
dev: false
+ /clean-css@4.2.4:
+ resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
+ engines: {node: '>= 4.0'}
+ requiresBuild: true
+ dependencies:
+ source-map: 0.6.1
+ dev: true
+ optional: true
+
/cli-boxes@3.0.0:
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
engines: {node: '>=10'}
@@ -7573,6 +7847,13 @@ packages:
dependencies:
delayed-stream: 1.0.0
+ /commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
@@ -7586,6 +7867,13 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
+ /commander@6.2.1:
+ resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
+ engines: {node: '>= 6'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/comment-json@4.2.3:
resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==}
engines: {node: '>= 6'}
@@ -7637,7 +7925,6 @@ packages:
dependencies:
ini: 1.3.8
proto-list: 1.2.4
- dev: false
/configstore@6.0.0:
resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==}
@@ -7657,6 +7944,15 @@ packages:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
dev: false
+ /constantinople@4.0.1:
+ resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/parser': 7.24.8
+ '@babel/types': 7.24.9
+ dev: true
+ optional: true
+
/content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
@@ -7804,6 +8100,19 @@ packages:
shebang-command: 1.2.0
which: 1.3.1
+ /cross-spawn@6.0.5:
+ resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
+ engines: {node: '>=4.8'}
+ requiresBuild: true
+ dependencies:
+ nice-try: 1.0.5
+ path-key: 2.0.1
+ semver: 5.7.2
+ shebang-command: 1.2.0
+ which: 1.3.1
+ dev: true
+ optional: true
+
/cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
@@ -7829,6 +8138,18 @@ packages:
engines: {node: '>=4'}
dev: false
+ /css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ requiresBuild: true
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+ dev: true
+ optional: true
+
/css-to-react-native@3.2.0:
resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
dependencies:
@@ -7837,6 +8158,13 @@ packages:
postcss-value-parser: 4.2.0
dev: false
+ /css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
@@ -8075,7 +8403,7 @@ packages:
/deep-extend@0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
- dev: false
+ requiresBuild: true
/deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -8150,7 +8478,6 @@ packages:
/detect-indent@6.1.0:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
- dev: false
/detect-libc@2.0.3:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
@@ -8166,6 +8493,12 @@ packages:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
dev: false
+ /detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
dependencies:
@@ -8197,6 +8530,16 @@ packages:
dependencies:
path-type: 4.0.0
+ /display-notification@2.0.0:
+ resolution: {integrity: sha512-TdmtlAcdqy1NU+j7zlkDdMnCL878zriLaBmoD9quOoq1ySSSGv03l0hXK5CvIFZlIfFI/hizqdQuW+Num7xuhw==}
+ engines: {node: '>=4'}
+ requiresBuild: true
+ dependencies:
+ escape-string-applescript: 1.0.0
+ run-applescript: 3.2.0
+ dev: true
+ optional: true
+
/dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
@@ -8214,6 +8557,12 @@ packages:
esutils: 2.0.3
dev: true
+ /doctypes@1.1.0:
+ resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dependencies:
@@ -8221,6 +8570,79 @@ packages:
csstype: 3.1.3
dev: false
+ /dom-serializer@1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+ dev: true
+ optional: true
+
+ /dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+ dev: true
+ optional: true
+
+ /domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /domhandler@3.3.0:
+ resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==}
+ engines: {node: '>= 4'}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+ optional: true
+
+ /domhandler@4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+ optional: true
+
+ /domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+ optional: true
+
+ /domutils@2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+ requiresBuild: true
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ dev: true
+ optional: true
+
+ /domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+ requiresBuild: true
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ dev: true
+ optional: true
+
/dot-prop@6.0.1:
resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
engines: {node: '>=10'}
@@ -8265,9 +8687,31 @@ packages:
safe-buffer: 5.2.1
dev: false
+ /editorconfig@1.0.4:
+ resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
+ engines: {node: '>=14'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ '@one-ini/wasm': 0.1.1
+ commander: 10.0.1
+ minimatch: 9.0.1
+ semver: 7.6.0
+ dev: true
+ optional: true
+
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+ /ejs@3.1.10:
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dependencies:
+ jake: 10.9.2
+ dev: true
+ optional: true
+
/electron-to-chromium@1.4.731:
resolution: {integrity: sha512-+TqVfZjpRz2V/5SPpmJxq9qK620SC5SqCnxQIOi7i/U08ZDcTpKbT7Xjj9FU5CbXTMUb4fywbIr8C7cGv4hcjw==}
dev: true
@@ -8293,6 +8737,20 @@ packages:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
+ /encoding-japanese@2.0.0:
+ resolution: {integrity: sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==}
+ engines: {node: '>=8.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /encoding-japanese@2.1.0:
+ resolution: {integrity: sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w==}
+ engines: {node: '>=8.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
dependencies:
@@ -8323,6 +8781,19 @@ packages:
strip-ansi: 6.0.1
dev: false
+ /entities@2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/env-paths@3.0.0:
resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -8514,6 +8985,13 @@ packages:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
+ /escape-goat@3.0.0:
+ resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==}
+ engines: {node: '>=10'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/escape-goat@4.0.0:
resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==}
engines: {node: '>=12'}
@@ -8522,6 +9000,13 @@ packages:
/escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ /escape-string-applescript@1.0.0:
+ resolution: {integrity: sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
@@ -8847,6 +9332,14 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
+ /esprima@1.2.5:
+ resolution: {integrity: sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
/esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
@@ -8866,6 +9359,13 @@ packages:
estraverse: 5.3.0
dev: true
+ /estraverse@1.9.3:
+ resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/estraverse@4.3.0:
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
engines: {node: '>=4.0'}
@@ -8918,6 +9418,21 @@ packages:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
+ /execa@0.10.0:
+ resolution: {integrity: sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==}
+ engines: {node: '>=4'}
+ requiresBuild: true
+ dependencies:
+ cross-spawn: 6.0.5
+ get-stream: 3.0.0
+ is-stream: 1.1.0
+ npm-run-path: 2.0.2
+ p-finally: 1.0.0
+ signal-exit: 3.0.7
+ strip-eof: 1.0.0
+ dev: true
+ optional: true
+
/execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -9001,6 +9516,12 @@ packages:
transitivePeerDependencies:
- supports-color
+ /extend-object@1.0.0:
+ resolution: {integrity: sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
dev: false
@@ -9109,6 +9630,14 @@ packages:
tslib: 2.6.3
dev: false
+ /filelist@1.0.4:
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+ requiresBuild: true
+ dependencies:
+ minimatch: 5.1.6
+ dev: true
+ optional: true
+
/fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
@@ -9150,6 +9679,20 @@ packages:
pkg-dir: 4.2.0
dev: false
+ /fixpack@4.0.0:
+ resolution: {integrity: sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ alce: 1.2.0
+ chalk: 3.0.0
+ detect-indent: 6.1.0
+ detect-newline: 3.1.0
+ extend-object: 1.0.0
+ rc: 1.2.8
+ dev: true
+ optional: true
+
/flat-cache@3.2.0:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -9397,7 +9940,13 @@ packages:
/get-port@5.1.1:
resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
engines: {node: '>=8'}
- dev: false
+
+ /get-stream@3.0.0:
+ resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
+ engines: {node: '>=4'}
+ requiresBuild: true
+ dev: true
+ optional: true
/get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
@@ -9496,6 +10045,7 @@ packages:
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
@@ -9615,6 +10165,20 @@ packages:
dev: false
optional: true
+ /handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.1
+ dev: true
+ optional: true
+
/hard-rejection@2.1.0:
resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
engines: {node: '>=6'}
@@ -9665,6 +10229,13 @@ packages:
dependencies:
function-bind: 1.1.2
+ /he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
/help-me@5.0.0:
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
dev: false
@@ -9688,6 +10259,68 @@ packages:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
dev: true
+ /html-minifier@4.0.0:
+ resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==}
+ engines: {node: '>=6'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ camel-case: 3.0.0
+ clean-css: 4.2.4
+ commander: 2.20.3
+ he: 1.2.0
+ param-case: 2.1.1
+ relateurl: 0.2.7
+ uglify-js: 3.19.1
+ dev: true
+ optional: true
+
+ /html-to-text@9.0.5:
+ resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==}
+ engines: {node: '>=14'}
+ requiresBuild: true
+ dependencies:
+ '@selderee/plugin-htmlparser2': 0.11.0
+ deepmerge: 4.3.1
+ dom-serializer: 2.0.0
+ htmlparser2: 8.0.2
+ selderee: 0.11.0
+ dev: true
+ optional: true
+
+ /htmlparser2@5.0.1:
+ resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 3.3.0
+ domutils: 2.8.0
+ entities: 2.2.0
+ dev: true
+ optional: true
+
+ /htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ entities: 4.5.0
+ dev: true
+ optional: true
+
+ /htmlparser2@9.1.0:
+ resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
+ requiresBuild: true
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ entities: 4.5.0
+ dev: true
+ optional: true
+
/http-cache-semantics@4.1.1:
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
dev: false
@@ -9771,6 +10404,15 @@ packages:
dependencies:
safer-buffer: 2.1.2
+ /iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+ optional: true
+
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -9790,8 +10432,8 @@ packages:
resolution: {integrity: sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==}
requiresBuild: true
dependencies:
- acorn: 8.11.3
- acorn-import-assertions: 1.9.0(acorn@8.11.3)
+ acorn: 8.12.1
+ acorn-import-assertions: 1.9.0(acorn@8.12.1)
cjs-module-lexer: 1.2.3
module-details-from-path: 1.0.3
dev: false
@@ -9801,8 +10443,8 @@ packages:
resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==}
requiresBuild: true
dependencies:
- acorn: 8.11.3
- acorn-import-assertions: 1.9.0(acorn@8.11.3)
+ acorn: 8.12.1
+ acorn-import-assertions: 1.9.0(acorn@8.12.1)
cjs-module-lexer: 1.2.3
module-details-from-path: 1.0.3
dev: false
@@ -9811,8 +10453,8 @@ packages:
/import-in-the-middle@1.7.4:
resolution: {integrity: sha512-Lk+qzWmiQuRPPulGQeK5qq0v32k2bHnWrRPFgqyvhw7Kkov5L6MOLOIU3pcWeujc9W4q54Cp3Q2WV16eQkc7Bg==}
dependencies:
- acorn: 8.11.3
- acorn-import-attributes: 1.9.5(acorn@8.11.3)
+ acorn: 8.12.1
+ acorn-import-attributes: 1.9.5(acorn@8.12.1)
cjs-module-lexer: 1.2.3
module-details-from-path: 1.0.3
dev: false
@@ -9820,8 +10462,8 @@ packages:
/import-in-the-middle@1.8.0:
resolution: {integrity: sha512-/xQjze8szLNnJ5rvHSzn+dcVXqCAU6Plbk4P24U/jwPmg1wy7IIp9OjKIO5tYue8GSPhDpPDiApQjvBUmWwhsQ==}
dependencies:
- acorn: 8.11.3
- acorn-import-attributes: 1.9.5(acorn@8.11.3)
+ acorn: 8.12.1
+ acorn-import-attributes: 1.9.5(acorn@8.12.1)
cjs-module-lexer: 1.2.3
module-details-from-path: 1.0.3
dev: false
@@ -9829,8 +10471,8 @@ packages:
/import-in-the-middle@1.9.0:
resolution: {integrity: sha512-Ng1SJINJDBzyUEkx9Mj32XD8G0TQCUb5TMoL9V91CTn6F3wYZLygLuhNFrv0cNMBZaeptnL1zecV6XrIdHJ+xQ==}
dependencies:
- acorn: 8.11.3
- acorn-import-attributes: 1.9.5(acorn@8.11.3)
+ acorn: 8.12.1
+ acorn-import-attributes: 1.9.5(acorn@8.12.1)
cjs-module-lexer: 1.2.3
module-details-from-path: 1.0.3
dev: false
@@ -9869,7 +10511,7 @@ packages:
/ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
- dev: false
+ requiresBuild: true
/ini@2.0.0:
resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==}
@@ -10071,6 +10713,23 @@ packages:
dependencies:
has-tostringtag: 1.0.2
+ /is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /is-expression@4.0.0:
+ resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==}
+ requiresBuild: true
+ dependencies:
+ acorn: 7.4.1
+ object-assign: 4.1.1
+ dev: true
+ optional: true
+
/is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -10176,6 +10835,12 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /is-promise@2.2.2:
+ resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/is-regex@1.1.4:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'}
@@ -10194,6 +10859,13 @@ packages:
dependencies:
call-bind: 1.0.7
+ /is-stream@1.1.0:
+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
@@ -10268,6 +10940,15 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+ optional: true
+
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
@@ -10287,7 +10968,7 @@ packages:
engines: {node: '>=8'}
dependencies:
'@babel/core': 7.24.4
- '@babel/parser': 7.24.4
+ '@babel/parser': 7.24.8
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
@@ -10300,7 +10981,7 @@ packages:
engines: {node: '>=10'}
dependencies:
'@babel/core': 7.24.4
- '@babel/parser': 7.24.4
+ '@babel/parser': 7.24.8
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 7.6.0
@@ -10364,6 +11045,19 @@ packages:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
+ /jake@10.9.2:
+ resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ async: 3.2.5
+ chalk: 4.1.2
+ filelist: 1.0.4
+ minimatch: 3.1.2
+ dev: true
+ optional: true
+
/jest-changed-files@29.7.0:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -10727,7 +11421,7 @@ packages:
'@babel/generator': 7.24.4
'@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4)
'@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4)
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.9
'@jest/expect-utils': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
@@ -10853,10 +11547,29 @@ packages:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
+ /js-beautify@1.15.1:
+ resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==}
+ engines: {node: '>=14'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ config-chain: 1.1.13
+ editorconfig: 1.0.4
+ glob: 10.3.12
+ js-cookie: 3.0.5
+ nopt: 7.2.1
+ dev: true
+ optional: true
+
/js-cookie@3.0.5:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
- dev: false
+
+ /js-stringify@1.0.2:
+ resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
+ requiresBuild: true
+ dev: true
+ optional: true
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -10959,6 +11672,15 @@ packages:
semver: 7.6.0
dev: false
+ /jstransformer@1.0.0:
+ resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==}
+ requiresBuild: true
+ dependencies:
+ is-promise: 2.2.2
+ promise: 7.3.1
+ dev: true
+ optional: true
+
/jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
@@ -10969,6 +11691,22 @@ packages:
object.values: 1.2.0
dev: true
+ /juice@10.0.0:
+ resolution: {integrity: sha512-9f68xmhGrnIi6DBkiiP3rUrQN33SEuaKu1+njX6VgMP+jwZAsnT33WIzlrWICL9matkhYu3OyrqSUP55YTIdGg==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ cheerio: 1.0.0-rc.12
+ commander: 6.2.1
+ mensch: 0.3.4
+ slick: 1.12.2
+ web-resource-inliner: 6.0.1
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
/jwa@1.4.1:
resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==}
dependencies:
@@ -11034,6 +11772,12 @@ packages:
package-json: 8.1.1
dev: false
+ /leac@0.6.0:
+ resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
@@ -11047,9 +11791,55 @@ packages:
type-check: 0.4.0
dev: true
+ /libbase64@1.2.1:
+ resolution: {integrity: sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /libbase64@1.3.0:
+ resolution: {integrity: sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /libmime@5.2.0:
+ resolution: {integrity: sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==}
+ requiresBuild: true
+ dependencies:
+ encoding-japanese: 2.0.0
+ iconv-lite: 0.6.3
+ libbase64: 1.2.1
+ libqp: 2.0.1
+ dev: true
+ optional: true
+
+ /libmime@5.3.5:
+ resolution: {integrity: sha512-nSlR1yRZ43L3cZCiWEw7ali3jY29Hz9CQQ96Oy+sSspYnIP5N54ucOPHqooBsXzwrX1pwn13VUE05q4WmzfaLg==}
+ requiresBuild: true
+ dependencies:
+ encoding-japanese: 2.1.0
+ iconv-lite: 0.6.3
+ libbase64: 1.3.0
+ libqp: 2.1.0
+ dev: true
+ optional: true
+
/libphonenumber-js@1.10.60:
resolution: {integrity: sha512-Ctgq2lXUpEJo5j1762NOzl2xo7z7pqmVWYai0p07LvAkQ32tbPv3wb+tcUeHEiXhKU5buM4H9MXsXo6OlM6C2g==}
+ /libqp@2.0.1:
+ resolution: {integrity: sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /libqp@2.1.0:
+ resolution: {integrity: sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
@@ -11066,6 +11856,14 @@ packages:
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ /linkify-it@5.0.0:
+ resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
+ requiresBuild: true
+ dependencies:
+ uc.micro: 2.1.0
+ dev: true
+ optional: true
+
/lint-staged@15.2.2:
resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==}
engines: {node: '>=18.12.0'}
@@ -11085,6 +11883,15 @@ packages:
- supports-color
dev: true
+ /liquidjs@10.16.1:
+ resolution: {integrity: sha512-1JFL/Y7ONoajrfwav37yuz5yQHU3+Pgz1XWsg9E/2T8Fp65KalNfMF8QZ3+tNETqGUIB66waOSLOi64niYZE9A==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dependencies:
+ commander: 10.0.1
+ dev: true
+ optional: true
+
/listr2@8.0.1:
resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==}
engines: {node: '>=18.0.0'}
@@ -11215,6 +12022,12 @@ packages:
dependencies:
js-tokens: 4.0.0
+ /lower-case@1.1.4:
+ resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lowercase-keys@3.0.0:
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -11266,6 +12079,33 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
+ /mailparser@3.7.1:
+ resolution: {integrity: sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw==}
+ requiresBuild: true
+ dependencies:
+ encoding-japanese: 2.1.0
+ he: 1.2.0
+ html-to-text: 9.0.5
+ iconv-lite: 0.6.3
+ libmime: 5.3.5
+ linkify-it: 5.0.0
+ mailsplit: 5.4.0
+ nodemailer: 6.9.13
+ punycode.js: 2.3.1
+ tlds: 1.252.0
+ dev: true
+ optional: true
+
+ /mailsplit@5.4.0:
+ resolution: {integrity: sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==}
+ requiresBuild: true
+ dependencies:
+ libbase64: 1.2.1
+ libmime: 5.2.0
+ libqp: 2.0.1
+ dev: true
+ optional: true
+
/make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
@@ -11315,6 +12155,12 @@ packages:
fs-monkey: 1.0.5
dev: true
+ /mensch@0.3.4:
+ resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/meow@13.2.0:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
@@ -11407,6 +12253,15 @@ packages:
dependencies:
brace-expansion: 1.1.11
+ /minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+ requiresBuild: true
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+ optional: true
+
/minimatch@8.0.4:
resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -11414,6 +12269,15 @@ packages:
brace-expansion: 2.0.1
dev: true
+ /minimatch@9.0.1:
+ resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ requiresBuild: true
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+ optional: true
+
/minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -11473,6 +12337,433 @@ packages:
engines: {node: '>= 8.0.0'}
dev: false
+ /mjml-accordion@4.15.3:
+ resolution: {integrity: sha512-LPNVSj1LyUVYT9G1gWwSw3GSuDzDsQCu0tPB2uDsq4VesYNnU6v3iLCQidMiR6azmIt13OEozG700ygAUuA6Ng==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-body@4.15.3:
+ resolution: {integrity: sha512-7pfUOVPtmb0wC+oUOn4xBsAw4eT5DyD6xqaxj/kssu6RrFXOXgJaVnDPAI9AzIvXJ/5as9QrqRGYAddehwWpHQ==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-button@4.15.3:
+ resolution: {integrity: sha512-79qwn9AgdGjJR1vLnrcm2rq2AsAZkKC5JPwffTMG+Nja6zGYpTDZFZ56ekHWr/r1b5WxkukcPj2PdevUug8c+Q==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-carousel@4.15.3:
+ resolution: {integrity: sha512-3ju6I4l7uUhPRrJfN3yK9AMsfHvrYbRkcJ1GRphFHzUj37B2J6qJOQUpzA547Y4aeh69TSb7HFVf1t12ejQxVw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-cli@4.15.3:
+ resolution: {integrity: sha512-+V2TDw3tXUVEptFvLSerz125C2ogYl8klIBRY1m5BHd4JvGVf3yhx8N3PngByCzA6PGcv/eydGQN+wy34SHf0Q==}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ chokidar: 3.6.0
+ glob: 10.3.12
+ html-minifier: 4.0.0
+ js-beautify: 1.15.1
+ lodash: 4.17.21
+ minimatch: 9.0.4
+ mjml-core: 4.15.3
+ mjml-migrate: 4.15.3
+ mjml-parser-xml: 4.15.3
+ mjml-validator: 4.15.3
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-column@4.15.3:
+ resolution: {integrity: sha512-hYdEFdJGHPbZJSEysykrevEbB07yhJGSwfDZEYDSbhQQFjV2tXrEgYcFD5EneMaowjb55e3divSJxU4c5q4Qgw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-core@4.15.3:
+ resolution: {integrity: sha512-Dmwk+2cgSD9L9GmTbEUNd8QxkTZtW9P7FN/ROZW/fGZD6Hq6/4TB0zEspg2Ow9eYjZXO2ofOJ3PaQEEShKV0kQ==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ cheerio: 1.0.0-rc.12
+ detect-node: 2.1.0
+ html-minifier: 4.0.0
+ js-beautify: 1.15.1
+ juice: 10.0.0
+ lodash: 4.17.21
+ mjml-migrate: 4.15.3
+ mjml-parser-xml: 4.15.3
+ mjml-validator: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-divider@4.15.3:
+ resolution: {integrity: sha512-vh27LQ9FG/01y0b9ntfqm+GT5AjJnDSDY9hilss2ixIUh0FemvfGRfsGVeV5UBVPBKK7Ffhvfqc7Rciob9Spzw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-group@4.15.3:
+ resolution: {integrity: sha512-HSu/rKnGZVKFq3ciT46vi1EOy+9mkB0HewO4+P6dP/Y0UerWkN6S3UK11Cxsj0cAp0vFwkPDCdOeEzRdpFEkzA==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head-attributes@4.15.3:
+ resolution: {integrity: sha512-2ISo0r5ZKwkrvJgDou9xVPxxtXMaETe2AsAA02L89LnbB2KC0N5myNsHV0sEysTw9+CfCmgjAb0GAI5QGpxKkQ==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head-breakpoint@4.15.3:
+ resolution: {integrity: sha512-Eo56FA5C2v6ucmWQL/JBJ2z641pLOom4k0wP6CMZI2utfyiJ+e2Uuinj1KTrgDcEvW4EtU9HrfAqLK9UosLZlg==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head-font@4.15.3:
+ resolution: {integrity: sha512-CzV2aDPpiNIIgGPHNcBhgyedKY4SX3BJoTwOobSwZVIlEA6TAWB4Z9WwFUmQqZOgo1AkkiTHPZQvGcEhFFXH6g==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head-html-attributes@4.15.3:
+ resolution: {integrity: sha512-MDNDPMBOgXUZYdxhosyrA2kudiGO8aogT0/cODyi2Ed9o/1S7W+je11JUYskQbncqhWKGxNyaP4VWa+6+vUC/g==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head-preview@4.15.3:
+ resolution: {integrity: sha512-J2PxCefUVeFwsAExhrKo4lwxDevc5aKj888HBl/wN4EuWOoOg06iOGCxz4Omd8dqyFsrqvbBuPqRzQ+VycGmaA==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head-style@4.15.3:
+ resolution: {integrity: sha512-9J+JuH+mKrQU65CaJ4KZegACUgNIlYmWQYx3VOBR/tyz+8kDYX7xBhKJCjQ1I4wj2Tvga3bykd89Oc2kFZ5WOw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head-title@4.15.3:
+ resolution: {integrity: sha512-IM59xRtsxID4DubQ0iLmoCGXguEe+9BFG4z6y2xQDrscIa4QY3KlfqgKGT69ojW+AVbXXJPEVqrAi4/eCsLItQ==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-head@4.15.3:
+ resolution: {integrity: sha512-o3mRuuP/MB5fZycjD3KH/uXsnaPl7Oo8GtdbJTKtH1+O/3pz8GzGMkscTKa97l03DAG2EhGrzzLcU2A6eshwFw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-hero@4.15.3:
+ resolution: {integrity: sha512-9cLAPuc69yiuzNrMZIN58j+HMK1UWPaq2i3/Fg2ZpimfcGFKRcPGCbEVh0v+Pb6/J0+kf8yIO0leH20opu3AyQ==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-image@4.15.3:
+ resolution: {integrity: sha512-g1OhSdofIytE9qaOGdTPmRIp7JsCtgO0zbsn1Fk6wQh2gEL55Z40j/VoghslWAWTgT2OHFdBKnMvWtN6U5+d2Q==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-migrate@4.15.3:
+ resolution: {integrity: sha512-sr/+35RdxZroNQVegjpfRHJ5hda9XCgaS4mK2FGO+Mb1IUevKfeEPII3F/cHDpNwFeYH3kAgyqQ22ClhGLWNBA==}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ js-beautify: 1.15.1
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ mjml-parser-xml: 4.15.3
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-navbar@4.15.3:
+ resolution: {integrity: sha512-VsKH/Jdlf8Yu3y7GpzQV5n7JMdpqvZvTSpF6UQXL0PWOm7k6+LX+sCZimOfpHJ+wCaaybpxokjWZ71mxOoCWoA==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-parser-xml@4.15.3:
+ resolution: {integrity: sha512-Tz0UX8/JVYICLjT+U8J1f/TFxIYVYjzZHeh4/Oyta0pLpRLeZlxEd71f3u3kdnulCKMP4i37pFRDmyLXAlEuLw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ detect-node: 2.1.0
+ htmlparser2: 9.1.0
+ lodash: 4.17.21
+ dev: true
+ optional: true
+
+ /mjml-preset-core@4.15.3:
+ resolution: {integrity: sha512-1zZS8P4O0KweWUqNS655+oNnVMPQ1Rq1GaZq5S9JfwT1Vh/m516lSmiTW9oko6gGHytt5s6Yj6oOeu5Zm8FoLw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ mjml-accordion: 4.15.3
+ mjml-body: 4.15.3
+ mjml-button: 4.15.3
+ mjml-carousel: 4.15.3
+ mjml-column: 4.15.3
+ mjml-divider: 4.15.3
+ mjml-group: 4.15.3
+ mjml-head: 4.15.3
+ mjml-head-attributes: 4.15.3
+ mjml-head-breakpoint: 4.15.3
+ mjml-head-font: 4.15.3
+ mjml-head-html-attributes: 4.15.3
+ mjml-head-preview: 4.15.3
+ mjml-head-style: 4.15.3
+ mjml-head-title: 4.15.3
+ mjml-hero: 4.15.3
+ mjml-image: 4.15.3
+ mjml-navbar: 4.15.3
+ mjml-raw: 4.15.3
+ mjml-section: 4.15.3
+ mjml-social: 4.15.3
+ mjml-spacer: 4.15.3
+ mjml-table: 4.15.3
+ mjml-text: 4.15.3
+ mjml-wrapper: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-raw@4.15.3:
+ resolution: {integrity: sha512-IGyHheOYyRchBLiAEgw3UM11kFNmBSMupu2BDdejC6ZiDhEAdG+tyERlsCwDPYtXanvFpGWULIu3XlsUPc+RZw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-section@4.15.3:
+ resolution: {integrity: sha512-JfVPRXH++Hd933gmQfG8JXXCBCR6fIzC3DwiYycvanL/aW1cEQ2EnebUfQkt5QzlYjOkJEH+JpccAsq3ln6FZQ==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-social@4.15.3:
+ resolution: {integrity: sha512-7sD5FXrESOxpT9Z4Oh36bS6u/geuUrMP1aCg2sjyAwbPcF1aWa2k9OcatQfpRf6pJEhUZ18y6/WBBXmMVmSzXg==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-spacer@4.15.3:
+ resolution: {integrity: sha512-3B7Qj+17EgDdAtZ3NAdMyOwLTX1jfmJuY7gjyhS2HtcZAmppW+cxqHUBwCKfvSRgTQiccmEvtNxaQK+tfyrZqA==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-table@4.15.3:
+ resolution: {integrity: sha512-FLx7DcRKTdKdcOCbMyBaeudeHaHpwPveRrBm6WyQe3LXx6FfdmOh59i71/16LFQMgBOD3N4/UJkzxLzlTJzMqQ==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-text@4.15.3:
+ resolution: {integrity: sha512-+C0hxCmw9kg0XzT6vhE5mFkK6y225nC8UEQcN94K0fBCjPKkM+HqZMwGX205fzdGRi+Bxa55b/VhrIVwdv+8vw==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml-validator@4.15.3:
+ resolution: {integrity: sha512-Xb72KdqRwjv/qM2rJpV22syyP2N3cRQ9VVDrN6u2FSzLq02buFNxmSPJ7CKhat3PrUNdVHU75KZwOf/tz4UEhA==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ dev: true
+ optional: true
+
+ /mjml-wrapper@4.15.3:
+ resolution: {integrity: sha512-ditsCijeHJrmBmObtJmQ18ddLxv5oPyMTdPU8Di8APOnD2zPk7Z4UAuJSl7HXB45oFiivr3MJf4koFzMUSZ6Gg==}
+ requiresBuild: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ lodash: 4.17.21
+ mjml-core: 4.15.3
+ mjml-section: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
+ /mjml@4.15.3:
+ resolution: {integrity: sha512-bW2WpJxm6HS+S3Yu6tq1DUPFoTxU9sPviUSmnL7Ua+oVO3WA5ILFWqvujUlz+oeuM+HCwEyMiP5xvKNPENVjYA==}
+ hasBin: true
+ dependencies:
+ '@babel/runtime': 7.24.4
+ mjml-cli: 4.15.3
+ mjml-core: 4.15.3
+ mjml-migrate: 4.15.3
+ mjml-preset-core: 4.15.3
+ mjml-validator: 4.15.3
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
/mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
@@ -11636,6 +12927,20 @@ packages:
- babel-plugin-macros
dev: false
+ /nice-try@1.0.5:
+ resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /no-case@2.3.2:
+ resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
+ requiresBuild: true
+ dependencies:
+ lower-case: 1.1.4
+ dev: true
+ optional: true
+
/node-abi@3.65.0:
resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==}
engines: {node: '>=10'}
@@ -11719,6 +13024,16 @@ packages:
abbrev: 1.1.1
dev: false
+ /nopt@7.2.1:
+ resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ abbrev: 2.0.0
+ dev: true
+ optional: true
+
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
@@ -11742,6 +13057,15 @@ packages:
engines: {node: '>=14.16'}
dev: false
+ /npm-run-path@2.0.2:
+ resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
+ engines: {node: '>=4'}
+ requiresBuild: true
+ dependencies:
+ path-key: 2.0.1
+ dev: true
+ optional: true
+
/npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
@@ -11764,6 +13088,14 @@ packages:
set-blocking: 2.0.0
dev: false
+ /nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ requiresBuild: true
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+ optional: true
+
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -11862,6 +13194,16 @@ packages:
dependencies:
mimic-fn: 4.0.0
+ /open@7.4.2:
+ resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+ dev: true
+ optional: true
+
/openai@4.38.5:
resolution: {integrity: sha512-Ym5GJL98ZhLJJ7enBx53jjG3vwN/fsB+Ozh46nnRZZS9W1NiYqbwkJ+sXd3dkCIiWIgcyyOPL2Zr8SQAzbpj3g==}
hasBin: true
@@ -11964,6 +13306,15 @@ packages:
engines: {node: '>=12.20'}
dev: false
+ /p-event@4.2.0:
+ resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ p-timeout: 3.2.0
+ dev: true
+ optional: true
+
/p-filter@2.1.0:
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
engines: {node: '>=8'}
@@ -11971,6 +13322,13 @@ packages:
p-map: 2.1.0
dev: false
+ /p-finally@1.0.0:
+ resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
+ engines: {node: '>=4'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
@@ -12000,10 +13358,28 @@ packages:
engines: {node: '>=6'}
dev: false
+ /p-timeout@3.2.0:
+ resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ p-finally: 1.0.0
+ dev: true
+ optional: true
+
/p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
+ /p-wait-for@3.2.0:
+ resolution: {integrity: sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==}
+ engines: {node: '>=8'}
+ requiresBuild: true
+ dependencies:
+ p-timeout: 3.2.0
+ dev: true
+ optional: true
+
/pac-proxy-agent@7.0.1:
resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==}
engines: {node: '>= 14'}
@@ -12038,6 +13414,14 @@ packages:
semver: 7.6.0
dev: false
+ /param-case@2.1.1:
+ resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
+ requiresBuild: true
+ dependencies:
+ no-case: 2.3.2
+ dev: true
+ optional: true
+
/parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
@@ -12054,6 +13438,32 @@ packages:
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
+ /parse5-htmlparser2-tree-adapter@7.0.0:
+ resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
+ requiresBuild: true
+ dependencies:
+ domhandler: 5.0.3
+ parse5: 7.1.2
+ dev: true
+ optional: true
+
+ /parse5@7.1.2:
+ resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ requiresBuild: true
+ dependencies:
+ entities: 4.5.0
+ dev: true
+ optional: true
+
+ /parseley@0.12.1:
+ resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==}
+ requiresBuild: true
+ dependencies:
+ leac: 0.6.0
+ peberminta: 0.9.0
+ dev: true
+ optional: true
+
/parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
@@ -12106,6 +13516,13 @@ packages:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
+ /path-key@2.0.1:
+ resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
+ engines: {node: '>=4'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -12144,6 +13561,12 @@ packages:
resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==}
dev: false
+ /peberminta@0.9.0:
+ resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
@@ -12444,6 +13867,24 @@ packages:
react-is: 18.2.0
dev: true
+ /preview-email@3.0.20:
+ resolution: {integrity: sha512-QbAokW2F3p0thQfp2WTZ0rBy+IZuCnf9gIUCLffr+8hq85esq6pzCA7S0eUdD6oTmtKROqoNeH2rXZWrRow7EA==}
+ engines: {node: '>=14'}
+ dependencies:
+ ci-info: 3.9.0
+ display-notification: 2.0.0
+ fixpack: 4.0.0
+ get-port: 5.1.1
+ mailparser: 3.7.1
+ nodemailer: 6.9.14
+ open: 7.4.2
+ p-event: 4.2.0
+ p-wait-for: 3.2.0
+ pug: 3.0.3
+ uuid: 9.0.1
+ dev: true
+ optional: true
+
/prisma@5.12.1:
resolution: {integrity: sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q==}
engines: {node: '>=16.13'}
@@ -12464,6 +13905,14 @@ packages:
engines: {node: '>= 0.6.0'}
dev: false
+ /promise@7.3.1:
+ resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
+ requiresBuild: true
+ dependencies:
+ asap: 2.0.6
+ dev: true
+ optional: true
+
/prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
@@ -12481,7 +13930,7 @@ packages:
/proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
- dev: false
+ requiresBuild: true
/proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
@@ -12521,6 +13970,120 @@ packages:
/pseudomap@1.0.2:
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
+ /pug-attrs@3.0.0:
+ resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==}
+ requiresBuild: true
+ dependencies:
+ constantinople: 4.0.1
+ js-stringify: 1.0.2
+ pug-runtime: 3.0.1
+ dev: true
+ optional: true
+
+ /pug-code-gen@3.0.3:
+ resolution: {integrity: sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==}
+ requiresBuild: true
+ dependencies:
+ constantinople: 4.0.1
+ doctypes: 1.1.0
+ js-stringify: 1.0.2
+ pug-attrs: 3.0.0
+ pug-error: 2.1.0
+ pug-runtime: 3.0.1
+ void-elements: 3.1.0
+ with: 7.0.2
+ dev: true
+ optional: true
+
+ /pug-error@2.1.0:
+ resolution: {integrity: sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /pug-filters@4.0.0:
+ resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==}
+ requiresBuild: true
+ dependencies:
+ constantinople: 4.0.1
+ jstransformer: 1.0.0
+ pug-error: 2.1.0
+ pug-walk: 2.0.0
+ resolve: 1.22.8
+ dev: true
+ optional: true
+
+ /pug-lexer@5.0.1:
+ resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==}
+ requiresBuild: true
+ dependencies:
+ character-parser: 2.2.0
+ is-expression: 4.0.0
+ pug-error: 2.1.0
+ dev: true
+ optional: true
+
+ /pug-linker@4.0.0:
+ resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==}
+ requiresBuild: true
+ dependencies:
+ pug-error: 2.1.0
+ pug-walk: 2.0.0
+ dev: true
+ optional: true
+
+ /pug-load@3.0.0:
+ resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==}
+ requiresBuild: true
+ dependencies:
+ object-assign: 4.1.1
+ pug-walk: 2.0.0
+ dev: true
+ optional: true
+
+ /pug-parser@6.0.0:
+ resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==}
+ requiresBuild: true
+ dependencies:
+ pug-error: 2.1.0
+ token-stream: 1.0.0
+ dev: true
+ optional: true
+
+ /pug-runtime@3.0.1:
+ resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /pug-strip-comments@2.0.0:
+ resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==}
+ requiresBuild: true
+ dependencies:
+ pug-error: 2.1.0
+ dev: true
+ optional: true
+
+ /pug-walk@2.0.0:
+ resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /pug@3.0.3:
+ resolution: {integrity: sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==}
+ dependencies:
+ pug-code-gen: 3.0.3
+ pug-filters: 4.0.0
+ pug-lexer: 5.0.1
+ pug-linker: 4.0.0
+ pug-load: 3.0.0
+ pug-parser: 6.0.0
+ pug-runtime: 3.0.1
+ pug-strip-comments: 2.0.0
+ dev: true
+ optional: true
+
/pump@3.0.0:
resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
dependencies:
@@ -12528,6 +14091,13 @@ packages:
once: 1.4.0
dev: false
+ /punycode.js@2.3.1:
+ resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
+ engines: {node: '>=6'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -13120,7 +14690,6 @@ packages:
ini: 1.3.8
minimist: 1.2.8
strip-json-comments: 2.0.1
- dev: false
/react-confetti-boom@1.0.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-JPCs1tx36xduFdMORaRLLvFJABAQUgjEqKvqZiBZr8bUkHsCzbHeesnfQwZU1LExmGiYVFGIJS/tiR4OUTktww==}
@@ -13483,6 +15052,13 @@ packages:
rc: 1.2.8
dev: false
+ /relateurl@0.2.7:
+ resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
+ engines: {node: '>= 0.10'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/repeat-string@1.6.1:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'}
@@ -13637,6 +15213,15 @@ packages:
fsevents: 2.3.3
dev: true
+ /run-applescript@3.2.0:
+ resolution: {integrity: sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==}
+ engines: {node: '>=4'}
+ requiresBuild: true
+ dependencies:
+ execa: 0.10.0
+ dev: true
+ optional: true
+
/run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
@@ -13710,6 +15295,14 @@ packages:
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
dev: false
+ /selderee@0.11.0:
+ resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
+ requiresBuild: true
+ dependencies:
+ parseley: 0.12.1
+ dev: true
+ optional: true
+
/semver-diff@4.0.0:
resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==}
engines: {node: '>=12'}
@@ -13776,6 +15369,7 @@ packages:
/set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
+ requiresBuild: true
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
@@ -13845,6 +15439,7 @@ packages:
/shebang-regex@1.0.0:
resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
engines: {node: '>=0.10.0'}
+ requiresBuild: true
/shebang-regex@3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
@@ -13910,6 +15505,12 @@ packages:
is-fullwidth-code-point: 5.0.0
dev: true
+ /slick@1.12.2:
+ resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -14213,6 +15814,13 @@ packages:
engines: {node: '>=8'}
dev: true
+ /strip-eof@1.0.0:
+ resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
@@ -14232,7 +15840,7 @@ packages:
/strip-json-comments@2.0.1:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
- dev: false
+ requiresBuild: true
/strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
@@ -14523,7 +16131,7 @@ packages:
hasBin: true
dependencies:
'@jridgewell/source-map': 0.3.6
- acorn: 8.11.3
+ acorn: 8.12.1
commander: 2.20.3
source-map-support: 0.5.21
dev: true
@@ -14571,6 +16179,13 @@ packages:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
dev: false
+ /tlds@1.252.0:
+ resolution: {integrity: sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
/tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -14599,8 +16214,15 @@ packages:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
+ /token-stream@1.0.0:
+ resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ requiresBuild: true
/tr46@1.0.1:
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
@@ -15050,6 +16672,20 @@ packages:
hasBin: true
dev: true
+ /uc.micro@2.1.0:
+ resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /uglify-js@3.19.1:
+ resolution: {integrity: sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
/uid@2.0.2:
resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==}
engines: {node: '>=8'}
@@ -15138,6 +16774,12 @@ packages:
xdg-basedir: 5.1.0
dev: false
+ /upper-case@1.1.3:
+ resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
@@ -15197,7 +16839,6 @@ packages:
/uuid@9.0.1:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
hasBin: true
- dev: false
/v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -15212,6 +16853,13 @@ packages:
convert-source-map: 2.0.0
dev: true
+ /valid-data-url@3.0.1:
+ resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==}
+ engines: {node: '>=10'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
dependencies:
@@ -15289,6 +16937,13 @@ packages:
fsevents: 2.3.3
dev: true
+ /void-elements@3.1.0:
+ resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
dependencies:
@@ -15308,6 +16963,22 @@ packages:
dependencies:
defaults: 1.0.4
+ /web-resource-inliner@6.0.1:
+ resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==}
+ engines: {node: '>=10.0.0'}
+ requiresBuild: true
+ dependencies:
+ ansi-colors: 4.1.3
+ escape-goat: 3.0.0
+ htmlparser2: 5.0.1
+ mime: 2.6.0
+ node-fetch: 2.7.0
+ valid-data-url: 3.0.1
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+ optional: true
+
/web-streams-polyfill@3.3.3:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
@@ -15320,6 +16991,7 @@ packages:
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ requiresBuild: true
/webidl-conversions@4.0.2:
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
@@ -15350,8 +17022,8 @@ packages:
'@webassemblyjs/ast': 1.12.1
'@webassemblyjs/wasm-edit': 1.12.1
'@webassemblyjs/wasm-parser': 1.12.1
- acorn: 8.11.3
- acorn-import-assertions: 1.9.0(acorn@8.11.3)
+ acorn: 8.12.1
+ acorn-import-assertions: 1.9.0(acorn@8.12.1)
browserslist: 4.23.0
chrome-trace-event: 1.0.3
enhanced-resolve: 5.16.0
@@ -15417,6 +17089,7 @@ packages:
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ requiresBuild: true
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
@@ -15518,6 +17191,18 @@ packages:
string-width: 5.1.2
dev: false
+ /with@7.0.2:
+ resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}
+ engines: {node: '>= 10.0.0'}
+ requiresBuild: true
+ dependencies:
+ '@babel/parser': 7.24.8
+ '@babel/types': 7.24.9
+ assert-never: 1.3.0
+ babel-walk: 3.0.0-canary-5
+ dev: true
+ optional: true
+
/wmf@1.0.2:
resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==}
engines: {node: '>=0.8'}
@@ -15528,6 +17213,12 @@ packages:
engines: {node: '>=0.8'}
dev: false
+ /wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}