diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..f2b4a36 --- /dev/null +++ b/.env.sample @@ -0,0 +1,26 @@ +# Schema Service +SCHEMA_BASE_URL=https://example.com/schema-service + +# Credential Service +CREDENTIAL_BASE_URL=https://example.com/credential-service +C4GT_DID=did:example:123456789abcdefghi +DEFAULT_CERTIFICATE_LIFETIME=31536000 + +# Identity Service +IDENTITY_BASE_URL=url + +# Certificates Verification +VERIFICATION_BASE_URL=https://example.com/verification-service + +# MinIO Configuration +MINIO_USERNAME=your-minio-username +MINIO_PASSWORD=your-minio-password +MINIO_BUCKETNAME=your-bucket-name +MINIO_PORT=9000 +MINIO_ENDPOINT=minioadminpassword +MINIO_SECRET_KEY=your-minio-secret-key +MINIO_ACCESS_KEY=minioadmin +MINIO_USE_SSL=true + +# DB Config +C4GT_BFF_POSTGRES_BASE_URL=postgresql://postgres:password@localhost:5432/c4gtbff?schema=public \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 8f5aedb..096eef4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,10 +2,10 @@ module.exports = { parser: '@typescript-eslint/parser', parserOptions: { project: 'tsconfig.json', - tsconfigRootDir : __dirname, + tsconfigRootDir: __dirname, sourceType: 'module', }, - plugins: ['@typescript-eslint/eslint-plugin'], + plugins: ['@typescript-eslint/eslint-plugin', 'prettier'], extends: [ 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', @@ -21,5 +21,14 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 'off', + 'prettier/prettier': [ + 'error', + { + singleQuote: true, + trailingComma: 'all', + printWidth: 80, + arrowParens: 'always', + }, + ], }, }; diff --git a/.gitignore b/.gitignore index 48dc1cf..e4ad995 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +# data +*.csv # compiled output /dist /node_modules diff --git a/.prettierrc b/.prettierrc index dcb7279..9db28a2 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { "singleQuote": true, - "trailingComma": "all" -} \ No newline at end of file + "trailingComma": "all", + "printWidth": 120 +} diff --git a/Dockerfile b/Dockerfile index 0bbcd3b..1d35b38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,39 @@ -FROM node:16 -# FROM --platform=linux/amd64 node:18-slim +# Stage 1: Build +FROM --platform=linux/amd64 node:18 AS builder +WORKDIR /app + +# Install dependencies and build the application +COPY package.json ./ +COPY yarn.lock ./ +COPY prisma ./prisma/ + +RUN yarn +COPY . . +RUN yarn run build + +# Stage 2: Runtime +FROM --platform=linux/amd64 node:18 AS runtime + +WORKDIR /app + +# Install required runtime dependencies RUN apt-get update \ && apt-get install -y wget gnupg \ && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ && apt-get update \ - && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \ + && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 ghostscript \ --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* \ - && apt-get install ghostscript=10.02.0 + && rm -rf /var/lib/apt/lists/* + +# Copy necessary files from the builder stage +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./ +COPY --from=builder /app/yarn.lock ./ +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/prisma ./prisma +COPY --from=builder /app/tsconfig.json ./ -WORKDIR /app -COPY . ./ -RUN yarn EXPOSE 3001 -CMD ["yarn", "start"] \ No newline at end of file +CMD ["yarn", "start:prod"] diff --git a/badge-certificate.html b/badge-certificate.html deleted file mode 100644 index 84dc715..0000000 --- a/badge-certificate.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - -
-
-
-
- Badge -
-

- CERTIFICATE OF ACHIEVEMENT -

-

This is to certify that

-
- -
-

- - @{{username}} -

-
-

- has been awarded the {{badge}} for their active contribution to - Digital Public -

-
-

- Goods as part of the C4GT Community -

