Commit a92d9385 authored by Panagiotis Skarvelis's avatar Panagiotis Skarvelis
Browse files

froze, until KED fix the service

parent 2f3f0e64
node_modules
docs
.DS_Store
{
"name": "@digigov-oss/afm-to-data-client",
"version": "1.0.3",
"type": "module",
"description": "Client for afm2data service of GSIS",
"engines": {
"node": ">=16.13.1"
},
"author": "Panagiotis Skarvelis <pskarvelis@admin.grnet.gr>",
"dependencies": {
"@digigov-oss/gsis-audit-record-db": "^1.0.2",
"soap": "^0.43.0"
},
"repository": {
"type": "git",
"url": "git+https://gitlab.grnet.gr/digigov-oss/afm2dataClient.git"
},
"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
"exports": {
".": {
"import": "./dist/esm/index.js",
"require": "./dist/cjs/index.js"
}
},
"directories": {
"src": "src",
"test": "test"
},
"scripts": {
"test": "node --experimental-specifier-resolution=node --experimental-modules --no-warnings --loader ts-node/esm ./test/test.ts",
"testesm": "node --experimental-json-modules --no-warnings ./test/test.mjs",
"testcjs": "node ./test/test.cjs",
"build": "rm -fr dist/* && tsc -p tsconfig.json && tsc -p tsconfig.commonjs.json && ./setType.sh"
},
"eslintConfig": {
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking"
],
"parserOptions": {
"project": "./tsconfig.json"
},
"rules": {
"max-len": [
"error",
{
"code": 100
}
],
"no-console": 1,
"no-extra-boolean-cast": 0,
"@typescript-eslint/restrict-plus-operands": 0,
"@typescript-eslint/explicit-module-boundary-types": 0,
"@typescript-eslint/no-explicit-any": 0,
"@typescript-eslint/no-floating-promises": 0,
"@typescript-eslint/no-unsafe-member-access": 0,
"@typescript-eslint/no-unsafe-assignment": 0
}
},
"eslintIgnore": [],
"keywords": [
"gsis",
"emep",
"getNncIdentity"
],
"licenses": [
{
"type": "MIT",
"url": "http://en.wikipedia.org/wiki/MIT_License"
}
],
"devDependencies": {
"@types/node": "^16.9.0",
"ts-node": "^10.4.0",
"tsconfig-paths": "^3.12.0",
"typescript": "^4.5.4",
"flatted": "^3.2.4"
},
"bugs": {
"url": "https://gitlab.grnet.gr/digigov-oss/afm2dataClient/-/issues"
},
"homepage": "https://gitlab.grnet.gr/digigov-oss/afm2dataClient/-/blob/main/README.md"
}
#!/bin/bash
cat > ./dist/cjs/package.json <<!EOF
{
"type": "commonjs"
}
!EOF
cat > ./dist/esm/package.json <<!EOF
{
"type": "module"
}
!EOF
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://gsis.ggps.interoperability/AmkaInfoInterface" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="amkaInfoInterface" targetNamespace="http://gsis.ggps.interoperability/AmkaInfoInterface">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://gsis.ggps.interoperability/AmkaInfoInterface" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://gsis.ggps.interoperability/AmkaInfoInterface">
<xs:complexType name="afm2dataRequest">
<xs:sequence>
<xs:element name="auditRecord" type="tns:auditRecord"/>
<xs:element name="afm2dataInputRecord" type="tns:afm2dataInput"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="afm2dataInput">
<xs:sequence>
<xs:element minOccurs="0" name="aa" type="xs:string"/>
<xs:element name="afm" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="afm2dataResponse">
<xs:sequence>
<xs:element minOccurs="0" name="afm2dataOutputRecord" type="tns:afm2dataReturn"/>
<xs:element minOccurs="0" name="callSequenceId" type="xs:decimal"/>
<xs:element minOccurs="0" name="callSequenceDate" type="xs:dateTime"/>
<xs:element minOccurs="0" name="errorRecord" type="tns:errorRecord"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="afm2dataReturn">
<xs:sequence>
<xs:element minOccurs="0" name="aaInput" type="xs:string"/>
<xs:element minOccurs="0" name="amkaInput" type="xs:string"/>
<xs:element minOccurs="0" name="amkaCurrent" type="xs:string"/>
<xs:element minOccurs="0" name="lastDataLogDate" type="xs:string"/>
<xs:element minOccurs="0" name="adtType" type="xs:string"/>
<xs:element minOccurs="0" name="adt" type="xs:string"/>
<xs:element minOccurs="0" name="yearOfAdtPublished" type="xs:string"/>
<xs:element minOccurs="0" name="nationalityCountry" type="xs:string"/>
<xs:element minOccurs="0" name="nationalityCountryCode" type="xs:string"/>
<xs:element minOccurs="0" name="sex" type="xs:string"/>
<xs:element minOccurs="0" name="afm" type="xs:string"/>
<xs:element minOccurs="0" name="birthSurnameEl" type="xs:string"/>
<xs:element minOccurs="0" name="idSurnameEl" type="xs:string"/>
<xs:element minOccurs="0" name="firstNameEl" type="xs:string"/>
<xs:element minOccurs="0" name="fatherNameEl" type="xs:string"/>
<xs:element minOccurs="0" name="motherNameEl" type="xs:string"/>
<xs:element minOccurs="0" name="birthSurnameEn" type="xs:string"/>
<xs:element minOccurs="0" name="idSurnameEn" type="xs:string"/>
<xs:element minOccurs="0" name="firstNameEn" type="xs:string"/>
<xs:element minOccurs="0" name="fatherNameEn" type="xs:string"/>
<xs:element minOccurs="0" name="motherNameEn" type="xs:string"/>
<xs:element minOccurs="0" name="birthDate" type="xs:string"/>
<xs:element minOccurs="0" name="fictitiousBirthDateIndication" type="xs:string"/>
<xs:element minOccurs="0" name="birthCountry" type="xs:string"/>
<xs:element minOccurs="0" name="birthCountryCode" type="xs:string"/>
<xs:element minOccurs="0" name="birthMunicipality" type="xs:string"/>
<xs:element minOccurs="0" name="birthCountyCode" type="xs:string"/>
<xs:element minOccurs="0" name="addressStreetNum" type="xs:string"/>
<xs:element minOccurs="0" name="addressCity" type="xs:string"/>
<xs:element minOccurs="0" name="addressCountyCode" type="xs:string"/>
<xs:element minOccurs="0" name="addressPostalCode" type="xs:string"/>
<xs:element minOccurs="0" name="addressCountry" type="xs:string"/>
<xs:element minOccurs="0" name="addressCountryCode" type="xs:string"/>
<xs:element minOccurs="0" name="phone1" type="xs:string"/>
<xs:element minOccurs="0" name="phone2" type="xs:string"/>
<xs:element minOccurs="0" name="deathIndication" type="xs:string"/>
<xs:element minOccurs="0" name="deathDate" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="afm2dataRequest" nillable="true" type="tns:afm2dataRequest"/>
<xs:element name="afm2dataResponse" nillable="true" type="tns:afm2dataResponse"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="afm2dataResponse">
<wsdl:part element="tns:afm2dataResponse" name="afm2dataResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="afm2data">
<wsdl:part element="tns:afm2dataRequest" name="afm2dataRequest">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="amkaInfoInterface">
<wsdl:operation name="afm2data">
<wsdl:input message="tns:afm2data" name="afm2data">
</wsdl:input>
<wsdl:output message="tns:afm2dataResponse" name="afm2dataResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="amkaInfoInterfaceSoapBinding" type="tns:amkaInfoInterface">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsp:PolicyReference URI="#Http-UsernameToken-Policy"/>
<wsdl:operation name="afm2data">
<soap:operation soapAction="afm2data" style="document"/>
<wsdl:input name="afm2data">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="afm2dataResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="amkaInfoInterface">
<wsdl:port binding="tns:amkaInfoInterfaceSoapBinding" name="amkaInfoInterfacePort">
<soap:address location="https://test.gsis.gr/esbpilot/amkaInfoService"/>
</wsdl:port>
<wsp:PolicyReference URI="#Http-UsernameToken-Policy"/>
</wsdl:service>
<wsp:Policy xmlns:wssecurity="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" wssecurity:Id="Http-UsernameToken-Policy">
<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy/>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:Policy>
</wsdl:definitions>
\ No newline at end of file
{
"test":{
"wsdl":"https://test.gsis.gr/esbpilot/amkaInfoService?wsdl"
},
"prod":{
"wsdl":"https://www1.gsis.gr/esb/amkaInfoService?wsdl"
}
}
\ No newline at end of file
import soapClient from './soapClient.js';
import {generateAuditRecord,AuditRecord} from '@digigov-oss/gsis-audit-record-db';
import config from './config.json';
export type AuditInit = AuditRecord;
export type afm2dataOutputRecord = {
afmInput: string;
amkaCurrent: string;
lastDataLogDate: string;
adt: string;
nationalityCountry: string;
nationalityCountryCode: string;
afm: string;
birthSurnameEl: string;
idSurnameEl: string;
firstNameEl: string;
fatherNameEl: string;
motherNameEl: string;
birthSurnameEn: string;
idSurnameEn: string;
firstNameEn:string;
fatherNameEn:string;
motherNameEn: string;
birthDate:string;
fictitiousBirthDateIndication: string;
deathDate: string;
callSequenceId: string;
callSequenceDate:string;
}
export type errorRecord = {
errorCode:string;
errorDescr:string;
}
/**
* @type Overrides
* @description Overrides for the SOAP client
* @param {boolean} prod - Set to true for production environment
* @param {string} auditInit - Audit record initializer to be used for the audit record produced
* @param {string} auditStoragePath - Path to the audit record storage
*/
export type Overides = {
prod?:boolean;
auditInit?: AuditRecord;
auditStoragePath?: string;
}
/**
*
* @param afm string;
* @param user string;
* @param pass string;
* @param overides Overides;
* @returns afm2dataOutputRecord | errorRecord
*/
export const getAmka = async (afm:string, user:string, pass:string, overides?:Overides) => {
const prod = overides?.prod ?? false;
const auditInit = overides?.auditInit ?? {} as AuditRecord;
const auditStoragePath = overides?.auditStoragePath ?? "/tmp"
const wsdl = prod==true? config.prod.wsdl : config.test.wsdl;
const auditRecord = generateAuditRecord(auditInit, auditStoragePath);
if (!auditRecord) throw new Error('Audit record is not initialized');
try {
const s = new soapClient(wsdl, user, pass, auditRecord);
const Identity = await s.getAmka(afm);
return Identity;
} catch (error) {
throw(error);
}
}
export default getAmka;
\ No newline at end of file
import {parse, stringify, toJSON, fromJSON} from 'flatted';
import thesoap from 'soap';
let soap:any = thesoap;
try {
soap = require('soap');
} catch (error) {
//my hackish way to make soap work on both esm and cjs
//theshoap on esm is undefined
//On esm require is not defined, however on cjs require can be used.
//So we try to use require and if it fails we use the thesoap module
}
import {AuditRecord} from '@digigov-oss/gsis-audit-record-db';
/**
* SOAP client for getNncIdentity
* @class Soap
* @description SOAP client for getNncIdentity
* @param {string} wsdl - The URL of the SOAP service
* @param {string} username
* @param {string} password
* @param {AuditRecord} auditRecord
*/
class Soap {
private _client: any;
private _wsdl: string;
private _username: string;
private _password: string;
private _auditRecord: AuditRecord;
constructor(wsdl: string, username: string, password: string,auditRecord: AuditRecord) {
this._wsdl = "afm2dataService.wsdl";
this._username = username;
this._password = password;
this._auditRecord = auditRecord;
}
public async init() {
try {
const client = await soap.createClientAsync(this._wsdl, {
wsdl_headers: {
'Authorization': 'Basic ' + Buffer.from(`${this._username}:${this._password}`).toString('base64'),
},
});
this._client = client;
return client;
} catch (e) {
throw e;
}
}
public async getAmka(vat:string) {
try {
const client = await this.init();
var options = {
hasNonce: true,
actor: 'actor'
};
var wsSecurity = new soap.WSSecurity(this._username, this._password, options)
client.setSecurity(wsSecurity);
const auditRecord = this._auditRecord;
const args = {
auditRecord: auditRecord,
afm2dataInputRecord:{
afm:vat
}
}
//return stringify(client);
const result = await client.afm2dataAsync(args);
return result[0];//.getNncIdentityOutputRecord;
} catch (e) {
throw e;
}
}
}
export default Soap;
\ No newline at end of file
{
"user":"username",
"pass":"password"
}
\ No newline at end of file
import getAmka from '../src/index';
import config from './config.json';
const test = async () => {
try {
const Amka = await getAmka("052704062", config.user, config.pass);
return Amka;
} catch (error) {
console.log(error);
}
}
test().then((amka) => { console.log('afm2dataOutputRecord',amka); });
\ No newline at end of file
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
// "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
// "module": "esnext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
"lib": ["ESNext"], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
"declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
// "outDir": "dist", /* Redirect output structure to the directory. */
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
// "removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
/* Module Resolution Options */
"moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
"baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
"allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
"paths": {
},
"resolveJsonModule": true, /* Allow accessing JSON files with require() */
},
"include": [
"src/**/*.json",
"src/*.ts",
"src/**/*.ts"
],
"exclude": [
"node_modules",
"dist",
"**/*.spec.ts",
"**/*.d.ts"
],
}
\ No newline at end of file
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "dist/cjs",
"target": "es2015"
}
}
\ No newline at end of file
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"module": "esnext",
"outDir": "dist/esm",
"target": "esnext"
}
}
\ No newline at end of file
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@cspotcode/source-map-consumer@0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==
"@cspotcode/source-map-support@0.7.0":
version "0.7.0"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5"
integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==
dependencies:
"@cspotcode/source-map-consumer" "0.8.0"
"@digigov-oss/gsis-audit-record-db@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@digigov-oss/gsis-audit-record-db/-/gsis-audit-record-db-1.0.2.tgz#6cf3ce301554c9d88c2fcc00ef9f7bbb7138794e"
integrity sha512-cqKMO2eugcoL237R2xn9fg4H/z1SrwgLn+O7++Tu1Gomd0fEeXgUfuKC/c7hfe7fWC38EUqMmfCt2gx0miC/Zw==
"@tsconfig/node10@^1.0.7":
version "1.0.8"
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
"@tsconfig/node12@^1.0.7":
version "1.0.9"
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
"@tsconfig/node14@^1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
"@tsconfig/node16@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
"@types/node@^16.9.0":
version "16.11.21"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.21.tgz#474d7589a30afcf5291f59bd49cca9ad171ffde4"
integrity sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==
"@xmldom/xmldom@^0.7.0":