-
-
-
- - QR Code -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/data/sample.csv b/data/sample.csv deleted file mode 100644 index 2caee92..0000000 --- a/data/sample.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,name,email -1,yash,yash.wfc2022@samagragovernance.in -2,John Doe,yami8b@gmail.com -3,shruti,shruti@samagragovernance.in \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index ef28d61..9915221 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,60 @@ -version: '3' +version: '3.8' + services: c4gt-bff: - image: c4gt-bff - build: https://github.com/techsavvyash/c4gt-bff.git - env_file: .env - restart: always + build: + context: . + dockerfile: Dockerfile + container_name: c4gt-bff ports: - - '${SERVICE_PUBLIC_PORT}:3001' \ No newline at end of file + - "3001:3001" + environment: + SCHEMA_BASE_URL: https://example.com/schema-service + CREDENTIAL_BASE_URL: https://example.com/credential-service + C4GT_DID: did:example:123456789abcdefghi + DEFAULT_CERTIFICATE_LIFETIME: 31536000 + IDENTITY_BASE_URL: url + VERIFICATION_BASE_URL: https://example.com/verification-service + MINIO_USERNAME: your-minio-username + MINIO_PASSWORD: your-minio-password + MINIO_BUCKETNAME: your-bucket-name + MINIO_PORT: 9000 + MINIO_ENDPOINT: minioadminpassword + MINIO_SECRET_KEY: your-minio-secret-key + MINIO_ACCESS_KEY: minioadmin + MINIO_USE_SSL: "true" + C4GT_BFF_POSTGRES_BASE_URL: postgres://postgres:postgres@postgres:5432/c4gt-bff + depends_on: + - postgres + - minio + + postgres: + image: postgres:14 + container_name: postgres + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: c4gt-bff + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + + minio: + image: minio/minio:latest + container_name: minio + environment: + MINIO_ROOT_USER: minioadmin + MINIO_ROOT_PASSWORD: minioadminpassword + ports: + - "9000:9000" # MinIO web access + - "9001:9001" # MinIO console access + command: server /data --console-address ":9001" + volumes: + - minio_data:/data + +volumes: + postgres_data: + driver: local + minio_data: + driver: local diff --git a/htmls/1_yash.pdf.html b/htmls/1_yash.pdf.html deleted file mode 100644 index 095fbd9..0000000 --- a/htmls/1_yash.pdf.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- yash -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/htmls/2_john.pdf.html b/htmls/2_john.pdf.html deleted file mode 100644 index 5e780ba..0000000 --- a/htmls/2_john.pdf.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- john -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/htmls/3_shruti.pdf.html b/htmls/3_shruti.pdf.html deleted file mode 100644 index 8369d7b..0000000 --- a/htmls/3_shruti.pdf.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- shruti -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/package.json b/package.json index a5a2b77..28fdc3c 100644 --- a/package.json +++ b/package.json @@ -27,29 +27,27 @@ "@nestjs/config": "^3.0.0", "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", + "@nestjs/swagger": "^8.0.7", + "@prisma/client": "5.22.0", "@types/handlebars": "^4.1.0", "@types/minio": "^7.1.1", "@types/nodemailer": "^6.4.8", "axios": "^1.4.0", + "barhandles": "^0.5.4", "base64topdf": "^1.1.8", - "csvtojson": "^2.0.10", "fs-extra": "^11.1.1", - "googleapis": "^118.0.0", "handlebars": "^4.7.7", "jsonwebtoken": "^9.0.0", "mime-type": "^4.0.0", "minio": "^7.1.1", "nestjs-minio-client": "^2.0.0", "nodemailer": "^6.9.3", - "oci-sdk": "^2.62.3", - "p-limit": "3.0.0", + "prisma": "^5.22.0", "puppeteer": "^20.7.3", "qrcode": "^1.5.3", - "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0", - "util": "^0.12.5", - "wkhtmltopdf": "^0.4.0" + "util": "^0.12.5" }, "devDependencies": { "@nestjs/cli": "^9.0.0", diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..c4f5523 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,33 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("C4GT_BFF_POSTGRES_BASE_URL") +} + +model Schema { + id String @id @default(uuid()) + name String + description String + tags String[] @default([]) // Array of strings +} + +model Template { + id String @id @default(uuid()) + name String + description String + type String + verificationTemplate Template? @relation("TemplateToVerification", fields: [verificationTemplateId], references: [id]) + verificationTemplateId String? // Foreign key for the self-relation + referencedBy Template[] @relation("TemplateToVerification") +} + + diff --git a/src/app.module.ts b/src/app.module.ts index 1e5b40f..0df98b5 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,45 +3,28 @@ import { AppController } from './app.controller'; import { AppService } from './app.service'; import { RcwModule } from './rcw/rcw.module'; import { ConfigModule } from '@nestjs/config'; -import { MailerModule } from '@nestjs-modules/mailer'; -import { MailingModule } from './mailing/mailing.module'; -import { MinioModule } from './minio/minio.module'; -import { InaugurationService } from './inauguration/inauguration.service'; -import { InaugurationModule } from './inauguration/inauguration.module'; import { HttpModule } from '@nestjs/axios'; +import { SchemaController } from './schema/schema.controller'; +import { SchemaModule } from './schema/schema.module'; +import { TemplateModule } from './template/template.module'; +import { CertificateModule } from './certificate/certificate.module'; +import { PrismaModule } from 'src/prisma/prisma.module'; +import configuration from './config/configuration'; @Module({ imports: [ - MailerModule.forRoot({ - transport: `smtps://${process.env.EMAIL_ID}:${process.env.EMAIL_PASS}@smtp.${process.env.DOMAIN}.com`, - //{ - // host: 'smtp.gmail.com', - // port: 465, - // secure: true, - // auth: { - // type: 'OAuth2', - // user: process.env.EMAIL_ID, - // clientId: process.env.CLIENT_ID, - // clientSecret: process.env.CLIENT_SECRET, - // refreshToken: process.env.REFRESH_TOKEN, - // accessToken: process.env.ACCESS_TOKEN, - // }, - // }, // `smtps://${process.env.EMAIL_ID}:${process.env.EMAIL_PASS}@smtp.${process.env.DOMAIN}.com`, - defaults: { - from: `"${process.env.MAILING_NAME}" <${process.env.EMAIL_ID}>`, - }, - preview: true, - }), RcwModule, ConfigModule.forRoot({ + load: [configuration], isGlobal: true, }), - MailingModule, - MinioModule, - InaugurationModule, HttpModule, + SchemaModule, + TemplateModule, + CertificateModule, + PrismaModule, ], - controllers: [AppController], - providers: [AppService, InaugurationService], + controllers: [AppController, SchemaController], + providers: [AppService], }) export class AppModule {} diff --git a/src/auth/auth.interceptor.ts b/src/auth/auth.interceptor.ts new file mode 100644 index 0000000..712b649 --- /dev/null +++ b/src/auth/auth.interceptor.ts @@ -0,0 +1,25 @@ +import { Injectable, NestInterceptor, ExecutionContext, CallHandler, UnauthorizedException } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { Observable } from 'rxjs'; + +interface AuthConfig { + adminToken: string; +} + +@Injectable() +export class AdminTokenInterceptor implements NestInterceptor { + private config; + constructor(private readonly configService: ConfigService) { + this.config = this.configService.get('auth'); + } + intercept(context: ExecutionContext, next: CallHandler): Observable { + const request = context.switchToHttp().getRequest(); + const adminTokenHeader = request.headers['x-admin-token']; + + if (!adminTokenHeader || adminTokenHeader !== this.config.adminToken) { + throw new UnauthorizedException('Invalid admin token'); + } + + return next.handle(); + } +} diff --git a/src/certificate/certificate.controller.spec.ts b/src/certificate/certificate.controller.spec.ts new file mode 100644 index 0000000..4644971 --- /dev/null +++ b/src/certificate/certificate.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CertificateController } from './certificate.controller'; + +describe('CertificateController', () => { + let controller: CertificateController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CertificateController], + }).compile(); + + controller = module.get(CertificateController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/certificate/certificate.controller.ts b/src/certificate/certificate.controller.ts new file mode 100644 index 0000000..fa48263 --- /dev/null +++ b/src/certificate/certificate.controller.ts @@ -0,0 +1,21 @@ +import { Controller, Get, Post, Patch, Delete, Param, Query } from '@nestjs/common'; +import { CreateCertificateDTO } from './certificate.dto'; +import { CertificateService } from './certificate.service'; + +@Controller('certificate') +export class CertificateController { + constructor(private readonly certificateService: CertificateService) {} + + @Get(':id?') + getCertificates( + @Param('id') id?: string, + @Query('templateId') templateId?: string, + @Query('schemaId') schemaId?: string, + ) {} + + @Post('preview') + async renderCertificatePreview(createCertificatePayload: CreateCertificateDTO) { + createCertificatePayload.saveToMinio = false; + return await this.certificateService.renderCertificate(createCertificatePayload); + } +} diff --git a/src/certificate/certificate.dto.ts b/src/certificate/certificate.dto.ts new file mode 100644 index 0000000..10788f6 --- /dev/null +++ b/src/certificate/certificate.dto.ts @@ -0,0 +1,20 @@ +import { PDFOptions, PuppeteerLaunchOptions } from 'puppeteer'; + +class CredentialMetaData{ + id: string; + type: Array; + //2123-01-01T00:00:00Z + expirationDate: string; + tags: Array; +} + +export class CreateCertificateDTO{ + templateId?: string; + schemaId?:string; + handlebarTemplate?: string; + candidateData: object; + credentialMetadata: CredentialMetaData; + saveToMinio?: boolean; + puppeteerLaunchOption?: PuppeteerLaunchOptions; + pdfRenderingOptions?: PDFOptions +} \ No newline at end of file diff --git a/src/certificate/certificate.module.ts b/src/certificate/certificate.module.ts new file mode 100644 index 0000000..d622acf --- /dev/null +++ b/src/certificate/certificate.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { CertificateService } from './certificate.service'; +import { CertificateController } from './certificate.controller'; +import { PDFRendererService } from './pdf-renderer/pdf-renderer.service'; +import { MinioClient } from './minio-client/minio-client.service'; +import { TemplateModule } from 'src/template/template.module'; +import { HttpModule } from '@nestjs/axios'; + +@Module({ + imports: [TemplateModule, HttpModule], + providers: [CertificateService, PDFRendererService, MinioClient], + controllers: [CertificateController], +}) +export class CertificateModule {} diff --git a/src/inauguration/inauguration.service.spec.ts b/src/certificate/certificate.service.spec.ts similarity index 50% rename from src/inauguration/inauguration.service.spec.ts rename to src/certificate/certificate.service.spec.ts index 512d24a..7c4ca1a 100644 --- a/src/inauguration/inauguration.service.spec.ts +++ b/src/certificate/certificate.service.spec.ts @@ -1,15 +1,15 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { InaugurationService } from './inauguration.service'; +import { CertificateService } from './certificate.service'; -describe('InaugurationService', () => { - let service: InaugurationService; +describe('CertificateService', () => { + let service: CertificateService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [InaugurationService], + providers: [CertificateService], }).compile(); - service = module.get(InaugurationService); + service = module.get(CertificateService); }); it('should be defined', () => { diff --git a/src/certificate/certificate.service.ts b/src/certificate/certificate.service.ts new file mode 100644 index 0000000..40342ac --- /dev/null +++ b/src/certificate/certificate.service.ts @@ -0,0 +1,95 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import QRCode from 'qrcode'; +import { TemplateService } from 'src/template/template.service'; +import { PDFRendererService } from './pdf-renderer/pdf-renderer.service'; +import { MinioClient } from './minio-client/minio-client.service'; +import { HttpService } from '@nestjs/axios'; +import { CreateCertificateDTO } from './certificate.dto'; + +interface CertificateConfig { + baseUrl: string; + defaultCredentialContext: Array; + defaultSigningId: string; + defaultCertificateLifetime: number; +} + +interface RCWCredentialServiceConfig { + baseUrl: string; +} + +@Injectable() +export class CertificateService { + private config; + private rcwCredentialingServiceConfig; + constructor( + private readonly configService: ConfigService, + private readonly templateService: TemplateService, + private readonly pdfService: PDFRendererService, + private readonly minioService: MinioClient, + private readonly httpService: HttpService, + ) { + this.config = this.configService.get('certificates'); + this.rcwCredentialingServiceConfig = this.configService.get('credentialService'); + } + private async renderVerificationUrlAsQR(credentialId: string) { + try { + const verificationURL = `${this.config.baseUrl}/rcw/verify/${credentialId}`; + console.log(verificationURL); + const QRData = await QRCode.toDataURL(verificationURL); + return QRData; + } catch (err) { + console.error(err); + return err; + } + } + + private getCertificateExpiry(expiry: string){ + let expirationDate; + if (expiry && !isNaN(new Date(expiry).getTime())) { + expirationDate = new Date(expiry).toISOString(); + } else { + expirationDate = new Date(Date.now() + this.config.defaultCertificateLifetime).toISOString(); + } + + return expirationDate; + } + + async renderCertificate(createCertificatePayload: CreateCertificateDTO): Promise { + // Create Credential + const createCredentialResponse = await this.httpService.axiosRef.post( + `${this.rcwCredentialingServiceConfig.baseUrl}/credentials/issue`, + { + credential: { + '@context': this.rcwCredentialingServiceConfig.defaultCredentialContext, + id: createCertificatePayload.credentialMetadata.id ?? 'C4GT', + type: createCertificatePayload.credentialMetadata.type, + issuer: this.rcwCredentialingServiceConfig.defaultSigningId, + issuanceDate: new Date().toISOString(), + expirationDate: this.getCertificateExpiry(createCertificatePayload.credentialMetadata.expirationDate), + credentialSubject: { + ...createCertificatePayload.candidateData, + }, + // options: { + // created: '2020-04-02T18:48:36Z', + // credentialStatus: { + // type: 'RevocationList2020Status', + // }, + // }, + }, + credentialSchemaId: createCertificatePayload.schemaId, + tags: createCertificatePayload.credentialMetadata.tags ?? [], + }, + ); + // Render Them As PDFs + const template = await this.templateService.getTemplateByTemplateId(createCertificatePayload.templateId); + const compiledTemplate = this.pdfService.compileRenderingTemplate(createCertificatePayload.candidateData, template); + const renderedPdf = await this.pdfService.renderPDF(compiledTemplate); + // Optionally Store in Minio + if (createCertificatePayload.saveToMinio) { + this.minioService.upload(createCredentialResponse.data.credential.id, renderedPdf); + //TODO: return minio link here + } + return renderedPdf; + } +} diff --git a/inaug/.gitkeep b/src/certificate/minio-client/minio-client.service.spec.ts similarity index 100% rename from inaug/.gitkeep rename to src/certificate/minio-client/minio-client.service.spec.ts diff --git a/src/certificate/minio-client/minio-client.service.ts b/src/certificate/minio-client/minio-client.service.ts new file mode 100644 index 0000000..1420b07 --- /dev/null +++ b/src/certificate/minio-client/minio-client.service.ts @@ -0,0 +1,83 @@ +import { Injectable, OnModuleInit } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import * as Minio from 'minio'; + +interface MinioConfig { + username: string; + password: string; + bucketName: string; + port: number; + endpoint: string; + secretKey: string; + accessKey: string; + useSSL: boolean; +} + +@Injectable() +export class MinioClient implements OnModuleInit { + private client: Minio.Client; + private bucketName: string; + + constructor(private readonly configService: ConfigService) { + const minioConfig = this.configService.get('minio'); + this.client = new Minio.Client({ + endPoint: minioConfig.endpoint, + port: minioConfig.port, + useSSL: minioConfig.useSSL, + accessKey: minioConfig.accessKey, + secretKey: minioConfig.secretKey, + }); + this.bucketName = minioConfig.bucketName; + } + + async onModuleInit(): Promise { + try { + const exists = await this.client.bucketExists(this.bucketName); + if (!exists) { + await this.client.makeBucket(this.bucketName); + console.log(`Bucket "${this.bucketName}" created.`); + } else { + console.log(`Bucket "${this.bucketName}" already exists.`); + } + } catch (error) { + console.error(`Failed to ensure minio bucket existence: ${error.message}`); + } + } + + async upload(objectName: string, buffer: Buffer): Promise { + try { + const etag = await this.client.putObject(this.bucketName, objectName, buffer); + console.log(`Uploaded object "${objectName}" with etag: ${etag}`); + return etag; + } catch (error) { + throw new Error(`Failed to upload object: ${error.message}`); + } + } + + async download(objectName: string): Promise { + try { + const chunks: Buffer[] = []; + const stream = await this.client.getObject(this.bucketName, objectName); + + return new Promise((resolve, reject) => { + stream.on('data', (chunk) => chunks.push(chunk)); + stream.on('end', () => { + console.log(`Downloaded object "${objectName}".`); + resolve(Buffer.concat(chunks)); + }); + stream.on('error', (err) => reject(new Error(`Failed to download object: ${err.message}`))); + }); + } catch (error) { + throw new Error(`Failed to download object: ${error.message}`); + } + } + + async delete(objectName: string): Promise { + try { + await this.client.removeObject(this.bucketName, objectName); + console.log(`Deleted object "${objectName}".`); + } catch (error) { + throw new Error(`Failed to delete object: ${error.message}`); + } + } +} diff --git a/pdfs/.gitkeep b/src/certificate/pdf-renderer/pdf-renderer.service.spec.ts similarity index 100% rename from pdfs/.gitkeep rename to src/certificate/pdf-renderer/pdf-renderer.service.spec.ts diff --git a/src/certificate/pdf-renderer/pdf-renderer.service.ts b/src/certificate/pdf-renderer/pdf-renderer.service.ts new file mode 100644 index 0000000..c8fe9a2 --- /dev/null +++ b/src/certificate/pdf-renderer/pdf-renderer.service.ts @@ -0,0 +1,79 @@ +import { Injectable } from '@nestjs/common'; +import { spawn } from 'child_process'; +import * as handlebars from 'handlebars'; +import puppeteer from 'puppeteer'; +import { PDFOptions, PuppeteerLaunchOptions } from 'puppeteer'; + +@Injectable() +export class PDFRendererService { + private async convertPDFtoPDFArchive(inputBuffer: Buffer): Promise { + return new Promise((resolve, reject) => { + const args = [ + '-dPDFA', + '-dBATCH', + '-dNOPAUSE', + '-sProcessColorModel=DeviceCMYK', + '-sDEVICE=pdfwrite', + '-sPDFACompatibilityPolicy=1', + '-sOutputFile=-', // Output to stdout + '-', // Input from stdin + ]; + + const gs = spawn('gs', args); + + const chunks: Buffer[] = []; + let errorOutput = ''; + + gs.stdout.on('data', (chunk) => chunks.push(chunk)); + gs.stderr.on('data', (chunk) => (errorOutput += chunk.toString())); + gs.on('close', (code) => { + if (code === 0) { + resolve(Buffer.concat(chunks)); + } else { + reject(new Error(`Ghostscript failed with code ${code}: ${errorOutput}`)); + } + }); + + gs.on('error', (error) => reject(error)); + + gs.stdin.write(inputBuffer); + gs.stdin.end(); + }); + } + + compileRenderingTemplate(data: object, templateHtml: any) { + const compiledTemplate = handlebars.compile(templateHtml); + return compiledTemplate(data); + } + + async renderPDF( + compiledTemplate: string, + pdfOptions: PDFOptions = { + height: 848 / 0.75, + width: 570 / 0.75, + scale: 1 / 0.75, + landscape: true, + displayHeaderFooter: false, + printBackground: true, + }, + launchOptions: PuppeteerLaunchOptions = { + args: ['--no-sandbox'], + headless: 'new', + defaultViewport: { + width: 1024, + height: 768, + }, + }, + customStyleTags?: string, + ): Promise { + const browser = await puppeteer.launch(launchOptions); + const page = await browser.newPage(); + await page.setContent(compiledTemplate, { waitUntil: 'networkidle0' }); + if (customStyleTags){ + await page.addStyleTag({ content: customStyleTags }); + } + const buffer = await page.pdf(pdfOptions); + await browser.close(); + return await this.convertPDFtoPDFArchive(buffer); + } +} diff --git a/src/config.ts b/src/config.ts deleted file mode 100644 index d61200e..0000000 --- a/src/config.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const config = { - MINIO_ENDPOINT: 'localhost', - MINIO_PORT: 9001, - MINIO_ACCESSKEY: 'AKIAIOSFODNN7EXAMPLE', - MINIO_SECRETKEY: 'wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY', - MINIO_BUCKET: 'c4gt', -}; diff --git a/src/config/configuration.ts b/src/config/configuration.ts new file mode 100644 index 0000000..a8bb754 --- /dev/null +++ b/src/config/configuration.ts @@ -0,0 +1,35 @@ +import { identity } from "rxjs"; + +export default () => ({ + schemaService: { + baseUrl: process.env.SCHEMA_BASE_URL, + }, + credentialService: { + baseUrl: process.env.CREDENTIAL_BASE_URL, + defaultCredentialContext: [ + 'https://www.w3.org/2018/credentials/v1', + 'https://www.w3.org/2018/credentials/examples/v1', + ], + defaultSigningId: process.env.C4GT_DID, + defaultCertificateLifetime: process.env.DEFAULT_CERTIFICATE_LIFETIME, + }, + identityService: { + baseUrl: process.env.IDENTITY_BASE_URL, + }, + certificates: { + baseUrl: process.env.VERIFICATION_BASE_URL, + }, + minio: { + username: process.env.MINIO_USERNAME, + password: process.env.MINIO_PASSWORD, + bucketName: process.env.MINIO_BUCKETNAME, + port: parseInt(process.env.MINIO_PORT, 10) || 9000, + endpoint: process.env.MINIO_ENDPOINT, + secretKey: process.env.MINIO_SECRET_KEY, + accessKey: process.env.MINIO_ACCESS_KEY, + useSSL: process.env.MINIO_USE_SSL == 'true', + }, + auth: { + adminToken: process.env.ADMIN_TOKEN + } +}); diff --git a/src/docs/ghostscript.md b/src/docs/ghostscript.md new file mode 100644 index 0000000..b3f840d --- /dev/null +++ b/src/docs/ghostscript.md @@ -0,0 +1,40 @@ +# Document: What is PDF/A and Why We’re Converting Certificates to PDF/A + +## What is PDF/A? + +PDF/A is an ISO-standardized version of the Portable Document Format (PDF) designed for long-term archiving and preservation of electronic documents. Unlike regular PDFs, which can include dynamic content or dependencies on external resources, PDF/A ensures that the document remains self-contained and consistent over time. + +### Key Features of PDF/A: +1. **Self-Containment:** + - All fonts used in the document must be embedded, ensuring consistent rendering across different devices and software. + - External resources such as links or embedded scripts are prohibited. + +2. **Device Independence:** + - Color spaces are defined explicitly, eliminating reliance on device-specific settings. + +### Why is PDF/A Important? + +PDF/A is particularly valuable for scenarios that require document consistency and reliability, such as: +- Legal documents +- Archival records +- Certificates and compliance documents +- Financial records + +It ensures that documents remain accessible and render identically regardless of the software or hardware used in the future. + +--- + +## Why We’re Converting Certificates to PDF/A + +### The Problem: +**Inconsistent Rendering Across Platforms:** + - As seen in this [issue](https://github.com/Code4GovTech/c4gt-bff/issues/2), certificates created in a standard PDF format can render differently on various software platforms (e.g., Apple Preview vs. Google Chrome). These discrepancies undermine the credibility and usability of the certificates. + +### The Solution: +By converting certificates to the PDF/A format, we address these issues and ensure that the certificates render consistently across platforms and devices. + +--- + +## Implementation: Using Ghostscript for PDF/A Conversion + +To achieve PDF/A compliance, we’re utilizing **[Ghostscript](https://ghostscript.readthedocs.io/en/latest/Use.html)**, a robust command-line tool for PDF manipulation. diff --git a/src/inauguration/inauguration.controller.spec.ts b/src/inauguration/inauguration.controller.spec.ts deleted file mode 100644 index b599045..0000000 --- a/src/inauguration/inauguration.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { InaugurationController } from './inauguration.controller'; - -describe('InaugurationController', () => { - let controller: InaugurationController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [InaugurationController], - }).compile(); - - controller = module.get(InaugurationController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/inauguration/inauguration.controller.ts b/src/inauguration/inauguration.controller.ts deleted file mode 100644 index 9bc3987..0000000 --- a/src/inauguration/inauguration.controller.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Body, Controller, Get, Param, Post, Put, Req, Res } from '@nestjs/common'; -import { InaugurationService } from './inauguration.service'; -import { Request, Response } from 'express'; - -@Controller('inauguration') -export class InaugurationController { - constructor(private readonly inaugurationService: InaugurationService) {} - - @Post() - generateTokens(@Body() body: any) { - return this.inaugurationService.generateTokens(body.content); - } - - @Get(':token') - verifyToken(@Param('token') token: string) { - return this.inaugurationService.verifyToken(token); - } - - @Get('/status/:token') - getStatus(@Param('token') token: string) { - // Figure out how to store how many people have been inaugurated - return this.inaugurationService.getProgress(token); - } - - @Get('/verify/:did') - async getVerifiedCert( - @Param('did') did: string, - @Req() req: Request, - @Res() res: Response, - ) { - const html = await this.inaugurationService.verifyCredential(did); - res.send(html); - } - - @Post('/cert') - async genCert(@Body() body: any, @Req() req: Request, @Res() res: Response) { - const html = await this.inaugurationService.genCert(body); - res.send(html); - } - - @Get('/view/:did') - async viewCert(@Param('did') did: string) { - return await this.inaugurationService.viewCert(did); - } - - @Get('/reset/:token') - resetDone(@Param('token') token: string) { - return this.inaugurationService.resetDone(token); - } -} diff --git a/src/inauguration/inauguration.module.ts b/src/inauguration/inauguration.module.ts deleted file mode 100644 index 3755e74..0000000 --- a/src/inauguration/inauguration.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from '@nestjs/common'; -import { InaugurationController } from './inauguration.controller'; -import { InaugurationService } from './inauguration.service'; -import { RcwModule } from 'src/rcw/rcw.module'; -import { RcwService } from 'src/rcw/rcw.service'; -import { HttpModule } from '@nestjs/axios'; -import { MailingService } from 'src/mailing/mailing.service'; - -@Module({ - imports: [HttpModule, RcwModule], - providers: [InaugurationService], - controllers: [InaugurationController], -}) -export class InaugurationModule {} diff --git a/src/inauguration/inauguration.service.ts b/src/inauguration/inauguration.service.ts deleted file mode 100644 index e760b56..0000000 --- a/src/inauguration/inauguration.service.ts +++ /dev/null @@ -1,243 +0,0 @@ -import { HttpService } from '@nestjs/axios'; -import { Injectable, InternalServerErrorException } from '@nestjs/common'; -import * as jwt from 'jsonwebtoken'; -import { RcwService } from 'src/rcw/rcw.service'; -import * as fs from 'fs'; -import { AxiosResponse } from 'axios'; -import { compileTemplate } from 'src/rcw/genpdf'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const QRCode = require('qrcode'); - -@Injectable() -export class InaugurationService { - constructor( - private readonly httpService: HttpService, - private readonly rcwService: RcwService, - ) {} - async generateTokens(people: any[]) { - // const tokens = {}; - const idxIdMap = {}; - const ts = Date.now(); - people.forEach((person, idx: number) => { - person.ts = ts; - person.token = jwt.sign({ ...person, ts }, process.env.SECRET, { - expiresIn: '24h', - }); - idxIdMap[person.email] = idx; - }); - - //generate DIDs - const dids = await this.rcwService.generateDIDs(people, idxIdMap); - const creds = await this.rcwService.generateCredential( - dids, - idxIdMap, - process.env.INAUG_CRED_SCHEMA_ID, - [ - 'VerifiableCredential', - 'Acknowledgement', - 'C4GT23', - 'InauguralApproval', - ], - ['Acknowledgement', 'InauguralApproval', 'C4GT23'], - ); - - const objToWrite = { - creds: {}, - done: [], - length: people.length, - }; - - creds.forEach((cred) => { - objToWrite.creds[cred.email] = cred; - }); - - fs.writeFileSync(`./inaug/${ts}.json`, JSON.stringify(objToWrite, null, 2)); - return creds; - } - - verifyToken(token: string) { - const decoded = jwt.verify(token, process.env.SECRET); - if (!decoded) { - throw new InternalServerErrorException('Invalid token'); - } - - // update the done thing - const data = JSON.parse( - fs.readFileSync(`./inaug/${(decoded as any).ts}.json`, 'utf-8'), - ); - - const done = data.done; - let isPresent = false; - done.forEach((person) => { - if (person.email === (decoded as any).email) { - isPresent = true; - } - }); - - if (!isPresent) done.push(data.creds[(decoded as any).email]); - - // rewrite to file - fs.writeFileSync( - `./inaug/${(decoded as any).ts}.json`, - JSON.stringify(data, null, 2), - ); - - return { isPresent, cred: data.creds[(decoded as any).email] }; - } - - getProgress(token: string) { - const decoded = jwt.verify(token, process.env.SECRET); - if (!decoded) { - throw new InternalServerErrorException('Invalid token'); - } - const ts = (decoded as any).ts; - const data = JSON.parse(fs.readFileSync(`./inaug/${ts}.json`, 'utf-8')); - return { done: data.done, length: data.length }; - } - - async verifyCredential(did: string) { - return await this.rcwService.verifyCredentialOld( - did, - 'inaug_verified.html', - ); - } - - async genCert(candidate: any) { - const decoded = jwt.verify(candidate.token, process.env.SECRET); - const data = JSON.parse( - fs.readFileSync(`./inaug/${(decoded as any).ts}.json`, 'utf-8'), - ); - if (data.done.length !== data.length) { - return null; - } - - const type = [ - 'VerifiableCredential', - 'Acknowledgement', - 'C4GT23', - 'ProofOfSubmission', - ]; - const tags = ['Acknowledgement', 'ProofOfSubmission', 'C4GT23']; - let resp: AxiosResponse; - try { - const didResp: AxiosResponse = await this.httpService.axiosRef.post( - `${process.env.IDENTITY_BASE_URL}/did/generate`, - { - content: [ - { - alsoKnownAs: ['LaunchApprovers'], - services: [ - { - id: 'C4GT', - type: 'ProposalAcknowledgement2023', - serviceEndpoint: { - '@context': 'schema.identity.foundation/hub', - '@type': 'C4GTEndpoint', - instance: ['https://www.codeforgovtech.in/'], - }, - }, - ], - method: 'C4GT', - }, - ], - }, - ); - const did = didResp.data[0].id; - console.log('didResp.data: ', didResp.data[0].id); - resp = await this.httpService.axiosRef.post( - `${process.env.CREDENTIAL_BASE_URL}/credentials/issue`, - { - credential: { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://www.w3.org/2018/credentials/examples/v1', - ], - id: 'C4GT', - type, - issuer: process.env.C4GT_DID, //'did:C4GT:8a88baed-3d5b-448d-8dbf-6c184e59c7b7', - issuanceDate: new Date().toISOString(), - expirationDate: new Date('2123-01-01T00:00:00Z').toISOString(), - credentialSubject: { - id: did, - name: candidate.name, - email: candidate.email, - }, - options: { - created: '2020-04-02T18:48:36Z', - credentialStatus: { - type: 'RevocationList2020Status', - }, - }, - }, - credentialSchemaId: process.env.INAUGURATION_CRED_SCHEMA_ID, - tags, - }, - ); - } catch (err) { - console.log('err: ', err); - throw new InternalServerErrorException('Error generating credential'); - } - const cred = resp.data; - const verificationURL = `${process.env.FRONTEND_BASE_URL}/inauguration/view/${cred.credential.id}`; - return verificationURL; - // try { - // const verificationURL = `${process.env.FRONTEND_BASE_URL}/inauguration/verify/${cred.credential.id}`; - // const QRData = await QRCode.toDataURL(verificationURL); - // const html = compileTemplate( - // { - // name: cred.credential.credentialSubject.name, - // qr: QRData, - // }, - // 'inaug.html', - // ); - // return html; - // } catch (err) { - // console.log('err: ', err); - // throw new InternalServerErrorException('Error generating QR'); - // } - } - - async viewCert(id: string) { - let cred: any; - try { - const resp: AxiosResponse = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/${id}`, - ); - cred = resp.data; - } catch (err) { - console.log('err: ', err); - throw new InternalServerErrorException('Error fetching credential'); - } - - try { - const verificationURL = `${process.env.FRONTEND_BASE_URL}/inauguration/verify/${cred.id}`; - const QRData = await QRCode.toDataURL(verificationURL); - const html = compileTemplate( - { - name: cred.credentialSubject.name, - qr: QRData, - }, - 'inaug.html', - ); - return html; - } catch (err) { - console.log('err: ', err); - throw new InternalServerErrorException('Error generating QR'); - } - } - - resetDone(token: string) { - const decoded = jwt.verify(token, process.env.SECRET); - if (!decoded) { - throw new InternalServerErrorException('Invalid token'); - } - const ts = (decoded as any).ts; - const data = JSON.parse(fs.readFileSync(`./inaug/${ts}.json`, 'utf-8')); - data.done = []; - fs.writeFileSync( - `./inaug/${(decoded as any).ts}.json`, - JSON.stringify(data, null, 2), - ); - return { done: data.done, length: data.length }; - } -} diff --git a/src/mailing/mailing.module.ts b/src/mailing/mailing.module.ts deleted file mode 100644 index 124b36f..0000000 --- a/src/mailing/mailing.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Module } from '@nestjs/common'; -import { MailingService } from './mailing.service'; -import { MailerModule } from '@nestjs-modules/mailer'; - -@Module({ - imports: [MailerModule], - providers: [MailingService], - exports: [MailingService], -}) -export class MailingModule {} diff --git a/src/mailing/mailing.service.ts b/src/mailing/mailing.service.ts deleted file mode 100644 index 359b2ce..0000000 --- a/src/mailing/mailing.service.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { MailerService } from '@nestjs-modules/mailer'; -import { Injectable, Logger } from '@nestjs/common'; -import { google } from 'googleapis'; -import { Options } from 'nodemailer/lib/xoauth2'; -import * as fs from 'fs'; -@Injectable() -export class MailingService { - constructor(private readonly mailerService: MailerService) {} - - private async setTransporter() { - const OAuth2 = google.auth.OAuth2; - const oAuth2Client = new OAuth2( - process.env.CLIENT_ID, - process.env.CLIENT_SECRET, - 'https://developers.google.com/oauthplayground', - ); - - oAuth2Client.setCredentials({ - refresh_token: process.env.REFRESH_TOKEN, - }); - - const accessToken = await new Promise((resolve, reject) => { - oAuth2Client.getAccessToken((err, token) => { - if (err) { - reject('Failed to create access token :('); - } - resolve(token); - }); - }); - - const config: any = { - service: 'gmail', - auth: { - type: 'OAuth2', - user: process.env.EMAIL_ID, - clientId: process.env.CLIENT_ID, - clientSecret: process.env.CLIENT_SECRET, - accessToken, - }, - }; - - this.mailerService.addTransporter('gmail', config); - } - - public async sendEmail( - to: string, - subject: string, - html: string, - attachment: any, - ) { - await this.setTransporter(); - - return new Promise((resolve, reject) => { - this.mailerService - .sendMail({ - transporterName: 'gmail', - to, - from: `Code For GovTech <${process.env.EMAIL_ID}>`, - subject, - html, - attachments: [ - { - // path: attachment.path, - // path: attachment.path, - // content: Buffer.from(attachment.path).toString('base64'), - contentType: 'application/pdf', - filename: attachment.filename, - href: attachment.path, - // encoding: 'base64', - // content: Buffer.from(attachment.data).toString('base64'), - // contentDisposition: 'attachment', - }, - ], - }) - .then((success) => { - console.log(success); - Logger.log('email sent'); - resolve(success); - }) - .catch((err) => { - console.log(err); - Logger.error(err); - reject(err); - }); - }); - } -} diff --git a/src/mails.config.ts b/src/mails.config.ts deleted file mode 100644 index 180b347..0000000 --- a/src/mails.config.ts +++ /dev/null @@ -1 +0,0 @@ -export const emailText = ''; \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 916b7f2..fa14856 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,9 +1,16 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors(); + + const config = new DocumentBuilder().setTitle('C4GT VC Certificates').setVersion('2.0').build(); + + const documentFactory = () => SwaggerModule.createDocument(app, config); + SwaggerModule.setup('api', app, documentFactory); + await app.listen(3001); } bootstrap(); diff --git a/src/minio/minio.module.ts b/src/minio/minio.module.ts deleted file mode 100644 index d6358c0..0000000 --- a/src/minio/minio.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Module } from '@nestjs/common'; -import { MinioService } from './minio.service'; - -@Module({ - providers: [MinioService], -}) -export class MinioModule {} diff --git a/src/minio/minio.service.ts b/src/minio/minio.service.ts deleted file mode 100644 index 8ab5404..0000000 --- a/src/minio/minio.service.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class MinioService {} diff --git a/src/prisma/prisma.module.ts b/src/prisma/prisma.module.ts new file mode 100644 index 0000000..46ee088 --- /dev/null +++ b/src/prisma/prisma.module.ts @@ -0,0 +1,14 @@ +import { Module, Global } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; + +@Global() +@Module({ + providers: [ + { + provide: PrismaClient, + useValue: new PrismaClient(), + }, + ], + exports: [PrismaClient], +}) +export class PrismaModule {} diff --git a/src/rcw/dto/requst.dto.ts b/src/rcw/dto/credentialRequests.dto.ts similarity index 100% rename from src/rcw/dto/requst.dto.ts rename to src/rcw/dto/credentialRequests.dto.ts diff --git a/src/rcw/genpdf.ts b/src/rcw/genpdf.ts index a6297be..478af11 100644 --- a/src/rcw/genpdf.ts +++ b/src/rcw/genpdf.ts @@ -18,13 +18,13 @@ export async function createPDF(data, pdfPath) { // const templateHtml = fs.readFileSync('./templates/final.html', 'utf8'); // console.log('templateHtml', templateHtml); // const template = handlebars.compile(templateHtml); - const html = compileTemplate(data, 'final.html'); + const html = compileTemplate(data, 'MentorshipProgramParticipationCertTemplate.html'); fs.writeFileSync(`./htmls/${pdfPath.split('/')[2]}.html`, html); const options = { - height: 900 / 0.75, - width: 600 / 0.75, + height: 848 / 0.75, + width: 570 / 0.75, scale: 1 / 0.75, landscape: true, displayHeaderFooter: false, @@ -42,9 +42,12 @@ export async function createPDF(data, pdfPath) { }); const page = await browser.newPage(); + await page.addStyleTag({ content: 'body { padding-botton: 50px; }' }); // Adjusts the top padding by 50 pixels. + + await page.goto( - `file:///home/techsavvyash/sweatAndBlood/samagra/C4GT/c4gt-bff/htmls/${pdfPath.split('/')[2] + `file:/Users/kanavdwevedi/repositories/c4gt-bff/htmls/${pdfPath.split('/')[2] }.html`, { waitUntil: 'networkidle0' }, ); @@ -63,34 +66,41 @@ export async function createPDFFromTemplate(data, template, pdfPath) { const compiledTemplate = handlebars.compile(template); const html = compiledTemplate(data); + console.log("Call: CreatePDF",data,pdfPath) + fs.writeFileSync(`./htmls/${pdfPath.split('/')[2]}.html`, html); const absolutePath = resolve(`./htmls/${pdfPath.split('/')[2]}.html`); + console.log("Hello") const options = { - height: 900 / 0.75, - width: 600 / 0.75, - scale: 1 / 0.75, + height: 900, + width: 680, + // scale: landscape: true, displayHeaderFooter: false, printBackground: true, path: pdfPath, + pageRanges: '1', }; - const browser = await puppeteer.launch({ - args: ['--no-sandbox'], - headless: 'new', - defaultViewport: { - width: 1024, - height: 768, - }, - }); + + const browser = await puppeteer.launch( + { + args: ['--no-sandbox'], + headless: true, + defaultViewport: { + width: 1024, + height: 600, + }, + }); + + console.log(browser) const page = await browser.newPage(); await page.goto( - // `file:///home/techsavvyash/sweatAndBlood/samagra/C4GT/c4gt-bff/htmls/${pdfPath.split('/')[2] - // }.html`, `file://${absolutePath}`, { waitUntil: 'networkidle0' }, ); + await page.emulateMediaType('screen'); await page.evaluate(() => { window.scrollBy(0, window.innerHeight); diff --git a/src/rcw/mail.service.ts b/src/rcw/mail.service.ts deleted file mode 100644 index a4ab66f..0000000 --- a/src/rcw/mail.service.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { MailerService } from '@nestjs-modules/mailer'; - -export class MailingService { - constructor(private readonly mailerService: MailerService) {} -} diff --git a/src/rcw/rcw.controller.ts b/src/rcw/rcw.controller.ts index 9640fc7..eac8bc1 100644 --- a/src/rcw/rcw.controller.ts +++ b/src/rcw/rcw.controller.ts @@ -1,63 +1,19 @@ import { Body, Controller, Get, Param, Post, Req, Res } from '@nestjs/common'; import { RcwService } from './rcw.service'; -import { async } from 'rxjs'; import { Request, Response } from 'express'; -import { CreateCredDTO, CreateTemplateDTO } from './dto/requst.dto'; +import { CreateCredDTO, CreateTemplateDTO } from './dto/credentialRequests.dto'; @Controller('rcw') export class RcwController { constructor(private readonly rcwService: RcwService) {} - @Get() - async makeItRun() { - return await this.rcwService.processCSV('data/sample.csv'); - } - @Get('/verify/:id') async verify( @Param('id') id: string, @Req() req: Request, @Res() res: Response, ) { - // console.log('in verify'); const resp = await this.rcwService.verifyCredential(id, 'verified.html'); - // console.log('res: ', resp); res.send(resp); - // return await this.rcwService.verifyCredential(id); - } - - // @Get('/generateDIDs') - // async generateDIDs() { - // return this.rcwService.generateDIDs(); - // } - - @Post('/schema') - async createNewSchema(@Body() schema: any) { - return await this.rcwService.createNewSchema(schema); - } - - @Post('/credential') - async createNewCredential(@Body() credential: CreateCredDTO) { - return await this.rcwService.generateNewCredential(credential); - } - - @Get('/credential/:id') - async getCredentialsById(@Param('id') credentialId: string) { - return await this.rcwService.getCredentialsById(credentialId); - } - - @Post('/templates') - async createNewTemplate(@Body() createTemplateDto: CreateTemplateDTO) { - return await this.rcwService.createNewTemplate(createTemplateDto); - } - - @Get('/templates/schema/:id') - async getTemplates(@Param('id') id: string) { - return await this.rcwService.getTemplatesBySchemaId(id); - } - - @Get('/templates/:id') - async getTemplateByTemplateId(@Param('id') templateId: string) { - return await this.rcwService.getTemplateByTemplateId(templateId); } } diff --git a/src/rcw/rcw.interface.ts b/src/rcw/rcw.interface.ts index ab95353..9ecdbb5 100644 --- a/src/rcw/rcw.interface.ts +++ b/src/rcw/rcw.interface.ts @@ -2,6 +2,7 @@ export type CandidateJSON = { id: string; name: string; email: string; + product:string; did: string; credentialDID: string; credential: any; diff --git a/src/rcw/rcw.module.ts b/src/rcw/rcw.module.ts index 6595e48..ac4b013 100644 --- a/src/rcw/rcw.module.ts +++ b/src/rcw/rcw.module.ts @@ -2,11 +2,10 @@ import { Module } from '@nestjs/common'; import { RcwService } from './rcw.service'; import { HttpModule } from '@nestjs/axios'; import { RcwController } from './rcw.controller'; -import { MailingModule } from 'src/mailing/mailing.module'; import { ExecService } from './pdf.service'; @Module({ - imports: [HttpModule, MailingModule], + imports: [HttpModule], providers: [RcwService, ExecService], controllers: [RcwController], exports: [RcwService], diff --git a/src/rcw/rcw.service.ts b/src/rcw/rcw.service.ts index 399c83f..e4f7545 100644 --- a/src/rcw/rcw.service.ts +++ b/src/rcw/rcw.service.ts @@ -1,769 +1,67 @@ import { HttpService } from '@nestjs/axios'; -import { - Injectable, - InternalServerErrorException, - Logger, -} from '@nestjs/common'; -import * as csvToJson from 'csvtojson'; -import { CandidateJSON } from './rcw.interface'; -import { Axios, AxiosResponse } from 'axios'; -import * as wkhtmltopdf from 'wkhtmltopdf'; -import { MailerService } from '@nestjs-modules/mailer'; -import { MailingService } from 'src/mailing/mailing.service'; -import { Client } from 'minio'; -import * as fs from 'fs'; -import { - compileHBS, - compileTemplate, - createPDF, - createPDFFromTemplate, -} from './genpdf'; -import { - CreateCredDTO, - CreateCredSchemaDTO, - CreateTemplateDTO, -} from './dto/requst.dto'; -import { ExecService } from './pdf.service'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const QRCode = require('qrcode'); - -// import pLimit from 'p-limit'; -// const limit = pLimit(5); - -// import { emailText } from 'src/mails.config'; +import { Injectable, InternalServerErrorException } from '@nestjs/common'; +import { AxiosResponse } from 'axios'; +import { compileHBS } from './genpdf'; @Injectable() export class RcwService { - private failedDIDs = []; - private failedCredentials = []; - private failedPDFs = []; - private failedEmails = []; - private failedMinioUploads = []; - private logger: Logger = new Logger('RCWService'); - - constructor( - private readonly httpService: HttpService, - private readonly mailerService: MailerService, - private readonly mailingService: MailingService, - private readonly executorService: ExecService, - ) { - this.failedCredentials = []; - this.failedDIDs = []; - this.failedEmails = []; - this.failedMinioUploads = []; - this.failedPDFs = []; - } - - async processCSV(csvPath: string) { - // const files = ['sample.csv', 'lista.csv', 'listb.csv', 'listc.csv']; - const files = ['sample.csv']; - for (const file of files) { - // setTimeout(async () => { - // // wait it out - // }, 100); - console.log('Processing file: ', file); - const csvFilePath = './data/final/' + file; - const jsonArray = await csvToJson().fromFile(csvFilePath); - const idxIdMap = {}; - jsonArray.forEach((candidate: CandidateJSON, idx: number) => { - idxIdMap[candidate.email] = idx; - }); - - let candidatesWithDIDs, candidatesWithCredentials; - try { - // console.log('jsonArray: ', jsonArray); - candidatesWithDIDs = await this.generateDIDs( - jsonArray as CandidateJSON[], - idxIdMap, - ); - } catch (err) { - Logger.error('Error in generating DIDs', err); - throw new InternalServerErrorException(err); - } - - try { - // console.log(candidatesWithDIDs); - // fs.writeFileSync( - // `./output/dids-${Date.now()}.json`, - // JSON.stringify(candidatesWithDIDs), - // ); - candidatesWithCredentials = await this.generateCredential( - candidatesWithDIDs, - idxIdMap, - process.env.ACK_CRED_SCHEMA_ID, - [ - 'VerifiableCredential', - 'Acknowledgement', - 'C4GT23', - 'ProofOfSubmission', - ], - ['Acknowledgement', 'ProofOfSubmission', 'C4GT23'], - ); - } catch (err) { - console.log('err: ', err); - Logger.error('Error in generating credentials', err); - throw new InternalServerErrorException(err); - } - - console.log( - 'candidatesWithCredentials: ', - candidatesWithCredentials.length, - ); - fs.writeFileSync( - `./output/${file}.json`, - JSON.stringify(candidatesWithCredentials), - ); - // await this.generatePDFs(candidatesWithCredentials); - } - const failedPDFs = this.failedPDFs; - const newFiles = ['sample.csv']; - for (const file of newFiles) { - const pdfsToGenerate = JSON.parse( - fs.readFileSync(`./output/${file}.json`, 'utf-8'), - ); - - for (let i = 0; i < pdfsToGenerate.length; i++) { - const candidate = pdfsToGenerate[i]; - try { - await this.generatePDFs(candidate); - } catch (err) { - Logger.error('Error in generating PDF', err); - this.failedPDFs.push(candidate.id); - } - } - } - - fs.writeFileSync( - `./output/failedPDFs.json`, - JSON.stringify(this.failedPDFs), - ); - return 'Done'; - // return candidatesWithDIDs; - - // render and send emails - } - - async generateDIDs( - candidates: CandidateJSON[], - idxIdMap: { [k: string]: number }, - ) { - const responses = await Promise.all( - candidates.map((candidate: CandidateJSON, idx: number) => { - // generate DID - return this.httpService.axiosRef.post( - `${process.env.IDENTITY_BASE_URL}/did/generate`, - { - content: [ - { - alsoKnownAs: [candidate.email, candidate.name, candidate.id], - services: [ - { - id: 'C4GT', - type: 'ProposalAcknowledgement2023', - serviceEndpoint: { - '@context': 'schema.identity.foundation/hub', - '@type': 'C4GTEndpoint', - instance: ['https://www.codeforgovtech.in/'], - }, - }, - ], - method: 'C4GT', - }, - ], - }, - ); - }), - ); - - // const failedUserIds = []; - responses.forEach((response: AxiosResponse) => { - try { - // console.log(response.data); - const did = response.data[0].id; - candidates[idxIdMap[response.data[0].alsoKnownAs[0]]].did = did; - idxIdMap[did] = idxIdMap[response.data[0].alsoKnownAs[0]]; - } catch (err) { - Logger.error(`Error in mapping did of user`); - console.log('error: ', err); - this.failedDIDs.push(response.data[0].alsoKnownAs[0]); - } - }); - - return candidates; - } - - async generateCredential( - candidates: CandidateJSON[], - idxIdMap: { [k: string]: number }, - credSchemaId: string = process.env.ACK_SCHEMA_ID, - type: string[] = ['VerifiableCredential', 'Acknowledgement', 'C4GT23'], - tags: string[] = ['C4GT23'], - ) { - const responses = await Promise.all( - candidates.map((candidate: CandidateJSON, idx: number) => { - // console.log('candidateDID: ', candidate.did); - return this.httpService.axiosRef.post( - `${process.env.CREDENTIAL_BASE_URL}/credentials/issue`, - { - credential: { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://www.w3.org/2018/credentials/examples/v1', - ], - id: 'C4GT', - type, - issuer: process.env.C4GT_DID, //'did:C4GT:8a88baed-3d5b-448d-8dbf-6c184e59c7b7', - issuanceDate: new Date().toISOString(), - expirationDate: new Date('2123-01-01T00:00:00Z').toISOString(), - credentialSubject: { - id: candidate.did, - name: candidate.name, - email: candidate.email, - }, - options: { - created: '2020-04-02T18:48:36Z', - credentialStatus: { - type: 'RevocationList2020Status', - }, - }, - }, - credentialSchemaId: credSchemaId, - tags, - }, - ); - }), - ); - - responses.forEach((response: AxiosResponse) => { - try { - // console.log('cred did: ', response.data.credential.id); - candidates[ - idxIdMap[response.data.credential.credentialSubject.id] - ].credentialDID = response.data.credential.id; - candidates[ - idxIdMap[response.data.credential.credentialSubject.id] - ].credential = response.data.credential; - } catch (err) { - Logger.error(`Error in mapping credentialDID of user`, err.message); - } - }); - - return candidates; - } - - async getCredentialPDFData(credential: any, templateId: string) { - // fetch the template - // const templateResponse: AxiosResponse = await this.httpService.axiosRef.get( - // `${process.env.SCHEMA_BASE_URL}/rendering-template/${templateId}`, - // ); - // const template = templateResponse.data.template; - // console.log('template: ', template); - try { - const response = await this.httpService.axiosRef.post( - `${process.env.CREDENTIAL_BASE_URL}/credentials/render`, - { - credential: credential, - template: fs.readFileSync('./templates/final.html', 'utf8'), - output: 'HTML', - }, - ); - - console.log(response.data); - return response.data; - } catch (err) { - console.log(err); - Logger.error(`Error in generating PDF`, err.message); - } - } - - async renderAsQR(cred) { - try { - const verificationURL = `${process.env.FRONTEND_BASE_URL}/rcw/verify/${cred.id}`; - const QRData = await QRCode.toDataURL(verificationURL); - return QRData; - } catch (err) { - console.error(err); - return err; - } - } - async generatePDFs2(candidates: CandidateJSON[]) { - const failedPDFCreations = []; - const failedUploads = []; - const failedEmails = []; - const fileCandidateMapping = []; - - for (let i = 0; i < candidates.length; i++) { - const candidate = candidates[i]; - const fileName = `${candidate.id}_${candidate.name}.pdf`; - const filePath = `./pdfs/${fileName}`; - // GENERATE QR - const qr = await this.renderAsQR(candidates[i].credential); - console.time('pdfCreation'); - try { - await createPDF({ name: candidate.name, qr: qr }, filePath); - // const template = Handlebars.compile( - // fs.readFileSync('./templates/final.html', 'utf8'), - // ); - // const data = template({ name: candidate.name, qr: qr }); - // await this.genPdfFromWKHTML(data, filePath); - } catch (er) { - console.log('eror in pdf generation: ', er); - failedPDFCreations.push(candidate); - continue; - } - console.timeEnd('pdfCreation'); - const minioURL = `http://${process.env.MINIO_ENDPOINT}:${process.env.MINIO_PORT}/${process.env.MINIO_BUCKETNAME}/${fileName}`; - - console.time('uploadToMinio'); - try { - await this.uploadToMinio(`${fileName}`, `${filePath}`); - fileCandidateMapping[candidate.id] = { minioURL, filePath, fileName }; - } catch (err) { - console.error('error uploading to minio: ', err); - failedUploads.push(candidate); - // throw new InternalServerErrorException('Error uploading to minio'); - } - console.timeEnd('uploadToMinio'); - } - // sending emails - for (let i = 0; i < candidates.length; i++) { - const candidate = candidates[i]; - const { minioURL, filePath, fileName } = - fileCandidateMapping[candidate.id]; - try { - console.log(minioURL); - await this.mailingService.sendEmail( - candidate.email, - 'Thank you for applying to C4GT 2023!', - fs.readFileSync('./templates/email.html', 'utf8'), - { - // data: data, - path: `http://${process.env.MINIO_ENDPOINT}:${process.env.MINIO_PORT}/${process.env.MINIO_BUCKETNAME}/${fileName}`, - filename: `${fileName}`, - }, - ); - } catch (err) { - console.log('err: ', err); - Logger.error(`Error in sending email for ${candidate.name} ${err}`); - failedEmails.push(candidate); - // throw new InternalServerErrorException('Error sending email'); - } - } - } - - async generatePDFs(candidates: CandidateJSON[]) { - const failedPDFCreations = []; - const failedUploads = []; - const failedEmails = []; - const fileCandidateMapping = []; - - for (let i = 0; i < candidates.length; i++) { - const candidate = candidates[i]; - const fileName = `${candidate.id}_${candidate.name}.pdf`; - const filePath = `./pdfs/${fileName}`; - // GENERATE QR - const qr = await this.renderAsQR(candidates[i].credential); - console.time('pdfCreation'); - try { - await createPDF({ name: candidate.name, qr: qr }, filePath); - // const template = Handlebars.compile( - // fs.readFileSync('./templates/final.html', 'utf8'), - // ); - // const data = template({ name: candidate.name, qr: qr }); - // await this.genPdfFromWKHTML(data, filePath); - } catch (er) { - console.log('eror in pdf generation: ', er); - failedPDFCreations.push(candidate); - continue; - } - console.timeEnd('pdfCreation'); - const minioURL = `http://${process.env.MINIO_ENDPOINT}:${process.env.MINIO_PORT}/${process.env.MINIO_BUCKETNAME}/${fileName}`; - - console.time('uploadToMinio'); - try { - await this.uploadToMinio(`${fileName}`, `${filePath}`); - fileCandidateMapping[candidate.id] = { minioURL, filePath, fileName }; - } catch (err) { - console.error('error uploading to minio: ', err); - failedUploads.push(candidate); - // throw new InternalServerErrorException('Error uploading to minio'); - } - console.timeEnd('uploadToMinio'); - } - - // sending emails - for (let i = 0; i < candidates.length; i++) { - const candidate = candidates[i]; - const { minioURL, filePath, fileName } = - fileCandidateMapping[candidate.id]; - console.time('sendEmail'); - try { - console.log(minioURL); - await this.mailingService.sendEmail( - candidate.email, - 'Thank you for applying to C4GT 2023!', - fs.readFileSync('./templates/email.html', 'utf8'), - { - // data: data, - path: `http://${process.env.MINIO_ENDPOINT}:${process.env.MINIO_PORT}/${process.env.MINIO_BUCKETNAME}/${fileName}`, - filename: `${fileName}`, - }, - ); - } catch (err) { - console.log('err: ', err); - Logger.error(`Error in sending email for ${candidate.name} ${err}`); - failedEmails.push(candidate); - // throw new InternalServerErrorException('Error sending email'); - } - console.timeEnd('sendEmail'); - } - } - - public async verifyCredential( - credentialDID: string, - verifiedTemplaeFile: string, - ) { + constructor(private readonly httpService: HttpService) {} + public async verifyCredential(credentialDID: string, verifiedTemplateFile: string) { + return '' // verify on the server - try { - const resp: AxiosResponse = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/${credentialDID}/verify`, - ); - - const verificatonData = resp.data; - - if (verificatonData.status === 'ISSUED') { - const credResp = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/${credentialDID}`, - ); - const data = credResp.data; - - const schemaResp = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/schema/${data.id}`, - ); - - const schemaId = schemaResp.data.credential_schema; - - // fetch template via schemaId - - const templates = await this.getTemplatesBySchemaId(schemaId); - - let template; - for (let i = 0; i < templates.length; i++) { - const temp = templates[i]; - if (temp.type.trim() === 'verified') { - template = temp.template; - break; - } - } - - console.log('template: ', template); - - console.log('data: ', data); - const qr = await this.renderAsQR(data.id); - const html = compileHBS( - { - ...data.credentialSubject, - qr: qr, - }, - template ?? verifiedTemplaeFile, - ); - return html; - // return { - // status: 'ISSUED', - // credential: data, - // html: `'${html}`, - // }; - } else { - return 'Invalid credential'; - } - } catch (err) { - console.log('err: ', err); - throw new InternalServerErrorException(err); - } - } - - public async verifyCredentialOld( - credentialDID: string, - verifiedTemplaeFile: string, - ) { - // verify on the server - try { - const resp: AxiosResponse = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/${credentialDID}/verify`, - ); - - const verificatonData = resp.data; - - if (verificatonData.status === 'ISSUED') { - const credResp = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/${credentialDID}`, - ); - const data = credResp.data; - - /*const schemaResp = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/schema/${data.id}`, - ); - - const schemaId = schemaResp.data.credential_schema; - - // fetch template via schemaId - - const templates = await this.getTemplatesBySchemaId(schemaId); - - let template; - for (let i = 0; i < templates.length; i++) { - const temp = templates[i]; - if (temp.type.trim() === 'verified') { - template = temp.template; - break; - } - } - - console.log('template: ', template); -*/ - console.log('data: ', data); - const qr = await this.renderAsQR(data.id); - const html = compileTemplate( - { - ...data.credentialSubject, - qr: qr, - }, - verifiedTemplaeFile, - ); - return html; - // return { - // status: 'ISSUED', - // credential: data, - // html: `'${html}`, - // }; - } else { - return 'Invalid credential'; - } - } catch (err) { - console.log('err: ', err); - throw new InternalServerErrorException(err); - } - } - - private async uploadToMinio(fileName, file) { - const metaData = { - 'Content-Type': 'application/pdf', - }; - - const minioClient = new Client({ - endPoint: process.env.MINIO_ENDPOINT, - port: parseInt(process.env.MINIO_PORT), - useSSL: false, - accessKey: process.env.MINIO_ACCESS_KEY, - secretKey: process.env.MINIO_SECRET_KEY, - }); - - return new Promise((resolve, reject) => { - minioClient.fPutObject( - process.env.MINIO_BUCKETNAME, - fileName, - file, - metaData, - function (err, objInfo) { - if (err) { - reject(err); - } - console.log('Success', objInfo); - resolve( - `http://${process.env.MINIO_ENDPOINT}:${process.env.MINIO_PORT}/${process.env.MINIO_BUCKETNAME}/${fileName}`, - ); - }, - ); - }); - } - - // async getCredentialsByUser( - // candidateEmail: string, - // idxIdMap: { [k: string]: number }, - // ) { - // const candidate = candidates[idxIdMap[candidateEmail]]; - // const response: AxiosResponse = await this.httpService.axiosRef.post( - // `${process.env.CREDENTIAL_BASE_URL}/credentials/search`, - // { - // subject: { - // id: candidate.did, - // }, - // }, - // ); - - // return response.data; - // } - - async createNewSchema(schema: CreateCredSchemaDTO) { - const createdSchemaResp: AxiosResponse = - await this.httpService.axiosRef.post( - `${process.env.SCHEMA_BASE_URL}/credential-schema`, - { - schema: { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://www.w3.org/2018/credentials/examples/v1', - 'https://playground.chapi.io/examples/alumni/alumni-v1.json', - 'https://w3id.org/security/suites/ed25519-2020/v1', - ], - type: 'https://w3c-ccg.github.io/vc-json-schemas/', - version: '1.0', - id: '', - name: schema.id, - author: process.env.C4GT_DID, // this is harcoded to C4GT DID since this is C4GT BFF - authored: new Date().toISOString(), - schema: { - $id: schema.id, - $schema: 'https://json-schema.org/draft/2019-09/schema', - description: schema.description, - type: 'object', - properties: { - ...schema.properties, - }, - required: schema.required, - additionalProperties: false, - }, - proof: {}, - }, - tags: schema.tags, - status: 'PUBLISHED', - }, - ); - - return createdSchemaResp.data; - } - - async generateNewCredential(createCredDTO: CreateCredDTO) { - const { type, subject, schema, tags, templateId } = createCredDTO; - // GENERATE CREDENTIAL - const createCredentialResp: AxiosResponse = - await this.httpService.axiosRef.post( - `${process.env.CREDENTIAL_BASE_URL}/credentials/issue`, - { - credential: { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://www.w3.org/2018/credentials/examples/v1', - ], - id: 'C4GT', - type, - issuer: process.env.C4GT_DID, //'did:C4GT:8a88baed-3d5b-448d-8dbf-6c184e59c7b7', - issuanceDate: new Date().toISOString(), - expirationDate: new Date('2123-01-01T00:00:00Z').toISOString(), - credentialSubject: { - ...subject, - }, - options: { - created: '2020-04-02T18:48:36Z', - credentialStatus: { - type: 'RevocationList2020Status', - }, - }, - }, - credentialSchemaId: schema, - tags: tags ?? [], - }, - ); - - const credential = createCredentialResp.data.credential; - - const verificationURL = `${process.env.FRONTEND_BASE_URL}/rcw/verify/${credential?.id}`; - // fetch the template using template ID given in DTO - - if (!templateId) { - this.logger.warn('TemplateId not given hence skipping PDF creation.'); - return { verificationURL }; - } - let template; - try { - const templateResp = await this.getTemplateByTemplateId(templateId); - template = templateResp.template; - } catch (err) { - this.logger.error('Error fetching template: ', err); - throw new InternalServerErrorException('Error fetching template'); - } - - // RENDER PDF AND UPLOAD TO MINIO - if (!template) { - this.logger.warn('Template not found hence skipping PDF creation.'); - return { verificationURL }; - } - const fileName = `${credential.credentialSubject.username}_${credential.credentialSubject.badge}.pdf`; - const filePath = `./pdfs/${fileName}`; - try { - const qr = await this.renderAsQR(credential); - const pdfData = await createPDFFromTemplate( - { - ...credential.credentialSubject, - qr, - }, - template, - filePath, - ); - } catch (err) { - this.logger.error('Error generating PDF: ', err); - throw new InternalServerErrorException('Error generating PDF'); - } - - // CONVERT PDF BEFORE UPLOADING - let outputPath = `./pdfs/_${fileName}` - await this.executorService.pdfConvertorCommand(filePath, outputPath) - - // UPLOAD PDF to MINIO - - try { - await this.uploadToMinio(`${fileName}`, `${outputPath}`); - } catch (err) { - this.logger.error('Error uploading file to minio: ', err); - throw new InternalServerErrorException('Error uploading file to minio'); - } - const minioURL = `http://${process.env.MINIO_ENDPOINT}:${process.env.MINIO_PORT}/${process.env.MINIO_BUCKETNAME}/${fileName}`; - - // delete the pdf file to freee up storage - try { - await Promise.all([ - fs.promises.unlink(filePath), - fs.promises.unlink(outputPath) - ]); - console.log('File deleted successfully'); - } catch (err) { - console.error('Error deleting file:', err); - } - return { verificationURL, minioURL }; - } - - async createNewTemplate(createTemplateDto: CreateTemplateDTO) { - const temp = await this.httpService.axiosRef.post( - `${process.env.SCHEMA_BASE_URL}/rendering-template`, - { - ...createTemplateDto, - }, - ); - - return temp.data; - } - - async getTemplatesBySchemaId(schemaId: string) { - const res = await this.httpService.axiosRef.get( - `${process.env.SCHEMA_BASE_URL}/rendering-template?schemaId=${schemaId}`, - ); - - return res.data; - } - - async getTemplateByTemplateId(templateId: string) { - const res = await this.httpService.axiosRef.get( - `${process.env.SCHEMA_BASE_URL}/rendering-template/${templateId}`, - ); - - return res.data; - } - - async getCredentialsById(id: string) { - const res = await this.httpService.axiosRef.get( - `${process.env.CREDENTIAL_BASE_URL}/credentials/${id}`, - ); - - return res.data; + // try { + // const resp: AxiosResponse = await this.httpService.axiosRef.get( + // `${process.env.CREDENTIAL_BASE_URL}/credentials/${credentialDID}/verify`, + // ); + + // const verificatonData = resp.data; + + // if (verificatonData.status === 'ISSUED') { + // const credResp = await this.httpService.axiosRef.get( + // `${process.env.CREDENTIAL_BASE_URL}/credentials/${credentialDID}`, + // ); + // const data = credResp.data; + // console.log('VERIFICATION DATA', data); + + // const schemaResp = await this.httpService.axiosRef.get( + // `${process.env.CREDENTIAL_BASE_URL}/credentials/schema/${data.id}`, + // ); + + // const schemaId = schemaResp.data.credential_schema; + + // console.log('SchemaID ', schemaId); + + // // fetch template via schemaId + + // const templates = await this.getTemplatesBySchemaId(schemaId); + + // let template; + // for (let i = 0; i < templates.length; i++) { + // const temp = templates[i]; + // if (temp.type.trim() === 'verified') { + // template = temp.template; + // break; + // } + // } + + // console.log('template: ', template); + + // console.log('data: ', data); + // const qr = await this.renderAsQR(data.id); + // const html = compileHBS( + // { + // ...data.credentialSubject, + // qr: qr, + // }, + // template ?? verifiedTemplateFile, + // ); + // return html; + // } else { + // return 'Invalid credential'; + // } + // } catch (err) { + // console.log('err: ', err); + // throw new InternalServerErrorException(err); + // } } } diff --git a/src/schema/schema.controller.spec.ts b/src/schema/schema.controller.spec.ts new file mode 100644 index 0000000..42026a1 --- /dev/null +++ b/src/schema/schema.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { SchemaController } from './schema.controller'; + +describe('SchemaController', () => { + let controller: SchemaController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [SchemaController], + }).compile(); + + controller = module.get(SchemaController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/schema/schema.controller.ts b/src/schema/schema.controller.ts new file mode 100644 index 0000000..df3d409 --- /dev/null +++ b/src/schema/schema.controller.ts @@ -0,0 +1,26 @@ +import { Body, Controller, Get, Post, Put, Param } from '@nestjs/common'; +import { SchemaService } from './schema.service'; +import { CreateSchemaDTO } from './schema.dto'; + +@Controller('schema') +export class SchemaController { + constructor(private readonly schemaService: SchemaService) {} + @Get(':id?') + getCredentialSchema(@Param('id') id?: string) { + return this.schemaService.getCredentialSchema(id); + } + + @Post() + async createCredentialSchema( + @Body() createCredentialSchemaPayload: CreateSchemaDTO, + ) { + return await this.schemaService.createCredentialSchema( + createCredentialSchemaPayload, + ); + } + + @Put() + editCredentialSchema() { + this.schemaService.editCredentialSchema(); + } +} diff --git a/src/schema/schema.dto.ts b/src/schema/schema.dto.ts new file mode 100644 index 0000000..9971399 --- /dev/null +++ b/src/schema/schema.dto.ts @@ -0,0 +1,13 @@ +export class CreateSchemaDTO { + name: string; + description: string; + properties: { + [k: string]: { + type: string; + description?: string; + format?: string; + }; + }; + required: string[]; + tags: string[]; +} diff --git a/src/schema/schema.interface.ts b/src/schema/schema.interface.ts new file mode 100644 index 0000000..44265f1 --- /dev/null +++ b/src/schema/schema.interface.ts @@ -0,0 +1,3 @@ +export interface RCWSchemaServiceConfig { + baseUrl: string; + } \ No newline at end of file diff --git a/src/schema/schema.module.ts b/src/schema/schema.module.ts new file mode 100644 index 0000000..cdd03a1 --- /dev/null +++ b/src/schema/schema.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { SchemaService } from './schema.service'; +import { HttpModule } from '@nestjs/axios'; +import { SchemaController } from './schema.controller'; + +@Module({ + imports: [HttpModule], + controllers: [SchemaController], + providers: [SchemaService], + exports: [SchemaService] +}) +export class SchemaModule { + +} diff --git a/src/minio/minio.service.spec.ts b/src/schema/schema.service.spec.ts similarity index 55% rename from src/minio/minio.service.spec.ts rename to src/schema/schema.service.spec.ts index 8cc5a96..3dcefbb 100644 --- a/src/minio/minio.service.spec.ts +++ b/src/schema/schema.service.spec.ts @@ -1,15 +1,15 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { MinioService } from './minio.service'; +import { SchemaService } from './schema.service'; -describe('MinioService', () => { - let service: MinioService; +describe('SchemaService', () => { + let service: SchemaService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [MinioService], + providers: [SchemaService], }).compile(); - service = module.get(MinioService); + service = module.get(SchemaService); }); it('should be defined', () => { diff --git a/src/schema/schema.service.ts b/src/schema/schema.service.ts new file mode 100644 index 0000000..ce77c85 --- /dev/null +++ b/src/schema/schema.service.ts @@ -0,0 +1,138 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { CreateSchemaDTO } from './schema.dto'; +import { HttpService } from '@nestjs/axios'; +import { ConfigService } from '@nestjs/config'; +import { AxiosResponse } from 'axios'; +import { Schema, PrismaClient } from '@prisma/client'; +import { RCWSchemaServiceConfig } from './schema.interface'; + +@Injectable() +export class SchemaService { + private rcwSchemaServiceConfig; + private readonly logger = new Logger(SchemaService.name); + constructor( + private readonly configService: ConfigService, + private readonly httpService: HttpService, + private readonly prisma: PrismaClient, + ) { + this.rcwSchemaServiceConfig = this.configService.get('schemaService'); + } + async getCredentialSchema(id: string): Promise { + try { + if (!id) { + this.logger.debug('Fetching all schemas from the database'); + const schemas = await this.prisma.schema.findMany(); + this.logger.debug('Fetched all schemas successfully', { count: schemas.length }); + return schemas; + } + + this.logger.debug('Fetching schema from RCW Schema Service', { id }); + + const getSchemaResponse: AxiosResponse = await this.httpService.axiosRef.get( + `${this.rcwSchemaServiceConfig.baseUrl}/credential-schema/${id}`, + ); + + this.logger.debug('Fetched schema from RCW Schema Service successfully', { + responseData: getSchemaResponse.data, + }); + + return getSchemaResponse.data; + } catch (error) { + if (!id) { + this.logger.error('Error occurred while fetching schemas from the database', { + error: error.message, + }); + throw new Error('Failed to fetch schemas from the database'); + } else { + this.logger.error('Error occurred while fetching schema from RCW Schema Service', { + id, + error: error.message, + }); + throw new Error(`Failed to fetch schema with ID: ${id} from RCW Schema Service`); + } + } + } + + + async createCredentialSchema(createSchemaPayload: CreateSchemaDTO) { + const payload = { + schema: { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://www.w3.org/2018/credentials/examples/v1', + 'https://playground.chapi.io/examples/alumni/alumni-v1.json', + 'https://w3id.org/security/suites/ed25519-2020/v1', + ], + type: 'https://w3c-ccg.github.io/vc-json-schemas/', + version: '1.0', + id: '', + name: createSchemaPayload.name, + author: process.env.C4GT_DID, // Hardcoded to C4GT DID + authored: new Date().toISOString(), + schema: { + $id: createSchemaPayload.name, + $schema: 'https://json-createSchemaPayload.org/draft/2019-09/schema', + description: createSchemaPayload.description, + type: 'object', + properties: { + ...createSchemaPayload.properties, + }, + required: createSchemaPayload.required, + additionalProperties: false, + }, + proof: {}, + }, + tags: createSchemaPayload.tags, + status: 'PUBLISHED', + }; + + let createSchemaResponse: AxiosResponse; + + try { + this.logger.debug('Sending request to RCW Schema Service', { + baseUrl: this.rcwSchemaServiceConfig.baseUrl, + payload, + }); + + createSchemaResponse = await this.httpService.axiosRef.post( + `${this.rcwSchemaServiceConfig.baseUrl}/credential-schema`, + payload, + ); + + this.logger.debug('Received response from RCW Schema Service', { + responseData: createSchemaResponse.data, + }); + } catch (error) { + this.logger.error('Error occurred while creating schema with RCW service', { error: error.message }); + throw new Error('Failed to create schema with RCW service'); + } + + try { + this.logger.debug('Saving schema to the database', { + schemaData: createSchemaResponse.data.schema, + tags: createSchemaResponse.data.tags, + }); + + await this.prisma.schema.create({ + data: { + id: createSchemaResponse.data.schema.id, + name: createSchemaResponse.data.schema.name, + description: createSchemaResponse.data.schema.schema?.description ?? '', + tags: createSchemaResponse.data.tags ?? [], + }, + }); + + this.logger.debug('Schema saved successfully to the database'); + } catch (error) { + this.logger.error('Error occurred while saving schema to the database', { error: error.message }); + throw new Error('Failed to save schema to the database'); + } + + return createSchemaResponse.data; + } + + + editCredentialSchema() { + return; + } +} diff --git a/src/template/template.controller.spec.ts b/src/template/template.controller.spec.ts new file mode 100644 index 0000000..959e29a --- /dev/null +++ b/src/template/template.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { TemplateController } from './template.controller'; + +describe('TemplateController', () => { + let controller: TemplateController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [TemplateController], + }).compile(); + + controller = module.get(TemplateController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/template/template.controller.ts b/src/template/template.controller.ts new file mode 100644 index 0000000..176d630 --- /dev/null +++ b/src/template/template.controller.ts @@ -0,0 +1,32 @@ +import { Controller, Get, Post, Delete, Put, Param, Body, Query } from '@nestjs/common'; +import { CreateTemplateDTO, SetVerificationTemplateDTO } from './template.dto'; +import { TemplateService } from './template.service'; + +@Controller('template') +export class TemplateController { + constructor(private readonly templateService: TemplateService) {} + @Get(':id?') + async getCredentialRenderingTemplate(@Param('id') id?: string, @Query('schemaId') schemaId?: string) { + return await this.templateService.getTemplates(id, schemaId); + } + + @Post() + async createCredentialRenderingTemplate(@Body() createCredentialRenderingTemplatePayload: CreateTemplateDTO) { + return await this.templateService.createTemplate(createCredentialRenderingTemplatePayload); + } + + @Post(':id/set') + async mapVerificationTemplate(@Param('id') id: string, @Body() setVerificationTemplatePayload: SetVerificationTemplateDTO) { + return await this.templateService.setVerificationTemplate(id, setVerificationTemplatePayload); + } + + @Put() + editCredentialRenderingTemplate() { + return; + } + + @Delete() + deleteCredentialRenderingTemplate() { + return; + } +} diff --git a/src/template/template.dto.ts b/src/template/template.dto.ts new file mode 100644 index 0000000..fd23dce --- /dev/null +++ b/src/template/template.dto.ts @@ -0,0 +1,11 @@ +export class CreateTemplateDTO { + name: string; + description: string; + template: string; + schemaId: string; + type: string; + } + +export class SetVerificationTemplateDTO { + verificationTemplateId: string; +} \ No newline at end of file diff --git a/src/template/template.module.ts b/src/template/template.module.ts new file mode 100644 index 0000000..70f77ec --- /dev/null +++ b/src/template/template.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TemplateController } from './template.controller'; +import { TemplateService } from './template.service'; +import { HttpModule } from '@nestjs/axios'; + +@Module({ + imports: [ HttpModule], + controllers: [TemplateController], + providers: [TemplateService], + exports: [TemplateService], +}) +export class TemplateModule {} diff --git a/src/mailing/mailing.service.spec.ts b/src/template/template.service.spec.ts similarity index 54% rename from src/mailing/mailing.service.spec.ts rename to src/template/template.service.spec.ts index 82b5a1c..eda399d 100644 --- a/src/mailing/mailing.service.spec.ts +++ b/src/template/template.service.spec.ts @@ -1,15 +1,15 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { MailingService } from './mailing.service'; +import { TemplateService } from './template.service'; -describe('MailingService', () => { - let service: MailingService; +describe('TemplateService', () => { + let service: TemplateService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [MailingService], + providers: [TemplateService], }).compile(); - service = module.get(MailingService); + service = module.get(TemplateService); }); it('should be defined', () => { diff --git a/src/template/template.service.ts b/src/template/template.service.ts new file mode 100644 index 0000000..d59c5eb --- /dev/null +++ b/src/template/template.service.ts @@ -0,0 +1,136 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; +import { HttpService } from '@nestjs/axios'; +import { RCWSchemaServiceConfig } from 'src/schema/schema.interface'; +import { ConfigService } from '@nestjs/config'; +import { CreateTemplateDTO, SetVerificationTemplateDTO } from './template.dto'; +import { template } from 'handlebars'; + +@Injectable() +export class TemplateService { + private rcwSchemaServiceConfig; + private readonly logger = new Logger(TemplateService.name); + constructor( + private readonly prisma: PrismaClient, + private readonly httpService: HttpService, + private readonly configService: ConfigService, + ) { + this.rcwSchemaServiceConfig = this.configService.get('schemaService'); + } + + async getTemplates(id?: string, schemaId?: string) { + if (id && schemaId) { + // Logic for when both ID and schemaId are provided + } else if (id) { + return this.getTemplateByTemplateId(id); + } else if (schemaId) { + return this.getTemplatesBySchemaId(schemaId); + } else { + return this.prisma.template.findMany(); + } + } + + async getTemplateByTemplateId(templateId: string) { + const res = await this.httpService.axiosRef.get( + `${this.rcwSchemaServiceConfig.baseUrl}/template/${templateId}`, + ); + return res.data; + } + + private async getTemplatesBySchemaId(schemaId: string) { + const res = await this.httpService.axiosRef.get( + `${this.rcwSchemaServiceConfig.baseUrl}/template?schemaId=${schemaId}`, + ); + return res.data; + } + + async createTemplate(createCredentialRenderingTemplatePayload: CreateTemplateDTO) { + try { + const payload = { + schemaId: createCredentialRenderingTemplatePayload.schemaId, + template: createCredentialRenderingTemplatePayload.template, + type: createCredentialRenderingTemplatePayload.type, + }; + + this.logger.debug(`Payload for rendering template creation: ${JSON.stringify(payload)}`); + + const renderingTemplateCreationResponse = await this.httpService.axiosRef.post( + `${this.rcwSchemaServiceConfig.baseUrl}/template`, + payload, + ); + + this.logger.debug( + `Rendering template created successfully with ID: ${renderingTemplateCreationResponse.data.templateId}`, + ); + + const renderingTemplateRegistration = await this.prisma.template.create({ + data: { + id: renderingTemplateCreationResponse.data.templateId, + name: createCredentialRenderingTemplatePayload.name, + description: createCredentialRenderingTemplatePayload.description, + type: createCredentialRenderingTemplatePayload.type, + }, + }); + + this.logger.debug(`Rendering template registered in the database with ID: ${renderingTemplateRegistration.id}`); + + return renderingTemplateRegistration; + } catch (error) { + this.logger.error(`Error creating or registering rendering template: ${error.message}`, error.stack); + throw error; + } + } + + async setVerificationTemplate(templateId: string, setVerificationTemplatePayload: SetVerificationTemplateDTO) { + try { + // Step 1: Check if the main template exists + const template = await this.getTemplateByTemplateId(templateId); + if (!template) { + throw new Error(`Template with ID ${templateId} does not exist.`); + } + + this.logger.debug(`Found template with ID ${templateId}: ${JSON.stringify(template)}`); + + // Step 2: Check if the verification template exists + const verificationTemplate = await this.getTemplateByTemplateId( + setVerificationTemplatePayload.verificationTemplateId, + ); + if (!verificationTemplate) { + throw new Error( + `Verification template with ID ${setVerificationTemplatePayload.verificationTemplateId} does not exist.`, + ); + } + + this.logger.debug( + `Found verification template with ID ${setVerificationTemplatePayload.verificationTemplateId}: ${JSON.stringify( + verificationTemplate, + )}`, + ); + + // Step 3: Upsert the Template Entity + const updatedTemplate = await this.prisma.template.upsert({ + where: { id: templateId }, + update: { + verificationTemplateId: setVerificationTemplatePayload.verificationTemplateId, + }, + create: { + id: templateId, + name: template.name || 'Default Name', // Use default values or extract appropriately + description: template.description || 'Default Description', + type: template.type || 'Default Type', + verificationTemplateId: setVerificationTemplatePayload.verificationTemplateId, + }, + }); + + this.logger.debug(`Updated template with ID ${templateId}: ${JSON.stringify(updatedTemplate)}`); + + return updatedTemplate; + } catch (error) { + this.logger.error( + `Error setting verification template for template ID ${templateId}: ${error.message}`, + error.stack, + ); + throw error; + } + } +} diff --git a/src/text.html b/src/text.html deleted file mode 100644 index e69de29..0000000 diff --git a/templates/C4GT.png b/templates/C4GT.png deleted file mode 100644 index 3628766..0000000 Binary files a/templates/C4GT.png and /dev/null differ diff --git a/templates/DPGA.svg b/templates/DPGA.svg deleted file mode 100644 index a020ad7..0000000 --- a/templates/DPGA.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/templates/GitHub.png b/templates/GitHub.png deleted file mode 100644 index 8356e01..0000000 Binary files a/templates/GitHub.png and /dev/null differ diff --git a/templates/GitHub_logo.png b/templates/GitHub_logo.png deleted file mode 100644 index 44f6b12..0000000 Binary files a/templates/GitHub_logo.png and /dev/null differ diff --git a/templates/GitHub_logo.svg b/templates/GitHub_logo.svg deleted file mode 100644 index 14a0053..0000000 --- a/templates/GitHub_logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/templates/OMI.png b/templates/OMI.png deleted file mode 100644 index 5d2646e..0000000 Binary files a/templates/OMI.png and /dev/null differ diff --git a/templates/Participation Certificate Email .zip b/templates/Participation Certificate Email .zip deleted file mode 100644 index 6dd1b6a..0000000 Binary files a/templates/Participation Certificate Email .zip and /dev/null differ diff --git a/templates/SamagraX - 1.png b/templates/SamagraX - 1.png deleted file mode 100644 index 48ea4bf..0000000 Binary files a/templates/SamagraX - 1.png and /dev/null differ diff --git a/templates/SamagraX.svg b/templates/SamagraX.svg deleted file mode 100644 index ed0bf03..0000000 --- a/templates/SamagraX.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/templates/Samagrax.png b/templates/Samagrax.png deleted file mode 100644 index 18f4dea..0000000 Binary files a/templates/Samagrax.png and /dev/null differ diff --git a/templates/border.png b/templates/border.png deleted file mode 100644 index a8098e0..0000000 Binary files a/templates/border.png and /dev/null differ diff --git a/templates/border2.png b/templates/border2.png deleted file mode 100644 index a062200..0000000 Binary files a/templates/border2.png and /dev/null differ diff --git a/templates/bottom_background.png b/templates/bottom_background.png deleted file mode 100644 index 2cd3499..0000000 Binary files a/templates/bottom_background.png and /dev/null differ diff --git a/templates/email.html b/templates/email.html deleted file mode 100644 index 70de2be..0000000 --- a/templates/email.html +++ /dev/null @@ -1,828 +0,0 @@ - - - - - - -

Dear Participant,

-

- We hope you are well. We greatly appreciate the hard work you put into - creating your proposal(s). Unfortunately, your submission(s) was not - shortlisted for C4GT 2023. Please find a participation certificate - attached to this email as a token of our appreciation -

-

- If you still wish to learn, build your skillset & create impact, - then don’t worry, we have something exciting to offer. -

-

- We have launched the C4GT Community Program bringing all highly skilled coders like you under one roof. -

-

- What is the C4GT Community Program? -

-

- The C4GT community program aims to build a vibrant open-source - community in the DPG ecosystem where all enthusiastic coders will get - the opportunity to upskill & solve a multitude of varied problem - statements by DPG organisations. -

-

- We already have over 100+ projects across domains & skills for you - to explore. -

-

- How can you participate? -

-
    -
  • - Explore Projects  - Explore projects as per your skills, interest in the domain - & more. - -
  • -
  • - Get Coding - Interact with mentors for clarity if required & solve the - project -
  • -
  • - Points & Rewards - On each PR that gets merged/reviewed you accumulate points. Also - stand a chance to win exciting goodies, bragging rights and community - privileges!! -
  • -
-

-

- For more details on the Community Program please refer the following - links: -

- -

- We look forward to all of you participating actively in the C4GT - Community Program! -

-

- Warm Regards,
C4GT Organising Team
-

-

-

-

-

-

- - diff --git a/templates/email_old.html b/templates/email_old.html deleted file mode 100644 index 70f2b79..0000000 --- a/templates/email_old.html +++ /dev/null @@ -1 +0,0 @@ -

Subject: Thank you for applying to C4GT 2023!

Dear Participant,

We hope you are well. We greatly appreciate the hard work you put into creating your proposal(s). Unfortunately, your submission(s) was not shortlisted for C4GT 2023. Please find a participation certificate attached to this email as a token of our appreciation

If you still wish to learn, build your skillset & create impact, then don’t worry, we have something exciting to offer.

We have launched the C4GT Community Program bringing all highly skilled coders like you under one roof.

What is the C4GT Community Program?

The C4GT community program aims to build a vibrant open-source community in the DPG ecosystem where all enthusiastic coders will get the opportunity to upskill & solve a multitude of varied problem statements by DPG organisations.

 We already have over 100+ projects across domains & skills for you to explore.

How can you participate?

  • Explore Projects  - Explore projects as per your skills, interest in the domain & more.
  • Get Coding - Interact with mentors for clarity if required & solve the project
  • Points & Rewards - On each PR that gets merged/reviewed you accumulate points. Also stand a chance to win exciting goodies, bragging rights and community privileges!!

For more details on the Community Program please refer the following links:

We look forward to all of you participating actively in the C4GT Community Program!

Warm Regards,
C4GT Organising Team

We already have over 100+ projects across domains & skills for you to explore Why should you participate? By joining our community you get to build skills, create real impact and contribute to awesome projects.  You will also connect with like-minded coders and grow your network.  

How can you participate?

  • Explore Tickets: Browse the Tickets on the C4GT website and find the ones that match your interests.
  • Interact & Engage: Contact the mentors of the projects and start working on them.
  • Contribute to the ticket: Submit a good-quality PR that meets the requirements.
  • Add value to the community: Share your contributions and learnings with the community through blogs, posts and more.
  • Win Big: On each PR that gets merged/reviewed you accumulate points. Also stand a chance to win exciting goodies, bragging rights and community privileges!!

What are you waiting for? Join the C4GT community program today and start your journey as a DPG contributor.  To read more about the program explore:

The C4GT community program gives you a chance to be part of an ecosystem of Digital Public Goods (DPGs) where you can work with awesome DPG organizations and support them with their engineering, product and design challenges while connecting with a lively community of contributors.[a]

You can join this community by hopping on our discord server by clicking on the following link:

http://bit.ly/-C4GT

To read more about the Community Program explore:

C4GT Community Program GitHub Wiki - https://bit.ly/C4GTCommunityProgramGitHub

Community Program Projects - https://www.codeforgovtech.in/community-projects

What is in it for you?

This is an awesome chance for you to connect with other like-minded people, learn new skills and best of all WIN BIG!!! Stand a chance to win exciting goodies bragging rights and community privileges on each PR that gets merged/reviewed!

We hope that you will grab this opportunity and join us in building a fun and diverse community of changemakers. We can’t wait to see you join us! We wish you all the best for your future projects.

Cheers,

The C4GT 2023 Team

[b]

[a]this has to be changed as per the announcement message I sent on the discord channel.

[b]To be changed,

\ No newline at end of file diff --git a/templates/final (1).html b/templates/final (1).html deleted file mode 100644 index a8ba6b4..0000000 --- a/templates/final (1).html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/final.html b/templates/final.html deleted file mode 100644 index 2a8c40f..0000000 --- a/templates/final.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - - - -
-
-
- QR Code -
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/final_2.html b/templates/final_2.html deleted file mode 100644 index 13b285d..0000000 --- a/templates/final_2.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/final_newold.html b/templates/final_newold.html deleted file mode 100644 index 4e8f742..0000000 --- a/templates/final_newold.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - Certificate - - - - - - - -
-
-
- QR Code -
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/final_old.html b/templates/final_old.html deleted file mode 100644 index 3cabaef..0000000 --- a/templates/final_old.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/final_tobeused.html b/templates/final_tobeused.html deleted file mode 100644 index bb166d0..0000000 --- a/templates/final_tobeused.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - Certificate - - - - - - - -
-
-
- QR Code -
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/handlebar_certi.html b/templates/handlebar_certi.html deleted file mode 100644 index e12b835..0000000 --- a/templates/handlebar_certi.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - -
-
-
-
-

CERTIFICATE OF PARTICIPATION

-

This is to certify that

-
- -
-

{{name}}

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/inaug.html b/templates/inaug.html deleted file mode 100644 index 55a369a..0000000 --- a/templates/inaug.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - -
-
-
-
-
- -
- -
-

- This is to certify that -

-

- - Code for GovTech 2023 - -

-
- -
- -
-

- has been successfully closed on 7th September 2023 by -

-

- Rahul Kulkarni
Nitin Kashyap
- Sukhpreet Sekhon -

-
-
-
- -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/inaug_verified.html b/templates/inaug_verified.html deleted file mode 100644 index 72d9101..0000000 --- a/templates/inaug_verified.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - -
-
-
-
-
- -
- -
-

- This is to certify that -

-

- - Code for GovTech 2023 - -

-
- -
- -
-

- has been successfully closed on 7th September 2023 by -

-

- Rahul Kulkarni
Nitin Kashyap
- Sukhpreet Sekhon -

-
-
-
- -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/omidyar-network-india-logo.png b/templates/omidyar-network-india-logo.png deleted file mode 100644 index cd2cc41..0000000 Binary files a/templates/omidyar-network-india-logo.png and /dev/null differ diff --git a/templates/omn.svg b/templates/omn.svg deleted file mode 100644 index 05e8135..0000000 --- a/templates/omn.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/templates/top_background.png b/templates/top_background.png deleted file mode 100644 index da4e8e9..0000000 Binary files a/templates/top_background.png and /dev/null differ diff --git a/templates/verified-badge.html b/templates/verified-badge.html deleted file mode 100644 index 1bce098..0000000 --- a/templates/verified-badge.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - -
-
-
-
- Badge -
-

- CERTIFICATE OF ACHIEVEMENT -

-

This is to certify that

-
- -
-

- - @{{username}} -

-
-

- has been awarded the {{badge}} for their active contribution to - Digital Public -

-
-

- Goods as part of the C4GT Community -

-
-
-
- - QR Code -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/verified.html b/templates/verified.html deleted file mode 100644 index 5ccb97b..0000000 --- a/templates/verified.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - Certificate - - - - - - - -
-
-
- QR Code -
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/verifiedBg.png b/templates/verifiedBg.png deleted file mode 100644 index 57917e2..0000000 Binary files a/templates/verifiedBg.png and /dev/null differ diff --git a/templates/verifiedBg2.png b/templates/verifiedBg2.png deleted file mode 100644 index 8afe004..0000000 Binary files a/templates/verifiedBg2.png and /dev/null differ diff --git a/templates/verified_old.html b/templates/verified_old.html deleted file mode 100644 index 579e6e4..0000000 --- a/templates/verified_old.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - Certificate - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
-
Issued by the C4GT Organising Team
-
- - diff --git a/templates/verified_wasused.html b/templates/verified_wasused.html deleted file mode 100644 index 54614fc..0000000 --- a/templates/verified_wasused.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - Certificate - - - - - - - -
-
-
-
-

- CERTIFICATE OF PARTICIPATION -

-

This is to certify that

-
- -
-

- {{name}} -

-
-

- successfully submitted a proposal for the -

-
-

- Code For GovTech Mentoring Program 2023. -

-
-
- QR Code - -
-
- -
- - diff --git a/test.pdf b/test.pdf deleted file mode 100644 index 9af8495..0000000 Binary files a/test.pdf and /dev/null differ diff --git a/yarn.lock b/yarn.lock index 6ee2a46..86f03b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -673,6 +673,11 @@ resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe" integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== +"@microsoft/tsdoc@^0.15.0": + version "0.15.1" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz#d4f6937353bc4568292654efb0a0e0532adbcba2" + integrity sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw== + "@nestjs-modules/mailer@^1.8.1": version "1.8.1" resolved "https://registry.yarnpkg.com/@nestjs-modules/mailer/-/mailer-1.8.1.tgz#cb4cfbf3bbf1cfe325122b7be1c3a772ba08e478" @@ -753,6 +758,11 @@ path-to-regexp "3.2.0" tslib "2.5.3" +"@nestjs/mapped-types@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-2.0.6.tgz#d2d8523709fd5d872a9b9e0c38162746e2a7f44e" + integrity sha512-84ze+CPfp1OWdpRi1/lOu59hOhTz38eVzJvRKrg9ykRFwDz+XleKfMsG0gUqNZYFa6v53XYzeD+xItt8uDW7NQ== + "@nestjs/platform-express@^9.0.0": version "9.4.3" resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-9.4.3.tgz#f61b75686bdfce566be3b54fa7bb20a4d87ed619" @@ -774,6 +784,18 @@ jsonc-parser "3.2.0" pluralize "8.0.0" +"@nestjs/swagger@^8.0.7": + version "8.0.7" + resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-8.0.7.tgz#7347fcd919a413a001838732f1b1966ad19df094" + integrity sha512-zaTMCEZ/CxX7QYF110nTqJsn7eCXp4VI9kv7+AdUcIlBmhhgJpggBw2Mx2p6xVjyz1EoWXGfxxWKnxEyaQwFlg== + dependencies: + "@microsoft/tsdoc" "^0.15.0" + "@nestjs/mapped-types" "2.0.6" + js-yaml "4.1.0" + lodash "4.17.21" + path-to-regexp "3.3.0" + swagger-ui-dist "5.18.2" + "@nestjs/testing@^9.0.0": version "9.4.3" resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-9.4.3.tgz#53ffbabdd38f500b145c30f2fbb76dedad393d79" @@ -811,6 +833,47 @@ consola "^2.15.0" node-fetch "^2.6.1" +"@prisma/client@5.22.0": + version "5.22.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.22.0.tgz#da1ca9c133fbefe89e0da781c75e1c59da5f8802" + integrity sha512-M0SVXfyHnQREBKxCgyo7sffrKttwE6R8PMq330MIUF0pTwjUhLbW84pFDlf06B27XyCR++VtjugEnIHdr07SVA== + +"@prisma/debug@5.22.0": + version "5.22.0" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.22.0.tgz#58af56ed7f6f313df9fb1042b6224d3174bbf412" + integrity sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ== + +"@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2": + version "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2.tgz#d534dd7235c1ba5a23bacd5b92cc0ca3894c28f4" + integrity sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ== + +"@prisma/engines@5.22.0": + version "5.22.0" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.22.0.tgz#28f3f52a2812c990a8b66eb93a0987816a5b6d84" + integrity sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA== + dependencies: + "@prisma/debug" "5.22.0" + "@prisma/engines-version" "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2" + "@prisma/fetch-engine" "5.22.0" + "@prisma/get-platform" "5.22.0" + +"@prisma/fetch-engine@5.22.0": + version "5.22.0" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.22.0.tgz#4fb691b483a450c5548aac2f837b267dd50ef52e" + integrity sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA== + dependencies: + "@prisma/debug" "5.22.0" + "@prisma/engines-version" "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2" + "@prisma/get-platform" "5.22.0" + +"@prisma/get-platform@5.22.0": + version "5.22.0" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.22.0.tgz#fc675bc9d12614ca2dade0506c9c4a77e7dddacd" + integrity sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q== + dependencies: + "@prisma/debug" "5.22.0" + "@puppeteer/browsers@1.4.2": version "1.4.2" resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.4.2.tgz#c6efa2e664369a2e9e930105cb450fcc71237889" @@ -824,6 +887,11 @@ unbzip2-stream "1.4.3" yargs "17.7.1" +"@scarf/scarf@=1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.4.0.tgz#3bbb984085dbd6d982494538b523be1ce6562972" + integrity sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ== + "@selderee/plugin-htmlparser2@^0.10.0": version "0.10.0" resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.10.0.tgz#8a304d18df907e086f3cfc71ea0ced52d6524430" @@ -989,11 +1057,6 @@ dependencies: handlebars "*" -"@types/isomorphic-fetch@0.0.35": - version "0.0.35" - resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz#c1c0d402daac324582b6186b91f8905340ea3361" - integrity sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -1026,18 +1089,6 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== -"@types/jsonwebtoken@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#4db9bfaf276ef4fdc3608194fab8b8f2fd1c44f9" - integrity sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg== - dependencies: - "@types/node" "*" - -"@types/jssha@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/jssha/-/jssha-2.0.0.tgz#15027ef6480c4d2c8c42762e227b23b34276e68f" - integrity sha512-oBnY3csYnXfqZXDRBJwP1nDDJCW/+VMJ88UHT4DCy0deSXpJIQvMCwYlnmdW4M+u7PiSfQc44LmiFcUbJ8hLEw== - "@types/mime@*": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" @@ -1072,13 +1123,6 @@ dependencies: "@types/node" "*" -"@types/opossum@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@types/opossum/-/opossum-4.1.1.tgz#8aba5c5c7dcca537234d1c890043859d72c290f7" - integrity sha512-9TMnd8AWRVtnZMqBbbzceQoJdafErgUViogFaQ3eetsbeLtiFFZ695mepNaLtlfJi4uRP3GmHfe3CJ2DZKaxYA== - dependencies: - "@types/node" "*" - "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1125,13 +1169,6 @@ "@types/mime" "*" "@types/node" "*" -"@types/sshpk@1.10.3": - version "1.10.3" - resolved "https://registry.yarnpkg.com/@types/sshpk/-/sshpk-1.10.3.tgz#265b2d13f95225e20abffa17719fca9756c8e56a" - integrity sha512-cru1waDhHZnZuB18E6Dgf2UXf8U93mdOEDcKYe5jTri+fpucidSs7DLmGICpLxN+95aYkwtgeyny9fBFzQVdmA== - dependencies: - "@types/node" "*" - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -1551,11 +1588,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -arrify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - asap@^2.0.0, asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1571,23 +1603,11 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - assert-never@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - ast-types@^0.13.2: version "0.13.4" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" @@ -1610,11 +1630,6 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -await-semaphore@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/await-semaphore/-/await-semaphore-0.1.3.tgz#2b88018cc8c28e06167ae1cdff02504f1f9688d3" - integrity sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q== - axios@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" @@ -1701,7 +1716,15 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.0, base64-js@^1.3.1: +barhandles@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/barhandles/-/barhandles-0.5.4.tgz#c8e1503611fd6a398033ece0d0e0ac8fe3104161" + integrity sha512-Z6cqct9HFsShlkv1hLMJH62T3Jqwbza3Uie/mC6AlwNpGOd3H0ENKXKXqX0O7uSr1seQskZ7KNFy1P/V8ymREQ== + dependencies: + handlebars ">=3.0.3" + lodash "^4.17.11" + +base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -1723,18 +1746,6 @@ batch@^0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bignumber.js@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1756,11 +1767,6 @@ block-stream2@^2.0.0, block-stream2@^2.1.0: dependencies: readable-stream "^3.4.0" -bluebird@^3.5.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -2301,11 +2307,6 @@ cookiejar@^2.1.4: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -2437,22 +2438,6 @@ cssom@^0.5.0: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== -csvtojson@^2.0.10: - version "2.0.10" - resolved "https://registry.yarnpkg.com/csvtojson/-/csvtojson-2.0.10.tgz#11e7242cc630da54efce7958a45f443210357574" - integrity sha512-lUWFxGKyhraKCW8Qghz6Z0f2l/PqB1W3AO0HKJzGIQ5JRSlR651ekJDiGJbBT4sRNNv5ddnSGVEnsxP9XRCVpQ== - dependencies: - bluebird "^3.5.1" - lodash "^4.17.3" - strip-bom "^2.0.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - data-uri-to-buffer@3: version "3.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" @@ -2700,15 +2685,7 @@ dotenv@16.1.4: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.1.4.tgz#67ac1a10cd9c25f5ba604e4e08bc77c0ebe0ca8c" integrity sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: +ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== @@ -2822,11 +2799,6 @@ es6-error@^4.1.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -es6-promise@4.2.6: - version "4.2.6" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" - integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -3091,11 +3063,6 @@ express@4.18.2: utils-merge "1.0.1" vary "~1.1.2" -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -3126,16 +3093,6 @@ extract-zip@2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3177,11 +3134,6 @@ fast-safe-stringify@2.1.1, fast-safe-stringify@^2.1.1: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== -fast-text-encoding@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" - integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== - fast-xml-parser@^3.17.5: version "3.21.1" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz#152a1d51d445380f7046b304672dd55d15c9e736" @@ -3403,6 +3355,11 @@ fs@0.0.1-security: resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4" integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w== +fsevents@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -3421,24 +3378,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gaxios@^5.0.0, gaxios@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.0.tgz#133b77b45532be71eec72012b7e97c2320b6140a" - integrity sha512-aezGIjb+/VfsJtIcHGcBSerNEDdfdHeMros+RbYbGpmonKWQCOVOes0LVZhn1lDtIgq55qq0HaxymIoae3Fl/A== - dependencies: - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.6.7" - -gcp-metadata@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.2.0.tgz#b4772e9c5976241f5d3e69c4f446c906d25506ec" - integrity sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw== - dependencies: - gaxios "^5.0.0" - json-bigint "^1.0.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3498,13 +3437,6 @@ get-uri@^6.0.1: debug "^4.3.4" fs-extra "^8.1.0" -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -3592,48 +3524,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -google-auth-library@^8.0.2: - version "8.8.0" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.8.0.tgz#2e17494431cef56b571420d483a4debff6c481cd" - integrity sha512-0iJn7IDqObDG5Tu9Tn2WemmJ31ksEa96IyK0J0OZCpTh6CrC6FrattwKX87h3qKVuprCJpdOGKc1Xi8V0kMh8Q== - dependencies: - arrify "^2.0.0" - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - fast-text-encoding "^1.0.0" - gaxios "^5.0.0" - gcp-metadata "^5.2.0" - gtoken "^6.1.0" - jws "^4.0.0" - lru-cache "^6.0.0" - -google-p12-pem@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" - integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== - dependencies: - node-forge "^1.3.1" - -googleapis-common@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-6.0.4.tgz#bd968bef2a478bcd3db51b27655502a11eaf8bf4" - integrity sha512-m4ErxGE8unR1z0VajT6AYk3s6a9gIMM6EkDZfkPnES8joeOlEtFEJeF8IyZkb0tjPXkktUfYrE4b3Li1DNyOwA== - dependencies: - extend "^3.0.2" - gaxios "^5.0.1" - google-auth-library "^8.0.2" - qs "^6.7.0" - url-template "^2.0.8" - uuid "^9.0.0" - -googleapis@^118.0.0: - version "118.0.0" - resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-118.0.0.tgz#a8b9f84d283544b85927abeb989252cb2f3ec490" - integrity sha512-Ny6zJOGn5P/YDT6GQbJU6K0lSzEu4Yuxnsn45ZgBIeSQ1RM0FolEjUToLXquZd89DU9wUfqA5XYHPEctk1TFWg== - dependencies: - google-auth-library "^8.0.2" - googleapis-common "^6.0.0" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -3656,15 +3546,6 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -gtoken@^6.1.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" - integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== - dependencies: - gaxios "^5.0.1" - google-p12-pem "^4.0.0" - jws "^4.0.0" - handlebars@*, handlebars@^4.7.6, handlebars@^4.7.7: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" @@ -3677,6 +3558,18 @@ handlebars@*, handlebars@^4.7.6, handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" +handlebars@>=3.0.3: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3831,15 +3724,6 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" -http-signature@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.1.tgz#739fe2f8897ba84798e3e54b699a9008a8724ff9" - integrity sha512-Y29YKEc8MQsjch/VzkUVJ+2MXd9WcR42fK5u36CZf4G8bXw2DXMTWuESiB0R6m59JAWxlPPw5/Fri/t/AyyueA== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.14.1" - https-proxy-agent@5, https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -4116,11 +4000,6 @@ is-regex@^1.0.3: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -4142,11 +4021,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - is-wsl@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -4169,14 +4043,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isomorphic-fetch@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -4621,6 +4487,13 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -4629,30 +4502,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -4668,11 +4522,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -4709,7 +4558,7 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@9.0.0, jsonwebtoken@^9.0.0: +jsonwebtoken@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== @@ -4719,21 +4568,6 @@ jsonwebtoken@9.0.0, jsonwebtoken@^9.0.0: ms "^2.1.1" semver "^7.3.8" -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jssha@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jssha/-/jssha-2.4.1.tgz#bad7cab6a2d4df5cff5c48c452427b86630914ff" - integrity sha512-77DN1YurYgh+7FPCTJ2CQ6hVDHgIWiHxm4Y5/mAdnpETKYagX22pVWMz4xfKF5fcpNfMaztgVj+/B1bt2k23Eg== - jstransformer@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" @@ -4762,15 +4596,6 @@ jwa@^1.4.1: ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - jws@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" @@ -4779,14 +4604,6 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -4897,7 +4714,7 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.3: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5631,18 +5448,13 @@ node-emoji@1.11.0: dependencies: lodash "^4.17.21" -node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.11, node-fetch@^2.6.7: +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.11: version "2.6.11" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== dependencies: whatwg-url "^5.0.0" -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -5699,1158 +5511,6 @@ object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -oci-accessgovernancecp@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-accessgovernancecp/-/oci-accessgovernancecp-2.62.3.tgz#26cb7017bbafa414a8de83a82e3e67f176cf9eb4" - integrity sha512-QD0YZijAewGQRgJLClF8ct5a0sm7Kzr5yZaIuP+HGH4lffi8vXjOggX/l6VF52/fi3owoCZXketp9BF5xxAg4w== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-adm@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-adm/-/oci-adm-2.62.3.tgz#8ab66337eda567d9219ee8db763d9f574824ff3b" - integrity sha512-ZOpyDQrm0Bn30lxHtT/EcgCcrLSt37ZSpe7Gb1zf7mU5NqgBkzgVn+ub9FdR0FL8VC3sKz2bclKFHdjAogM9BA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-aianomalydetection@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-aianomalydetection/-/oci-aianomalydetection-2.62.3.tgz#354b2ecbd121f43cc3eef8d2462e59d1bc31ad57" - integrity sha512-FEGb2bCYjVENEtgr0yHL2AJE7oV06ZX0QXGGiwTiWsdkvMOBSRQCvUTj7rG9UY7nVl4I9AmF9wqObrh5VUPSxg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-aidocument@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-aidocument/-/oci-aidocument-2.62.3.tgz#6bbe5d209b8180747e2f2b7d382e348fc562742f" - integrity sha512-x2ENDkKcAf80KluQq45ZzhgmusfrbOhnz1/xdsmcBZfE1h5wZ0RbqsPc+BrKCnKwwCcVlI2eInMF+mi9vqabXw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-ailanguage@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-ailanguage/-/oci-ailanguage-2.62.3.tgz#3c542fb741c9bccf74a5e15de46699508acfa4a0" - integrity sha512-cWHlu2Jv7m6kjCp94hUmKFWiISrInl39CKl3ZtmRRD/j+fj3odQ30I5cKcQtE8zkhS4x6VAYJE5fM/Lnm4ghBQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-aispeech@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-aispeech/-/oci-aispeech-2.62.3.tgz#b4bae473ae25b0e751f0e797d57919bc593d11e8" - integrity sha512-MnCzjH8f/Jj+vlk6BIzNOxm0xmu0PIaV4ODVQrFzUFDKrj9GPgyeWOF7Yaal+d37DOOCGgPxfru2RgCeGZLu3Q== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-aivision@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-aivision/-/oci-aivision-2.62.3.tgz#b8055291a159eb9c44ed3e56a42ba1a7abef71e4" - integrity sha512-HrN6znk5gSQkgKB5NZBLv00xiWxJumlYJKfYLJk2DmJ/PjC4RIxY8L0B7nAYhqwJSRgVlqQOkwoK31/83lIspA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-analytics@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-analytics/-/oci-analytics-2.62.3.tgz#b72eba3cf011364a90ca0531978feec3eaa4577e" - integrity sha512-vqQ41K+Kw+tpAEL6JsCstiVXgdJZWMKz6tXmE37HZ0rw9OMmbkr6U15mDZa0m244QvGLCAlgze78jorikI/qRQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-announcementsservice@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-announcementsservice/-/oci-announcementsservice-2.62.3.tgz#38f6ed1f7a1ecc4821c0bee440ae58e5d72f3a88" - integrity sha512-YvEAp0JRR+a+0YUXwMajZ81dLA+DZI3KmNO1nRWbBZUn86Fo8PI9zO7gxkDN2tjVvlGdCgnYz/TonfZ3C5+5gg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-apigateway@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-apigateway/-/oci-apigateway-2.62.3.tgz#7da36926995031724df88c32d6e8a426811173f5" - integrity sha512-8+yGGB6PUtsaCmA0OaWdzuoMifdh4LhHTvfcjVpPy74H4daYorXp9ZdAB7afhVAmROUMl+1Z5fJnDI21Iew0TQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-apmconfig@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-apmconfig/-/oci-apmconfig-2.62.3.tgz#1ccfb258f56912c8f1956ac2bac3693c21107dc2" - integrity sha512-uGJ6xfG1raSbc2F5So/RMzRMKtT3jfxeQA0i/7l54gNse3NotZNoy5lAcjUUSRfpkjSdRXaPkjOewhDuu7nNdQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-apmcontrolplane@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-apmcontrolplane/-/oci-apmcontrolplane-2.62.3.tgz#bb45a102913ef34d01a1f43eff64f2086d788bb1" - integrity sha512-eVrdEYkjDD51vgdegbeHxEuQi+FYDWPirBiprV836hOr6p6iz3wZzbXTydULY3OvC/10ZbjRIyQaStKk+n1J3g== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-apmsynthetics@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-apmsynthetics/-/oci-apmsynthetics-2.62.3.tgz#c0a32cb739d9e7d2997619e414f3c5b0ca555967" - integrity sha512-umlamTMYqvSdR3TGaP1wwTKC6hiSVxcebWrG1LDXguG1V2eB7TecHDWybe8u96qRRCNUjh5xEQCF+8ZDUN177A== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-apmtraces@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-apmtraces/-/oci-apmtraces-2.62.3.tgz#cb7e21c83f1e88c2f020c1e3eb5b850453495b25" - integrity sha512-A3xFFJXDYcN12xW441eWJDhzLrFroN4CibVus6TJ0QyGQiRcgU1XVAFnawraHtysCvydeodPk32nMsUNiuk6/A== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-applicationmigration@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-applicationmigration/-/oci-applicationmigration-2.62.3.tgz#a5ce2afdaede5e97d713439742983e881a12f79c" - integrity sha512-uVGiMMo/LPQMpMFrxQAWojupX2Zxq2oT0ivIf13IppU/QhRkfX6z+9i7NNFX2PCn4fA9LcwDQJFEcOmRGS499w== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-appmgmtcontrol@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-appmgmtcontrol/-/oci-appmgmtcontrol-2.62.3.tgz#c9456e11c5bfc3448771eb2844a4b5b965601c65" - integrity sha512-43CbsBhzyRleTet5mEKt+mh97CcC8E+zPiKZkMJvo0SCRotNQG9J0s+7382IyLLt8z8O8Q9uimMBIQksloB77g== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-artifacts@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-artifacts/-/oci-artifacts-2.62.3.tgz#43a5109427b61a1b888ec586033bd8b995cdd869" - integrity sha512-H8gp2Z6Dc6r/NdXhUUpJ40gGWn7a1Xlj1aF/bQaio0fBbiBRilS1cvWQFXSlNCq2U2S9a8FIpNKi+G0oY6KXsA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-audit@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-audit/-/oci-audit-2.62.3.tgz#8a149fd7fb4d080022d42d92a8be828922de4b4a" - integrity sha512-asjiTPVN+sOq7QpS3xdDOfQkHqQGp6iXDABTBC4q4wnSW64C2FW9rdFIIclDpWiCu9byU2UEfNmZ7nFEvmg4dQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-autoscaling@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-autoscaling/-/oci-autoscaling-2.62.3.tgz#8d235e031dce1009cb2684dcdbbc08e7e3c08101" - integrity sha512-25j+0uF//h5l/tTu7YSTbl70z4beogZJQTHeuq8TRdy+X4MNd8tWxGDWKn8L0kDoUZiBjHqaxiC2xuRoj/CKQQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-bastion@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-bastion/-/oci-bastion-2.62.3.tgz#1883a1bed8132db024da8a28bec631787822c51f" - integrity sha512-O8vaW7J1P66WQNWt0G0El3PQ2MSYAQETEm0BTvITTzm6Hkyo/YfIYptmRH2g74zM78AjPFoHk0kz5w9xmWeHMw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-bds@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-bds/-/oci-bds-2.62.3.tgz#98a2828051fa57e1e904ea237964024cc5cbcb53" - integrity sha512-W/4tuvVg6wHZNeqg5dr4pc3aADwBSffKgEo6VhxuQZekAg867EQzVo6ldr+xZ71qTLgxp/8UOB7Qyc9IoPmT9A== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-blockchain@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-blockchain/-/oci-blockchain-2.62.3.tgz#29e47a1013ffc4d8037ee2e1014da405c0164011" - integrity sha512-9xFimU9/dk+sjjhHNBJRrnkav8f2sUr/Ki4JceQf4IDIMemaBPgu5B9PwbbaCrNl4zdXgvNJ6ridAqcnEzHUJw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-budget@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-budget/-/oci-budget-2.62.3.tgz#04e2553fe2cc3554e29dc97182e047e0c889f1cd" - integrity sha512-ui//qI7RVGp0c51ik2XALq8lzXPSfA+CqxfOAebdoVYAlJJ2v/IJwtl1NkPTOEHEUku7PN6NWlHYF1vX/luXYg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-certificates@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-certificates/-/oci-certificates-2.62.3.tgz#12630f51d6ea8cb4bf4d3ea6b8784fbf1eecb004" - integrity sha512-xzuc0sv9XCmW2l2buvtxPiKsBX/uvSuwVDJQ1YIOeTG19yu/Ey0t1O6rqs4we6qRppKrSL33cWB3iKVyvN1Vvw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-certificatesmanagement@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-certificatesmanagement/-/oci-certificatesmanagement-2.62.3.tgz#4899a5ed9e6772cbb26b90a073bc6ccd9c3f463f" - integrity sha512-VSW6lbZW31BkWQaSgyHK5MN6LsGDMOFJLekVfIqmHJOcPVSQ4slmxN7DBGfCrmfIT2hdz+p0jLakVS70iPmDWQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-cims@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-cims/-/oci-cims-2.62.3.tgz#37b5659578ffe5edef8393b2f1c146d93579d49c" - integrity sha512-tSjXswmmKeCADNgJHA0nlUSyBTWQOCz+C9NsKfGWFkpqaHQNae9Grevt2HYZWGYM/vO+7yg3FKB3G5CxKMwnbA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-cloudbridge@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-cloudbridge/-/oci-cloudbridge-2.62.3.tgz#c358a158af02b1e237305324dda8565112c1d75a" - integrity sha512-xmDZ/zToYNeU756fFL0P0R3z2v5BPM1QcgZEOCLB49iHiELjFPuW9qFBecwsbS1+nz3+gZOLjkNSmKvj6yYNdg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-cloudguard@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-cloudguard/-/oci-cloudguard-2.62.3.tgz#5259f7b44afc06d2c39ce288bfffa56a7a583343" - integrity sha512-+SfoSkRI1blTueNTtksxyXn+q8IpPiKGE37zmCBzW0qLFddD8JGcoEeqpSBoNiiUNUL6vdJgAOhXaB0Tvua8tg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-cloudmigrations@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-cloudmigrations/-/oci-cloudmigrations-2.62.3.tgz#1cd3a726d1848a17cbdb61d83af4aedde655aed4" - integrity sha512-9jh5wQPDD/BDalflJSNsCfICZOl8fup5AnAXJbTkFrLnnCUMeGQe8DhpTudJWXWXnhuP+m0Orhm+cAJOu/mz8A== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-common@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-common/-/oci-common-2.62.3.tgz#7d9eb22a2fd44abe5d2cadf9394944ff59472d69" - integrity sha512-8Mw0040uANdyQBrzihFrTCCh0qqWDFbVX8GFi4BnBD1owh2Y5pEzfybT/IGKPyn0giBq2pT0I3mDdw1k68FZJg== - dependencies: - "@types/isomorphic-fetch" "0.0.35" - "@types/jsonwebtoken" "9.0.0" - "@types/jssha" "2.0.0" - "@types/opossum" "4.1.1" - "@types/sshpk" "1.10.3" - es6-promise "4.2.6" - http-signature "1.3.1" - isomorphic-fetch "3.0.0" - jsonwebtoken "9.0.0" - jssha "2.4.1" - opossum "5.0.1" - sshpk "1.16.1" - uuid "3.3.3" - -oci-computeinstanceagent@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-computeinstanceagent/-/oci-computeinstanceagent-2.62.3.tgz#4534f5830de21bb5ab7fc9a334228461b7f8f1e4" - integrity sha512-okREWmTpZcifoaKNkm/sJhhU0TuRXXBTtOsTTkKb1lnISrybjXjfivE76LbDgx7T6a5F+fzO5I9qra42V5OzdA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-containerengine@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-containerengine/-/oci-containerengine-2.62.3.tgz#578e546620a552f2daa334abfc8d71943aa835be" - integrity sha512-tYYGeP7Az3QXCZuNBZKB+aMD82aV/oJJKPxC4LCzoYZCZjQKm8izwUYs+Zxt1A/1ibErCS4EeEya1LvxCxruqQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-containerinstances@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-containerinstances/-/oci-containerinstances-2.62.3.tgz#188c11ebb88a0712ff66ff0952be1e8b5c8cbd94" - integrity sha512-fN6nSKQEHN1+Ez4DaropNsjqFe9+zaTwsuDJlw+qqT48tdN1GklYDon5pnfa52t7yUumveeucR59UDRnsKZ6Vg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-core@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-core/-/oci-core-2.62.3.tgz#2c92c9432015de47afe9fbe8d84918c602a14af9" - integrity sha512-avMd7lt53qTu6T9P8i+pIG/EMwYICUwMb3GroG8IUkzseSo+NtFqDx2VVZbEfaGUU+2AX8uEYbk0jJuG9MAniw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-dashboardservice@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-dashboardservice/-/oci-dashboardservice-2.62.3.tgz#95d9a9e0a9e42acf961d37856a274dd4e6a88b84" - integrity sha512-mmLZewNNCFSzpsEwCRKPX1UXezbI9uTEsx0cpnyu/XqKlO2HdMN/JeUe8in2WeVyu1zPdhibCIuE41dgcxADxA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-database@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-database/-/oci-database-2.62.3.tgz#81f22dfc394989188306cef0d360f339baf83eae" - integrity sha512-+VE+FTswc6B+VUustUaaxjB2q0Hf/epaNLWgQPVxJ5Jd3G9NiOgH2n68nS9BkWwqo3j5MLKhqvXa0bgJJFJTxQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-databasemanagement@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-databasemanagement/-/oci-databasemanagement-2.62.3.tgz#eee7c32e0bdf94e4a3f4ac8de49a6395b461ff7d" - integrity sha512-N0gCmjl/QyRoK6TmPC+diuiu+fmj99mmkZ0nU9oa3VbiSQX548VDy8pwEPuYbB0cFLxGbMkUuWRckD9SGzVWow== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-databasemigration@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-databasemigration/-/oci-databasemigration-2.62.3.tgz#ee118a5c43f77ab1aebf46d5cfaf62fd8515f458" - integrity sha512-HagB07y0/3OBWXbd/cLxgg4fXqCS8LHflxK2VYcJ7McFCMn4iojdRIns7/Nm2bZkYhSTyVXIAspVOd+o4HEu8Q== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-databasetools@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-databasetools/-/oci-databasetools-2.62.3.tgz#b6e124aa2de7d5386098efa5c3b3a5a7ddbfbf60" - integrity sha512-qMnj1VtsUanqZzfHqG1iBkqgBieQyKdaUr9bNGQJPYAboqPAHriBA5aV+fuKsFFzMM1apgXbkbQ08oaMQDFDPQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-datacatalog@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-datacatalog/-/oci-datacatalog-2.62.3.tgz#3f0284fc199784b49b8dd92a09bc75b53a89ba31" - integrity sha512-Nbavf6PFXhQRzYU9nHhFuueANn4V81fAPrT1Be6d6wUnWziYjEh8pJJS4ZcjYK3/T+fVFkBB7+FbbiLiLvjKKQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-dataflow@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-dataflow/-/oci-dataflow-2.62.3.tgz#5ea739332c714e6546272a2b045872295ba8042c" - integrity sha512-AV4vcEDHaF+C5z0qhHZUt4r68w/x1Z62ZJbc9/ttQqk7DeIr6r0xULXNsgkVr0nD4HIa8MV0Ro0FVfw4KVz29w== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-dataintegration@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-dataintegration/-/oci-dataintegration-2.62.3.tgz#058d5235dae61c852534a93bbf0d74926e0adf66" - integrity sha512-dou4XBgjcTEgACb8X7MJ4D99XXm7qtNoN+8J9W73HdIlaI+VuHOr4xuz2HGAnbqWWwWLVDGQ9BrAlnARR4s3bw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-datalabelingservice@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-datalabelingservice/-/oci-datalabelingservice-2.62.3.tgz#231c20463bb271e9e35960a0a79703cbd14f51c0" - integrity sha512-PhIaVPl2g0Zn1coACuOFUUo0adUF+ocGQBfBNp942+f8/hzZr84g4fJccZFTCdjHY6Cg+4Y4D8XSnnPjwYoy1g== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-datalabelingservicedataplane@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-datalabelingservicedataplane/-/oci-datalabelingservicedataplane-2.62.3.tgz#b57f084efe5d05bed813ff8fc61e2b6bebad9381" - integrity sha512-v4UPF13JmnqBP4OBp1ldyozGmdJJinX/Hxtlp4266MuKQC/waOjl6Asub7XGlXMuBMcbjQ1N1PSfYISVRKanHQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-datasafe@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-datasafe/-/oci-datasafe-2.62.3.tgz#db46c36cbec5c005238f8c7987ff4f094823fb2c" - integrity sha512-vlVPwD3Tc8ZRvH7czk1RYyqpg6IuY5lehwQ5XrQid+p5tfUOhefStPrq+n8Hzs5PO6LpKra9u9uCp1u0v4xvnA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-datascience@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-datascience/-/oci-datascience-2.62.3.tgz#30f4b4a6b0ed9c1d691d23d95938ffefb3034f63" - integrity sha512-Cf/KXjaF+b0iA5gd8x7jPVLUJXsEToChhv78KCIRfDMrUd4SRo5pASeF6djIQ068edmsXIRGjQdK9JIR/KMrJQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-devops@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-devops/-/oci-devops-2.62.3.tgz#03a0ecefb4329043b01cfd7aaebced1faa3981c3" - integrity sha512-QyQo3lDmKZqca+nIDszIrcHzKcSkz6uiV+ca9b1A4HqQjAJoUMu1uPxxEHihEuL/rKJq0eKA8cwegc6dcV8aHQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-disasterrecovery@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-disasterrecovery/-/oci-disasterrecovery-2.62.3.tgz#5e55946faa832db0c9ee753a2325218a4f8137f9" - integrity sha512-xxumpGRRcQkNVvP/CxE9LHl1kGhNLp77va5L6xyXFs53Vz0MS69CxT8W5+iaL0zAx8fdXUYphuj74lDtIVspEA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-dns@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-dns/-/oci-dns-2.62.3.tgz#9b87f5ae6c8475c2273cf9da5e01758a673a4e02" - integrity sha512-J75cafUe4YADz+8+KrdClpIgG+RxU/YN1+O4FZ+UxH7/mKowv7iyVPIEEO+lKiiEKQMpkOejQB3PPCxWiKMfIA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-dts@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-dts/-/oci-dts-2.62.3.tgz#c62c7e9aebc951ab7cd2d46908b5645a2e13d182" - integrity sha512-NNa6o+BqMVJs7LSiruxzH8JZ8RVkgqSeG32tkeIhOoWRKZOhvfNai6qrSDNE64phBfDuZNnlMSl5A3+CA/G5EA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-email@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-email/-/oci-email-2.62.3.tgz#de58b4e0ffdf181d54a2e2e5afd58b6053350c7c" - integrity sha512-tjPBFlRFaeDHh5ynriE9T9Bx6hIv/9LwzojpXlFruu4m3PXG1Jk7yN9u8gtwo83yYY5jK7lnyhZKDDMrtMKFUQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-emwarehouse@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-emwarehouse/-/oci-emwarehouse-2.62.3.tgz#6f9a629525ee4c0d11f141639f91b29e79b4bd2e" - integrity sha512-TJsQ1oqZl+kZ/ZLYV7OMAD8xjIfb49lZqpg+EPHyNhP5IVSCSr4kTBcRBW8xWFs5mw52ezrBQf25tZQ8I5C5hw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-events@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-events/-/oci-events-2.62.3.tgz#18aa4fc6f67a6d027886eee772c8ac7101d6f761" - integrity sha512-yFRIRH4TkwqtVTxkQS9Sr5HlaJbYqX0r0gDHjnEeYEMf0uLfzy/FpA/tWdtRQqIQKXLrFAqWkEhWo/kOnh1lGA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-filestorage@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-filestorage/-/oci-filestorage-2.62.3.tgz#057d7f62ff885138f06fc4e9ed7d372c4b2a9be0" - integrity sha512-gsKfxEeDemq4/IdWObgEvY9RtPQ4yvEH4LbjKsFOmkVE9Dt2exahLQCuw6ETY7UGyyuYuvaIXvf6JKTpDddYdg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-functions@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-functions/-/oci-functions-2.62.3.tgz#501d20edf6925e8df1919cbe94e8e6ee8b0679aa" - integrity sha512-+r7/PSnoB5/k12N7bf91ZqJStFyqOt8JKMnP+Faxa+BaCRkn0Sy12w5NyPKYnfWgiRTyNh77ybk76wju18J7Nw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-fusionapps@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-fusionapps/-/oci-fusionapps-2.62.3.tgz#ea7a78825302e97044ee34dfcef43b0ef60d54c0" - integrity sha512-Dh3MnsP0RHQHlDkA2AMO4Tztk+pS4jFRpZJ0LNxYAsz+DUdODiLyklUZvf3w1/6BLM6UoT9YdFfcMJEqK+jaig== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-genericartifactscontent@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-genericartifactscontent/-/oci-genericartifactscontent-2.62.3.tgz#a4e579ad4af170c85edaac746c14ab71d1211215" - integrity sha512-NRJ/NXLJ2gL67JzmpXu1mTE2PxqbGQT4W/YbR0c3lPpI7lle5YLDE+Dzne9z/A0liaPFFg+x6jtzVRFd3rsIRg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-goldengate@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-goldengate/-/oci-goldengate-2.62.3.tgz#9d6032f3e0662f0469bcbc1dca06f2f900da825b" - integrity sha512-f3K4DylE7izl18YXPWBOT92QYUlF+4hXfC3sT9OKhXqnIjz1MW6CUfkkaKS0Vd6yzgbzDlNm0FFfijvhK+ASzw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-governancerulescontrolplane@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-governancerulescontrolplane/-/oci-governancerulescontrolplane-2.62.3.tgz#398322ed9df617c79e867d2889124a5749987963" - integrity sha512-61HDCylS2kjAA+izOZvQNLiCBpIWGDrnaKJjesCiJBzP/JmhDYfl7J1xw0L2wKgl/+T4EAnKYe0c/LJKXWbSbg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-healthchecks@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-healthchecks/-/oci-healthchecks-2.62.3.tgz#cafc2e0ba58b216fe09e2c25f236c8ec5e624fd3" - integrity sha512-pTIQsXwJTUYG5Dwmj/doomeUL2haVbMCnx8BF2OHKCD9BThRGfuCNfkRVP35a2dBf8a6fdTORAvKKCni4oh73Q== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-identity@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-identity/-/oci-identity-2.62.3.tgz#16eaa511148d53c97cc9cee1267a9a19a7bdd419" - integrity sha512-+UAD0mwqYZa4rdOwahDcNwPECFHxrcJxgEGCy03vP5F01b1j9JoLzbosFTZG46BpzFi77luJXmobKeJKv6eLyQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-identitydataplane@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-identitydataplane/-/oci-identitydataplane-2.62.3.tgz#ecedc890a9b93037b3e185a562a49cba0cefaae3" - integrity sha512-akqP3hW/XeMTqy3m894ue4mu7gNhIKEo0GGyjXcHRI/JWmdJz5j0cmKDtrQWCiedK+dYuRngw7taM3PWEcVKNg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-identitydomains@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-identitydomains/-/oci-identitydomains-2.62.3.tgz#12e84ab92a01d724beefc1d46105c4af68e93451" - integrity sha512-dUHg3fl5ENmKbWqdcpxNDoGszzpSwDi5271yHu08Wtz/Ouj+j/dDesJGcA8fBg2aLvRWOi6vhf2tJc680bI3MA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-integration@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-integration/-/oci-integration-2.62.3.tgz#61af1ab5afe42bf5537a40033bf2e3d9544f48b3" - integrity sha512-y61b5QYuEJFDnO+InTuloy4931IOdPuoi+SfQDCwqGh5eBPA1DoBnXEB53F7eqAyFlCAsi80jUv0IeCkYuosww== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-jms@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-jms/-/oci-jms-2.62.3.tgz#ac490430e2ed71c88e709b058494a090324be0f4" - integrity sha512-TANWw0dZebv0KpwAhhPzou60FhYfFQ7qXEfSwO/1Aa/KrNXFBu0HNqgWVHeh6lzJ+q/LR398yIbq1IUdkrT4XA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-keymanagement@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-keymanagement/-/oci-keymanagement-2.62.3.tgz#fe7c703e40e783f87f20f35e53719e10f5ca83ad" - integrity sha512-cRCollVo8xjtBXnYvkOHH50OsrofGf+ME8WoKSQysBydCKDfVc2X7NSN9TJ6YrNJeOzlA5n11NWDxsuvDMwMKQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-licensemanager@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-licensemanager/-/oci-licensemanager-2.62.3.tgz#8eb1185aaef2820facb5318cbee8e2cb85ac94bc" - integrity sha512-3VTWAWSjRsxAB82ToXRCe3vyNwuBThTr0U9V2F8uMXlz+w3uJloch/O/O0lMG4hvQVeYxb/efECtGYqKpnpbVA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-limits@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-limits/-/oci-limits-2.62.3.tgz#479c77064f78618a40a5afb538fd25f0b0d61f14" - integrity sha512-EaedYIXuNjD7xCcbD7m7Gx9OSoUYv2XJheKIecJgbFaN1/nf58o28+PVp8cnuxL1dmbmCwTzxdhBLuOejLn+PQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-loadbalancer@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-loadbalancer/-/oci-loadbalancer-2.62.3.tgz#f7553ce50c4ef951abb48ef2445f23673cc520dc" - integrity sha512-6rQGrwG58cYmmnZP7fBD/2HGWN+/NXEqMynhmsOxM/ENuxHO0KNr56VRDrhX8rfXww/Sj/7Ov8XOLD4oxqwbTA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-lockbox@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-lockbox/-/oci-lockbox-2.62.3.tgz#19a51d40567595fde0caee60b8c7dd539149028b" - integrity sha512-XnlD2OmF3QNcjFSTKIpshgGS9QfSHC/x0OlZhXFDXQ9+7dw/QdJ21gizjnPZ3BMkSdBgCnxiF4+WFveCItohSg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-loganalytics@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-loganalytics/-/oci-loganalytics-2.62.3.tgz#68a177548cabaf2fc9c77afa42e969b10adcbb85" - integrity sha512-InCOQ9tHvfG6g8hb9g6K3MAGFBJneWAwX6KNxFep633IE+ORPm3j2u8unESH7nS0MXl4VVSS+fOjeo+bpH4WnQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-logging@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-logging/-/oci-logging-2.62.3.tgz#0da9991912b044e71127d628f31ee8e6dfaea2da" - integrity sha512-oLEeLOKRK4xeOWZYuNnBnjlAOkigmRYxb6J5fDSEkXaP4Ya5MoV752LzZB0EH139ixsAaME9PdhK/ei1od1zhQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-loggingingestion@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-loggingingestion/-/oci-loggingingestion-2.62.3.tgz#ca2d302fdd22794c9c6565a9c7a8135b1eefb18e" - integrity sha512-vGvDsfnfTLM9hK4pu2a4AvpfW3IWqpGGXxURrY/UV9Ydsqx0w8nrocnOQUdKTQhfGAaDVnQggIz+D3pKBmN7Pg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-loggingsearch@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-loggingsearch/-/oci-loggingsearch-2.62.3.tgz#7f92fbfb2f3cd89befb9530891c0056709687717" - integrity sha512-uTBjouqJ+UoU8JzxKMGqr5pH8cEioXeb2QnPgV5aNdh9I8fmQTKDTY5YzF6HRVbba+QNnUhISCdMiQKizZH5QA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-managementagent@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-managementagent/-/oci-managementagent-2.62.3.tgz#bb6bfebac355abfb5805fbdf7dbe3da663095ea5" - integrity sha512-5PidjwS646f2OCVgpXSBZ/kmLac7JqL+v5+8mVMmnVcsBvF4ChxSBBAe3ptXSh1NtCVnl2Y3UCNq48EI5GIPPw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-managementdashboard@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-managementdashboard/-/oci-managementdashboard-2.62.3.tgz#915c782a7c80f4d5fd358aafaad95d5b6af4354f" - integrity sha512-qKtiwVJ/r9KnPtWfXo9PGyE3PGq0TliAUP7+khXCyVgXxefpygsvUFnSC1m9PTDsxYyi1GfzCw2/2YeWbcJkLQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-marketplace@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-marketplace/-/oci-marketplace-2.62.3.tgz#264e9490eb9f3a992662fa910bc7bc6758dfe156" - integrity sha512-LuEqMUzP2/juwmhPSeVtDox+/QLQ3X95/4zPqxdkFKn3O7scgz74OoD9co0oWVIevzVS+okigThCWgdVHJscrw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-mediaservices@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-mediaservices/-/oci-mediaservices-2.62.3.tgz#bb84d92963b0ac4fff7ad1ed852f616d8a393dcc" - integrity sha512-xiKG7KW5UyjEfNhUOPIbbeTKigtQGSGB+lz5hiPjmDIKmVlAZkRBC9lA5oARvbq884eN56Dq2vm0qBFlmen9Yw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-monitoring@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-monitoring/-/oci-monitoring-2.62.3.tgz#80e1e04073ff9e23ec08fc826ecce6cc0efdf12e" - integrity sha512-zhDmUik9c0pQa4K3Uh+wo0clnvzR3g7xKG2NyxgrReZBgeQS0Jzop3IpWwm/7OyxDBNkgJLhykfWUmB117dWAw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-mysql@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-mysql/-/oci-mysql-2.62.3.tgz#f11e974bd6716beb68d0c3aaa7103aca38352e3f" - integrity sha512-PhYHo9chdgE/JtaafstpBWpCPNLqj/eaA9iaqSL/+c0WRPcA893yk1VTlalC5cihqTN+8e8CtYW603MJWaLwdw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-networkfirewall@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-networkfirewall/-/oci-networkfirewall-2.62.3.tgz#b015e607ada023e4c1964ea9ba6c8dcf6b206197" - integrity sha512-4/YNsmCljKUFSDx7uc1TSJHB1KfkKWII4a2uD7qP1iR9YEPOdLKukaJnlLCP4C2DJAm5lsRdgmTEqOYvxTgTnQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-networkloadbalancer@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-networkloadbalancer/-/oci-networkloadbalancer-2.62.3.tgz#5810c042e2240bd85d77377769aea5449f65dc49" - integrity sha512-sAs+K1i0jLoI+IsAGaRSE91N6++AKhpkeiMsi9Pamw3v2o3Z72jbt4NaIO682Ta08th4g7XNJ7qqiPzEkLcxHg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-nosql@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-nosql/-/oci-nosql-2.62.3.tgz#69cdbbe00e64c164b8cdd7b84ffc4c4284049a05" - integrity sha512-BPC4FGZuBk4oe35mcpSq5NeBeys/meZL5SSANWMoNncAMp+AvwYNQn+GoRatvOoIZ+bsmtdDSJ0oiu7Jn6EJaA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-objectstorage@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-objectstorage/-/oci-objectstorage-2.62.3.tgz#15a7ad4c7b8048309370d8dda9a9341ddeab12e7" - integrity sha512-gt+iMMJAtgQqhDwOFXPOOOQ3dNHWAOdL+CshnVfYgLg/TaqOJoufgkElF0gYm04I56IcDDPQ2iAez0pq+/fB+A== - dependencies: - await-semaphore "^0.1.3" - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-oce@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-oce/-/oci-oce-2.62.3.tgz#1ef9e3d5207f0d29f8ebff78c30c0f6d9c58232e" - integrity sha512-tk4h4/lbs416OOBcIyvhhO53eB6LWxIn4FbV931TnauNGY9gzRJPDwc8htC8whGOC7TGlimAIdBcN65kGDu2Rw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-ocicontrolcenter@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-ocicontrolcenter/-/oci-ocicontrolcenter-2.62.3.tgz#cf1de244557670f58079ca6e83a9ffc6a7b3a2c5" - integrity sha512-MQ1Zp0OWjMHSrdp5AvBb3cetA3WHN8Kfkj4xa+m46vlbqxjR3c3i7cT35b9vlYWWdtavxJE5XZFbJKgW1JstVg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-ocvp@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-ocvp/-/oci-ocvp-2.62.3.tgz#cc61d211f1986ae32c523f456e3bf5b9110c2277" - integrity sha512-EXNgRU3otwcqsenvi9JOcN+vQpZqVs2kzEuG44QG10/GB14ajtqLxheIEH2zP+4KQqe182B6uKCX0nYcLdn3hA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-oda@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-oda/-/oci-oda-2.62.3.tgz#51e736ddac8649daf76d5615d086dc1007cea053" - integrity sha512-NQAJmTSZIKEwGKHN6SRcOY1c8uguNIBhg19ZQxpMtNoL5bEcvemnu2rqdQ6RMIijFN66Jf/UZj9zt3v8FP+Q2g== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-onesubscription@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-onesubscription/-/oci-onesubscription-2.62.3.tgz#89d7656000081cc5a6c3df9da345488ae9193532" - integrity sha512-btEQPofcCE7tng2XZja9rHoqNqZL/ewL7Wny/xitUx71h++JvNL1ZHnjCSY7hMZ05jmNcIUzU+a7q57HprCJMQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-ons@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-ons/-/oci-ons-2.62.3.tgz#29a861cf7e70bdf4c3cb91beecf2d1585835f198" - integrity sha512-IPEZkyy7OfjogKwyCZN+BXmMvsbTpbZ+jMXpIEv7shSJJh+RWrIiz6m7a8F5CmYADXzNRodfU7XkEy/qgctWaw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-opa@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-opa/-/oci-opa-2.62.3.tgz#dff3c632f678f32ee5b4f6b2c00d79d0c4aff124" - integrity sha512-o/70A/4volVZkeL2t9zI/c49GKw5LjuBrBMSWAtfOFf5yHkXzh2czjJ6+mvEpszILW83RIetcFUxcu0WhtpoEA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-opensearch@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-opensearch/-/oci-opensearch-2.62.3.tgz#84ecff061715c19b3a7d52cd07a63c8933666574" - integrity sha512-7T0Gckg9Ya8btqx5GlQw75kYyRdOKDguO4pdZgg8z82jrFq0ROvA8+bGBTzU+n0N9cEUgRw5jgOq4KfyWjBxmA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-operatoraccesscontrol@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-operatoraccesscontrol/-/oci-operatoraccesscontrol-2.62.3.tgz#7c7ad073f98665f38bf022c9d109e563368941ce" - integrity sha512-y6eTb5r/HP6ECkLm8LbeYs1TBcgnkrZUBGLK+g8Es2Ka97U9Ss4yC1c9RTjfrHVLlVq4/sM9/xRxazEJDwT98A== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-opsi@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-opsi/-/oci-opsi-2.62.3.tgz#d414b38e1000447d1dbf5a5804377c0bfe123f8b" - integrity sha512-x3IblpulHfP7iiWtRT9etE9CoEeW1Yyp/oHvDbAPbVnLLMPKmgoM3MhEVBPdkAkYa5Y+U9fWjtMfp4I7MHJetw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-optimizer@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-optimizer/-/oci-optimizer-2.62.3.tgz#163a58d23adf40b5e2f9826399b442685dbb12ce" - integrity sha512-FSX9m/17G7cDOF3/rWsmhle0AMX8aosVryTQbnTC2FbUFLDONS7Yj2n+oYrP+6KXgzC2PDNczbyYvGwS5uUSJQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-osmanagement@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-osmanagement/-/oci-osmanagement-2.62.3.tgz#9fd8c5ee16036de542ff40296ba0454ba97db7b1" - integrity sha512-huogigc8vI7tEVElF1LeTRQTqM/wccXyFp5uYM8/GGvC9mjhCdOwlFeYp73kRvvQq9597qqarkS1pDoN0ELnQA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-ospgateway@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-ospgateway/-/oci-ospgateway-2.62.3.tgz#dba7ae400ee1edb24d9b72733bb62e1a34288bae" - integrity sha512-JckrZcQG16PIpvGghuOnq5TpJojkZKDiZPby2ItI7CfjU5Gky8Gihb6yfa7BBfsGqHOd5osl3nNEo3CZJKWeDQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-osubbillingschedule@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-osubbillingschedule/-/oci-osubbillingschedule-2.62.3.tgz#dffcc216ea89a8cafec4f5925a08a3169ac1a277" - integrity sha512-Buz9w//SMda3TJq7H88jGgi8J/U+YWUa4EJVwfTxB0ookA/rXsabfI3fXxlxRZd9TOgUK+lqpJ0RFVYzIgG9VA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-osuborganizationsubscription@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-osuborganizationsubscription/-/oci-osuborganizationsubscription-2.62.3.tgz#69fad2dccfe7b2a7f1a428ae058b0856755716cd" - integrity sha512-aaE8uJxaaw+AflLw9FQdPtPFTBoLMrWEP/8nmWnK+L/4zdaAEoyEE8vDzxfB2VBJRcAqwrSCB8olQeyqj3iMDg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-osubsubscription@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-osubsubscription/-/oci-osubsubscription-2.62.3.tgz#73bf74e74f959259a1eb3ec1e7f3f2fdc26bfe69" - integrity sha512-+2JB3W6Qsrn5nhY3SRNkhU7DxpmnS7Wyba2qlu++VBBsPU+J8BNWxihZwbPKsRiXj17yfm9reRkuYd7CYITF+g== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-osubusage@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-osubusage/-/oci-osubusage-2.62.3.tgz#f1aa903244e16676c57804bd6d017504b9e4f7b0" - integrity sha512-m2SqSDspK460JNHlOcxtUEGdukF2lxkyQ5gqrYdfnRQzfath/1HdwpjNTINHHy1q3B0MITGiJMxy/70RiU9geQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-queue@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-queue/-/oci-queue-2.62.3.tgz#b7c8fc5441602c3769f21dae2ab1dd1a6545ce10" - integrity sha512-3nMuLwiXCXGaFJAs2Rdxk7SI43Jw6NxVSDWx4o0ti4IwSK5zjaWpnN92eHZq9N19K6/ggd6VbaodchQij2jStw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-recovery@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-recovery/-/oci-recovery-2.62.3.tgz#91a6507c49d425b4ae7c171d0fcb40b9717cd749" - integrity sha512-JfmjscjHgoIscZ0VNwP1TPb5cAwFgrNl3qFZ+xZHM0zlPD/xk/Op62w54A/c6sVZsviwaZTIfbDCwZ34kb6Zmg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-resourcemanager@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-resourcemanager/-/oci-resourcemanager-2.62.3.tgz#2efec47fe1f0d2ed702ec20addd7f85c0fb51b14" - integrity sha512-RPWY+udGaNSVepoJkT42AF03umH1dlVaJPU0oiWKUxDDqjGb+kDnuRkl8CRQYC8+2K4sTYv0OnMIxa/MkGmilA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-resourcesearch@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-resourcesearch/-/oci-resourcesearch-2.62.3.tgz#35d8cbabc6549da7a9a125a29af26fd3ae343eb4" - integrity sha512-N592DUe+AMNW17eUZSYaqCF8+221MNLW3GJhOIoy8G1EQiLcNblgiJhrc0Lyn6ba0WU16+SUN/AZ2rpGlEp7dQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-rover@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-rover/-/oci-rover-2.62.3.tgz#7285a78824b2ae2eaf7aaeb23bc95c4bdf87b93b" - integrity sha512-EU116SmXHiY3E+uLadJNCbSoHeBQ5tZKEXRB6T2GLnetu9sAxsjVDK/XwJSsnAMk2qJ9xO2nJmeNOWRain3K+Q== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-sch@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-sch/-/oci-sch-2.62.3.tgz#0f9378f25276f72bcd7f2293d4540fd4f2b21fac" - integrity sha512-VJ0/BpFCEyRzgL9uO/hznkG3Db8PsDoBp8mo4KHmuX90U44ZrEKQx5CLXZw7xbTaB5nA/rfGfnmc4TStNsVIPw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-sdk@^2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-sdk/-/oci-sdk-2.62.3.tgz#2f48ecca6620d70c390784d9be4adb781f4edafa" - integrity sha512-VONukQwizNihh5+8t3mU3+Olk7uYoPUjIPYNLHeJJ8RAfVCkWAM0PgPyUV8lj8llGJTfVZx5veZ9dryqBoPzDw== - dependencies: - oci-accessgovernancecp "2.62.3" - oci-adm "2.62.3" - oci-aianomalydetection "2.62.3" - oci-aidocument "2.62.3" - oci-ailanguage "2.62.3" - oci-aispeech "2.62.3" - oci-aivision "2.62.3" - oci-analytics "2.62.3" - oci-announcementsservice "2.62.3" - oci-apigateway "2.62.3" - oci-apmconfig "2.62.3" - oci-apmcontrolplane "2.62.3" - oci-apmsynthetics "2.62.3" - oci-apmtraces "2.62.3" - oci-applicationmigration "2.62.3" - oci-appmgmtcontrol "2.62.3" - oci-artifacts "2.62.3" - oci-audit "2.62.3" - oci-autoscaling "2.62.3" - oci-bastion "2.62.3" - oci-bds "2.62.3" - oci-blockchain "2.62.3" - oci-budget "2.62.3" - oci-certificates "2.62.3" - oci-certificatesmanagement "2.62.3" - oci-cims "2.62.3" - oci-cloudbridge "2.62.3" - oci-cloudguard "2.62.3" - oci-cloudmigrations "2.62.3" - oci-common "2.62.3" - oci-computeinstanceagent "2.62.3" - oci-containerengine "2.62.3" - oci-containerinstances "2.62.3" - oci-core "2.62.3" - oci-dashboardservice "2.62.3" - oci-database "2.62.3" - oci-databasemanagement "2.62.3" - oci-databasemigration "2.62.3" - oci-databasetools "2.62.3" - oci-datacatalog "2.62.3" - oci-dataflow "2.62.3" - oci-dataintegration "2.62.3" - oci-datalabelingservice "2.62.3" - oci-datalabelingservicedataplane "2.62.3" - oci-datasafe "2.62.3" - oci-datascience "2.62.3" - oci-devops "2.62.3" - oci-disasterrecovery "2.62.3" - oci-dns "2.62.3" - oci-dts "2.62.3" - oci-email "2.62.3" - oci-emwarehouse "2.62.3" - oci-events "2.62.3" - oci-filestorage "2.62.3" - oci-functions "2.62.3" - oci-fusionapps "2.62.3" - oci-genericartifactscontent "2.62.3" - oci-goldengate "2.62.3" - oci-governancerulescontrolplane "2.62.3" - oci-healthchecks "2.62.3" - oci-identity "2.62.3" - oci-identitydataplane "2.62.3" - oci-identitydomains "2.62.3" - oci-integration "2.62.3" - oci-jms "2.62.3" - oci-keymanagement "2.62.3" - oci-licensemanager "2.62.3" - oci-limits "2.62.3" - oci-loadbalancer "2.62.3" - oci-lockbox "2.62.3" - oci-loganalytics "2.62.3" - oci-logging "2.62.3" - oci-loggingingestion "2.62.3" - oci-loggingsearch "2.62.3" - oci-managementagent "2.62.3" - oci-managementdashboard "2.62.3" - oci-marketplace "2.62.3" - oci-mediaservices "2.62.3" - oci-monitoring "2.62.3" - oci-mysql "2.62.3" - oci-networkfirewall "2.62.3" - oci-networkloadbalancer "2.62.3" - oci-nosql "2.62.3" - oci-objectstorage "2.62.3" - oci-oce "2.62.3" - oci-ocicontrolcenter "2.62.3" - oci-ocvp "2.62.3" - oci-oda "2.62.3" - oci-onesubscription "2.62.3" - oci-ons "2.62.3" - oci-opa "2.62.3" - oci-opensearch "2.62.3" - oci-operatoraccesscontrol "2.62.3" - oci-opsi "2.62.3" - oci-optimizer "2.62.3" - oci-osmanagement "2.62.3" - oci-ospgateway "2.62.3" - oci-osubbillingschedule "2.62.3" - oci-osuborganizationsubscription "2.62.3" - oci-osubsubscription "2.62.3" - oci-osubusage "2.62.3" - oci-queue "2.62.3" - oci-recovery "2.62.3" - oci-resourcemanager "2.62.3" - oci-resourcesearch "2.62.3" - oci-rover "2.62.3" - oci-sch "2.62.3" - oci-secrets "2.62.3" - oci-servicecatalog "2.62.3" - oci-servicemanagerproxy "2.62.3" - oci-servicemesh "2.62.3" - oci-stackmonitoring "2.62.3" - oci-streaming "2.62.3" - oci-tenantmanagercontrolplane "2.62.3" - oci-threatintelligence "2.62.3" - oci-usage "2.62.3" - oci-usageapi "2.62.3" - oci-vault "2.62.3" - oci-vbsinst "2.62.3" - oci-visualbuilder "2.62.3" - oci-vnmonitoring "2.62.3" - oci-vulnerabilityscanning "2.62.3" - oci-waa "2.62.3" - oci-waas "2.62.3" - oci-waf "2.62.3" - oci-workrequests "2.62.3" - -oci-secrets@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-secrets/-/oci-secrets-2.62.3.tgz#a9a71655ff18e9d4c77ee17de3aba2c7463a768a" - integrity sha512-IPR6iw4PGlh4vh43YvyRc6BnWcOl+jwZI0WLOzeBuz1uS6ILwXSD+xIju3HflM+cb7BxoFNA6uWQHLRGgKtJfg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-servicecatalog@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-servicecatalog/-/oci-servicecatalog-2.62.3.tgz#ee3322ee9a423a3923874289c410d13902b27738" - integrity sha512-NJnl8d09+3wKv8s12RwM943tA+vnDJzgtKheSgdPGEYOMpCnlKMJ7x+I+CzkVYogcwG+C9MRcbD1HCAP67XStA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-servicemanagerproxy@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-servicemanagerproxy/-/oci-servicemanagerproxy-2.62.3.tgz#6dd850839a66aa862288610037d3d4552e80fb07" - integrity sha512-QklP+HxHg8Z+HwZF3dWp3kiIyRLyFZGqnxiIXOforOfK41ylegbZeoeEYBhl0eY8sGhltH9m/fl751+NGDUqmg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-servicemesh@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-servicemesh/-/oci-servicemesh-2.62.3.tgz#9c3bbe7fbf0317859f191a334d9264470d1d3416" - integrity sha512-vunJ0A99IrfFj+E3ZSwgKrMT9TLALC63Y+LaoM5J+CK/LEKXnu85R0jHO7G2HfXF2/kt9Y39SqoSj/2vz9kGBw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-stackmonitoring@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-stackmonitoring/-/oci-stackmonitoring-2.62.3.tgz#b32ede069e94c1e2b835ef4fc1c2b47e2d48aafe" - integrity sha512-JqQzhuarGhu609je8kOpocvDaWPaMC7C2NVaCNALrrRhmqLhrJIozDEZ9OvUeO7cK5XmhIrsLWfewJl8qZaf3A== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-streaming@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-streaming/-/oci-streaming-2.62.3.tgz#44952956f7c54e2fabf76f39c718b1b9bbe3e936" - integrity sha512-6U/Gy4TjBriz5NZOW88XBTbFkBisMrqgaGpoiRxlTPJKeQ4V4zj9B7STBpsFnBLOB/TAf4fDcsk5nLJ30LdXGw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-tenantmanagercontrolplane@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-tenantmanagercontrolplane/-/oci-tenantmanagercontrolplane-2.62.3.tgz#57ba59c537683ca903083bd61677c90e5f67108c" - integrity sha512-trr2pdS7KuGm7dOH8CeKEMXqYY3fpOdO8LejMglmq06cz5mXGDYBrBRN4RmqZQSHKrLF8mzI2AbKmKk4k4/8IA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-threatintelligence@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-threatintelligence/-/oci-threatintelligence-2.62.3.tgz#1d8ac58b40c92c146ae7268b0fc1cc7ee53a7bb7" - integrity sha512-dSqSuEgiogOnh27hcr6+xBT8venpXKd3r9E7O8pfBZPZ9nzadHgo/1DpaxduElwGhAKoj1s0/mWrWbK++Cm5LA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-usage@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-usage/-/oci-usage-2.62.3.tgz#52eefe15247181b24c3a136c62df20c92ee8866e" - integrity sha512-Nn+H9ZDUCE4NERw3wbfGOS3TezP+UorOqLyxsZrhLTbq7HCnocrXTVis67UNDETO7Rt+GnWgY4H1Q3qLntzrfg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-usageapi@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-usageapi/-/oci-usageapi-2.62.3.tgz#defb782986e297f9c8c5a58a37a4e8450d7abe97" - integrity sha512-0On/2wGvNzzpQONdpMyXAyoT43j3G5/LPSOMGxzTgxVKsSDBa6uP2jBp7PXoN3rkL25zV47cgtcwAytN8y7zgw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-vault@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-vault/-/oci-vault-2.62.3.tgz#49b7dbcc9e645a69e668c11e17289d3b44125b45" - integrity sha512-XxQgR5cNzeAAfz/N3mhKW/Y0Dv6vUNjWZYuNf0v9b/fQmFKHGU4m973pqFXGw6FMuCBm2bfjDKok52qEqCiwyA== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-vbsinst@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-vbsinst/-/oci-vbsinst-2.62.3.tgz#1d07ba774bcd2862c1cf2ed7b29f8d437f3c4fc3" - integrity sha512-9hk9OKjuo36b5V46ep1W7WLGsBeJg+Ixgmeq3wHhGImLvb1ekIrrNJiEksKYmspvdH0b2v8byGtGW9QEHw3r/w== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-visualbuilder@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-visualbuilder/-/oci-visualbuilder-2.62.3.tgz#ed3d2532e472746cf7a6eec57a4f7431220ad7e5" - integrity sha512-XZxfWq14rSEx9V1r1toneRIgFvopp9ZYzfJtumdlt7p9fr3x92nYkcdsJgvDDggFMByo0I3nnsQIWOxVqqYbcg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-vnmonitoring@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-vnmonitoring/-/oci-vnmonitoring-2.62.3.tgz#d415447ad76726e0fa8369b46529ea4928dd63a2" - integrity sha512-UuD77kheE/+3I5XDC9JFaFfqd3zOMnpQbX0vz/rvQY1wNjQe2qvtNh/kLi6c3d5AtTI0XnFryyXWjJjxgXC1yw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-vulnerabilityscanning@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-vulnerabilityscanning/-/oci-vulnerabilityscanning-2.62.3.tgz#3776431af8f117ae8219dad430e91a11ac7c2797" - integrity sha512-guAOdabn6rAyfqR01C2C+D3+gOJKls1B+BRA0mJqftI+C1+iHFcZoWzzgbhXjJWy8kpenXoMgW6G3+wwNbXEMQ== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-waa@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-waa/-/oci-waa-2.62.3.tgz#56c2313d5fe0ec8d8612545ffb1788a7240953b8" - integrity sha512-Z/0PDkio4cFvoawf7nRJE4WEr4FK4NiHiiXHxQsLPIwPuOndkvVnfKkG4yyQygRLYnfjR7CAGTgGA2DUzyHK1A== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-waas@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-waas/-/oci-waas-2.62.3.tgz#d696951c179f502874c89b6dd7d669bb59cab0e1" - integrity sha512-3YGVPVnrRgT1tZhykgydIuwYZZJErlRrgvpABLXvOIDdAjj6SOI3twZfqGnxMPvifOUEIUIPn0snZLDkfXiWYg== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-waf@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-waf/-/oci-waf-2.62.3.tgz#1632147788ca1eb58f30a8e908d997fa246b7032" - integrity sha512-tbWh3TG3lQUOb4LTW/W1x8l8hSt+nJ8azMFpgKnyqcFK8hpcr/XG6ZRqpPyxeUZ3/OzspA7NzsSORRbsF6X/aw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - -oci-workrequests@2.62.3: - version "2.62.3" - resolved "https://registry.yarnpkg.com/oci-workrequests/-/oci-workrequests-2.62.3.tgz#29a2300ee7bb6276c61c7024703afa52140b777d" - integrity sha512-OIUM2RD5IWwnlt00LPt7MiY2/EtwOoroGA/qjqsZsEIjeaFjOLe/6K+nTpIYFD4EzTaE9kuWksIDojQkfiNPLw== - dependencies: - oci-common "2.62.3" - oci-workrequests "2.62.3" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -6880,11 +5540,6 @@ open@7: is-docker "^2.0.0" is-wsl "^2.1.1" -opossum@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/opossum/-/opossum-5.0.1.tgz#926d57a8dc3d83afd8ccddff7ed03f5bd1098003" - integrity sha512-iUDUQmFl3RanaBVLMDTZ6WtXj/Hk84pwJ5JWoJaQd1lXGifdApHhszI3biZvdBDdpTERCmB6x+7+uNvzhzVZIg== - optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -6937,13 +5592,6 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -p-limit@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.0.tgz#8a9da09ee359017af6a3aa6b8ede13f5894224ec" - integrity sha512-2FnzNu8nBx8Se231yrvScYw34Is5J5MtvKOQt7Lii+DGpM89xnCT7kIH/HJwniNkQpjB7zy/O3LckEfMVqYvFg== - dependencies: - p-try "^2.0.0" - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -7124,6 +5772,11 @@ path-to-regexp@3.2.0: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.2.0.tgz#fa7877ecbc495c601907562222453c43cc204a5f" integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA== +path-to-regexp@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -7243,6 +5896,15 @@ preview-email@3.0.5: pug "^3.0.2" uuid "^8.3.2" +prisma@^5.22.0: + version "5.22.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.22.0.tgz#1f6717ff487cdef5f5799cc1010459920e2e6197" + integrity sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A== + dependencies: + "@prisma/engines" "5.22.0" + optionalDependencies: + fsevents "2.3.3" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -7485,7 +6147,7 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.11.0, qs@^6.7.0: +qs@^6.11.0: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== @@ -7737,7 +6399,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -7879,11 +6541,6 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slang@>=0.2: - version "0.3.0" - resolved "https://registry.yarnpkg.com/slang/-/slang-0.3.0.tgz#13af75b4f0c018c6a8193d704f65b23be4fbabdc" - integrity sha512-kGj3TvxSDR1Enhig/aan5ucfWNDULTiWg3NrExUzO2ShXcYsm6k2oPxnav8GtslYvozxRAqL+E2O3P3QKtQYSg== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -7966,36 +6623,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@1.16.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -8069,13 +6696,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -8176,6 +6796,13 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +swagger-ui-dist@5.18.2: + version "5.18.2" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.18.2.tgz#62013074374d272c04ed3030704b88db5aa8c0b7" + integrity sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw== + dependencies: + "@scarf/scarf" "=1.4.0" + symbol-observable@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" @@ -8403,11 +7030,6 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -8515,11 +7137,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-template@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" - integrity sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw== - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -8549,12 +7166,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== - -uuid@9.0.0, uuid@^9.0.0: +uuid@9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== @@ -8588,15 +7200,6 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - vm2@^3.9.17, vm2@^3.9.19: version "3.9.19" resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a" @@ -8698,11 +7301,6 @@ webpack@5.82.1: watchpack "^2.4.0" webpack-sources "^3.2.3" -whatwg-fetch@^3.4.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -8752,14 +7350,6 @@ with@^7.0.0: assert-never "^1.2.1" babel-walk "3.0.0-canary-5" -wkhtmltopdf@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/wkhtmltopdf/-/wkhtmltopdf-0.4.0.tgz#b5675b57c661a1a43b55d88e46fea7bb7ebdf608" - integrity sha512-PXvsPehsmP1HeUDPx5qofitc+TJ0+Gb4Xn11iPJnHrLgXwyzRUzn9/b2t+soE+fwBMqUPs4Wchd0CRW+52MkNQ== - dependencies: - is-stream "^1.0.1" - slang ">=0.2" - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"