From 44bf2792f56b7050c58bda36adbfb2b45accaf71 Mon Sep 17 00:00:00 2001 From: Ryan Willis Date: Tue, 23 Jul 2024 12:26:42 -0700 Subject: [PATCH] [APP-15547] update to use new createIntegrationHelpers --- .github/workflows/peril.yml | 90 -------- package.json | 9 +- src/constants.ts | 44 ++-- src/entities.ts | 125 ++++++++++ src/helpers.ts | 8 + .../__snapshots__/index.test.ts.snap | 2 + src/steps/active-directory/converters.test.ts | 27 +-- src/steps/active-directory/converters.ts | 18 +- .../ms-defender/logon-user/converters.test.ts | 16 +- .../ms-defender/logon-user/converters.ts | 7 +- .../ms-defender/machine/converters.test.ts | 16 +- src/steps/ms-defender/machine/converters.ts | 17 +- .../vulnerabilities/converters.test.ts | 14 +- .../ms-defender/vulnerabilities/converters.ts | 7 +- src/types.ts | 10 +- yarn.lock | 214 ++++++++++++------ 16 files changed, 335 insertions(+), 289 deletions(-) delete mode 100644 .github/workflows/peril.yml create mode 100644 src/entities.ts create mode 100644 src/helpers.ts diff --git a/.github/workflows/peril.yml b/.github/workflows/peril.yml deleted file mode 100644 index a9950a6..0000000 --- a/.github/workflows/peril.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: 'Peril' - -on: - pull_request: - -env: - TRANSPONDER_DOCKER_IMAGE: 081157560428.dkr.ecr.us-east-1.amazonaws.com/transponder:1 - SECURITY_SCAN_IMAGE: ghcr.io/jupiterone/security-scan:latest - -jobs: - Peril: - name: Peril - permissions: - id-token: write - contents: read - packages: read - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: 18.x - - - name: Run build - run: yarn install - - - name: Get Variables - id: get-vars - run: | - if [[ "${GITHUB_REF}" == 'ref/head/main' && "${GITHUB_EVENT_NAME}" == 'push' ]]; - then - echo "aws-oidc-role=arn:aws:iam::081157560428:role/github-main-role" >> $GITHUB_OUTPUT - else - echo "aws-oidc-role=arn:aws:iam::081157560428:role/github-pull-request-role" >> $GITHUB_OUTPUT - fi - - - name: Configure aws credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - role-to-assume: ${{ steps.get-vars.outputs.aws-oidc-role }} - role-session-name: pr-role-session - aws-region: us-east-1 - - - name: ECR login - uses: aws-actions/amazon-ecr-login@v1 - id: amazon-ecr-login - - - name: Login to GHCR - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.PACKAGE_TOKEN }} - - - name: Pull security-scan - run: | - docker pull $SECURITY_SCAN_IMAGE - - - name: Run security-scan - run: | - docker run \ - --user root \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v `pwd`:`pwd` \ - -e AWS_ACCESS_KEY_ID=${{ env.AWS_ACCESS_KEY_ID }} \ - -e AWS_SECRET_ACCESS_KEY=${{ env.AWS_SECRET_ACCESS_KEY }} \ - -e AWS_SESSION_TOKEN=${{ env.AWS_SESSION_TOKEN }} \ - -e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \ - -e GITHUB_REF_NAME=$GITHUB_REF_NAME \ - -e GITHUB_RUN_NUMBER=$GITHUB_RUN_NUMBER \ - -e GITHUB_SERVER_URL=$GITHUB_SERVER_URL \ - -e GITHUB_RUN_ID=$GITHUB_RUN_ID \ - -e MODE=ci \ - -w `pwd` $SECURITY_SCAN_IMAGE - - - name: Pull transponder - run: | - docker pull $TRANSPONDER_DOCKER_IMAGE - - - name: Run transponder - run: | - docker run --rm -v `pwd`:`pwd` -w `pwd` \ - -e J1_API_KEY=${{ secrets.J1_API_KEY_TRANSPONDER }} \ - -e J1_API_DOMAIN=${{ secrets.J1_API_DOMAIN_TRANSPONDER }} \ - -e J1_ACCOUNT_ID=${{ secrets.J1_ACCOUNT_ID_TRANSPONDER }} \ - $TRANSPONDER_DOCKER_IMAGE diff --git a/package.json b/package.json index cca79cc..d10a74a 100644 --- a/package.json +++ b/package.json @@ -45,13 +45,10 @@ "@microsoft/microsoft-graph-types": "^2.24.0", "node-fetch": "2" }, - "peerDependencies": { - "@jupiterone/integration-sdk-core": "^12.2.5" - }, "devDependencies": { - "@jupiterone/integration-sdk-core": "^12.2.5", - "@jupiterone/integration-sdk-dev-tools": "^12.2.5", - "@jupiterone/integration-sdk-testing": "^12.2.5", + "@jupiterone/integration-sdk-core": "^13.2.0", + "@jupiterone/integration-sdk-dev-tools": "^13.2.0", + "@jupiterone/integration-sdk-testing": "^13.2.0", "@types/node": "^20.11.30", "auto": "^10.36.5", "@types/node-fetch": "^2.6.2" diff --git a/src/constants.ts b/src/constants.ts index 16243f8..02f9abb 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -5,6 +5,14 @@ import { StepMappedRelationshipMetadata, StepRelationshipMetadata, } from '@jupiterone/integration-sdk-core'; +import { + ACCOUNT_ENTITY, + ENDPOINT_ENTITY, + LOGON_USER_ENTITY, + MACHINE_ENTITY, + USER_ENTITY, + VULNERABILITY_ENTITY, +} from './entities'; export const Steps: Record< | 'FETCH_ACCOUNT' @@ -38,36 +46,12 @@ export const Entities: Record< 'ACCOUNT' | 'MACHINE' | 'LOGON_USER' | 'USER' | 'VULNERABILITY' | 'ENDPOINT', StepEntityMetadata > = { - ACCOUNT: { - resourceName: 'Account', - _type: 'microsoft_defender_account', - _class: ['Account'], - }, - MACHINE: { - resourceName: 'Machine', - _type: 'microsoft_defender_machine', - _class: ['HostAgent'], - }, - LOGON_USER: { - resourceName: 'Logon User', - _type: 'microsoft_defender_logon_user', - _class: ['User'], - }, - USER: { - resourceName: 'User', - _type: 'microsoft_defender_user', - _class: ['User'], - }, - VULNERABILITY: { - resourceName: 'Vulnerability', - _type: 'microsoft_defender_vulnerability', - _class: ['Finding'], - }, - ENDPOINT: { - resourceName: 'Device/Machine/Host', - _type: 'user_endpoint', - _class: ['Device'], - }, + ACCOUNT: ACCOUNT_ENTITY, + MACHINE: MACHINE_ENTITY, + LOGON_USER: LOGON_USER_ENTITY, + USER: USER_ENTITY, + VULNERABILITY: VULNERABILITY_ENTITY, + ENDPOINT: ENDPOINT_ENTITY, }; export const Relationships: Record< diff --git a/src/entities.ts b/src/entities.ts new file mode 100644 index 0000000..5b8dc9e --- /dev/null +++ b/src/entities.ts @@ -0,0 +1,125 @@ +import { SchemaType } from '@jupiterone/integration-sdk-core'; +import { createEntityType, createEntityMetadata } from './helpers'; + +const StringNullUndefined = SchemaType.Optional( + SchemaType.Union([SchemaType.String(), SchemaType.Null()]), +); + +export const [ACCOUNT_ENTITY, assignAccount] = createEntityMetadata({ + resourceName: 'Account', + _class: ['Account'], + _type: createEntityType('account'), + description: 'A Microsoft Defender Endpoint account', + schema: SchemaType.Object({ + organizationName: StringNullUndefined, + defaultDomain: SchemaType.Optional(SchemaType.String()), + verifiedDomains: SchemaType.Optional(SchemaType.Array(SchemaType.String())), + }), +}); + +export const [MACHINE_ENTITY, assignMachine] = createEntityMetadata({ + resourceName: 'Machine', + _class: ['HostAgent'], + _type: createEntityType('machine'), + description: 'A Microsoft Defender Endpoint machine', + schema: SchemaType.Object({ + firstSeenOn: SchemaType.Optional(SchemaType.Number()), + agentVersion: SchemaType.String(), + defenderAvStatus: SchemaType.String(), + riskScore: SchemaType.String(), + computerDnsName: SchemaType.String(), + rbacGroupId: SchemaType.Number(), + rbacGroupName: SchemaType.Union([SchemaType.String(), SchemaType.Null()]), + machineTags: SchemaType.Array(SchemaType.String()), + onboardingStatus: SchemaType.String(), + managedBy: SchemaType.String(), + managedByStatus: SchemaType.String(), + ipAddress: SchemaType.Array(SchemaType.String()), + macAddress: SchemaType.Array(SchemaType.String()), + aadDeviceId: SchemaType.Union([SchemaType.String(), SchemaType.Null()]), + }), +}); + +export const [LOGON_USER_ENTITY, assignLogonUser] = createEntityMetadata({ + resourceName: 'Logon User', + _class: ['User'], + _type: createEntityType('logon_user'), + description: 'A Microsoft Defender Endpoint Logon User', + schema: SchemaType.Object({ + domain: StringNullUndefined, + firstSeenOn: SchemaType.Optional(SchemaType.Number()), + lastSeenOn: SchemaType.Optional(SchemaType.Number()), + logonTypes: SchemaType.String(), + }), +}); + +export const [USER_ENTITY, assignUser] = createEntityMetadata({ + resourceName: 'User', + _class: ['User'], + _type: createEntityType('user'), + description: 'A Microsoft Defender Endpoint user', + schema: SchemaType.Object({ + businessPhones: SchemaType.Optional(SchemaType.Array(SchemaType.String())), + givenName: StringNullUndefined, + jobTitle: StringNullUndefined, + mail: StringNullUndefined, + mobilePhone: StringNullUndefined, + officeLocation: StringNullUndefined, + preferredLanguage: StringNullUndefined, + surname: StringNullUndefined, + userPrincipalName: StringNullUndefined, + }), +}); + +export const [VULNERABILITY_ENTITY, assignVulnerability] = createEntityMetadata( + { + resourceName: 'Vulnerability', + _class: ['Finding'], + _type: createEntityType('vulnerability'), + description: 'A Microsoft Defender Endpoint vulnerability', + schema: SchemaType.Object({ + id: SchemaType.String(), + publishedOn: SchemaType.Optional(SchemaType.Number()), + exposedMachines: SchemaType.Number(), + blocking: SchemaType.Boolean(), + }), + }, +); + +export const [ENDPOINT_ENTITY, assignEndpoint] = createEntityMetadata({ + resourceName: 'Device/Machine/Host', + _class: ['Device'], + _type: 'user_endpoint', + description: 'A Microsoft Defender Endpoint entity', + schema: SchemaType.Object({ + computerDnsName: SchemaType.String(), + firstSeenOn: SchemaType.Optional(SchemaType.Number()), + osPlatform: SchemaType.String(), + osProcessor: SchemaType.Optional(SchemaType.String()), + lastIpAddress: SchemaType.String(), + lastExternalIpAddress: SchemaType.String(), + agentVersion: SchemaType.String(), + osBuild: SchemaType.Union([SchemaType.Number(), SchemaType.Null()]), + healthStatus: SchemaType.String(), + deviceValue: SchemaType.String(), + rbacGroupId: SchemaType.Number(), + rbacGroupName: SchemaType.Union([SchemaType.String(), SchemaType.Null()]), + riskScore: SchemaType.String(), + exposureLevel: SchemaType.String(), + isAadJoined: SchemaType.Union([SchemaType.Boolean(), SchemaType.Null()]), + aadDeviceId: SchemaType.Union([SchemaType.String(), SchemaType.Null()]), + machineTags: SchemaType.Array(SchemaType.String()), + defenderAvStatus: SchemaType.String(), + onboardingStatus: SchemaType.String(), + osArchitecture: SchemaType.String(), + managedBy: SchemaType.String(), + managedByStatus: SchemaType.String(), + vmId: SchemaType.Optional(SchemaType.String()), + cloudProvider: SchemaType.Optional(SchemaType.String()), + resourceId: SchemaType.Optional(SchemaType.String()), + subscriptionId: SchemaType.Optional(SchemaType.String()), + ipAddresses: SchemaType.Array(SchemaType.String()), + ipAddress: SchemaType.Array(SchemaType.String()), + macAddress: SchemaType.Array(SchemaType.String()), + }), +}); diff --git a/src/helpers.ts b/src/helpers.ts new file mode 100644 index 0000000..aa502d4 --- /dev/null +++ b/src/helpers.ts @@ -0,0 +1,8 @@ +import { createIntegrationHelpers } from '@jupiterone/integration-sdk-core'; +import { typeboxClassSchemaMap } from '@jupiterone/data-model'; + +export const { createEntityType, createEntityMetadata } = + createIntegrationHelpers({ + integrationName: 'microsoft_defender', + classSchemaMap: typeboxClassSchemaMap, + }); diff --git a/src/steps/active-directory/__snapshots__/index.test.ts.snap b/src/steps/active-directory/__snapshots__/index.test.ts.snap index c59c244..71c5a48 100644 --- a/src/steps/active-directory/__snapshots__/index.test.ts.snap +++ b/src/steps/active-directory/__snapshots__/index.test.ts.snap @@ -75,6 +75,7 @@ exports[`#fetchAccount 1`] = ` "id": "19ae0f99-6fc6-444b-bd54-97504efc66ad", "name": "JupiterOne Azure Integration Development", "organizationName": "JupiterOne Azure Integration Development", + "vendor": "Microsoft Defender", "verifiedDomains": [ "j1AzureIntegrationDev.onmicrosoft.com", ], @@ -153,6 +154,7 @@ exports[`#fetchAccount 1`] = ` "id": "19ae0f99-6fc6-444b-bd54-97504efc66ad", "name": "JupiterOne Azure Integration Development", "organizationName": "JupiterOne Azure Integration Development", + "vendor": "Microsoft Defender", "verifiedDomains": [ "j1AzureIntegrationDev.onmicrosoft.com", ], diff --git a/src/steps/active-directory/converters.test.ts b/src/steps/active-directory/converters.test.ts index 9b5c39b..298ac7b 100644 --- a/src/steps/active-directory/converters.test.ts +++ b/src/steps/active-directory/converters.test.ts @@ -7,6 +7,7 @@ import { getMockOrganization, getMockUser, } from '../../../test/mocks'; +import { ACCOUNT_ENTITY, USER_ENTITY } from '../../entities'; test('#createAccountEntityWithOrganization', () => { expect( @@ -14,31 +15,9 @@ test('#createAccountEntityWithOrganization', () => { getMockInstance(), getMockOrganization(), ), - ).toMatchGraphObjectSchema({ - _class: ['Account'], - schema: { - properties: { - _type: { const: 'microsoft_defender_account' }, - _rawData: { - type: 'array', - items: { type: 'object' }, - }, - }, - }, - }); + ).toMatchGraphObjectSchema(ACCOUNT_ENTITY); }); test('#createUserEntity', () => { - expect(createUserEntity(getMockUser())).toMatchGraphObjectSchema({ - _class: ['User'], - schema: { - properties: { - _type: { const: 'microsoft_defender_user' }, - _rawData: { - type: 'array', - items: { type: 'object' }, - }, - }, - }, - }); + expect(createUserEntity(getMockUser())).toMatchGraphObjectSchema(USER_ENTITY); }); diff --git a/src/steps/active-directory/converters.ts b/src/steps/active-directory/converters.ts index cc760cd..7c44a50 100644 --- a/src/steps/active-directory/converters.ts +++ b/src/steps/active-directory/converters.ts @@ -8,6 +8,7 @@ import { } from '@jupiterone/integration-sdk-core'; import { Organization, User } from '@microsoft/microsoft-graph-types'; import { Entities } from '../../constants'; +import { assignAccount, assignUser } from '../../entities'; export function createAccountEntityWithOrganization( instance: IntegrationInstance, @@ -26,17 +27,16 @@ export function createAccountEntityWithOrganization( source: { organization, }, - assign: { - _class: Entities.ACCOUNT._class, + assign: assignAccount({ _key: `${Entities.ACCOUNT._type}:${instance.id}`, - _type: Entities.ACCOUNT._type, id: organization.id, - name: organization.displayName, + name: organization.displayName ?? instance.name, displayName: instance.name, organizationName: organization.displayName, defaultDomain, verifiedDomains, - }, + vendor: 'Microsoft Defender', + }), }, }); } @@ -45,13 +45,11 @@ export function createUserEntity(data: User): Entity { return createIntegrationEntity({ entityData: { source: data, - assign: { - _class: Entities.USER._class, - _type: Entities.USER._type, + assign: assignUser({ _key: `${Entities.USER._type}:${data.id}`, id: data.id, name: data.displayName || '', - username: data.userPrincipalName, + username: data.userPrincipalName || '', businessPhones: data.businessPhones, displayName: data.displayName || '', givenName: data.givenName, @@ -63,7 +61,7 @@ export function createUserEntity(data: User): Entity { surname: data.surname, userPrincipalName: data.userPrincipalName, active: true, - }, + }), }, }); } diff --git a/src/steps/ms-defender/logon-user/converters.test.ts b/src/steps/ms-defender/logon-user/converters.test.ts index 21cff72..fee02b9 100644 --- a/src/steps/ms-defender/logon-user/converters.test.ts +++ b/src/steps/ms-defender/logon-user/converters.test.ts @@ -1,17 +1,9 @@ import { createLogonUserEntity } from './converters'; import { getMockLogonUser } from '../../../../test/mocks'; +import { LOGON_USER_ENTITY } from '../../../entities'; test('#createLogonUserEntity', () => { - expect(createLogonUserEntity(getMockLogonUser())).toMatchGraphObjectSchema({ - _class: ['User'], - schema: { - properties: { - _type: { const: 'microsoft_defender_logon_user' }, - _rawData: { - type: 'array', - items: { type: 'object' }, - }, - }, - }, - }); + expect(createLogonUserEntity(getMockLogonUser())).toMatchGraphObjectSchema( + LOGON_USER_ENTITY, + ); }); diff --git a/src/steps/ms-defender/logon-user/converters.ts b/src/steps/ms-defender/logon-user/converters.ts index 70a06ba..74194bb 100644 --- a/src/steps/ms-defender/logon-user/converters.ts +++ b/src/steps/ms-defender/logon-user/converters.ts @@ -8,6 +8,7 @@ import { } from '@jupiterone/integration-sdk-core'; import { UserLogon } from '../../../types'; import { Entities } from '../../../constants'; +import { assignLogonUser } from '../../../entities'; export function createLogonUserEntityKey(data: UserLogon): string { return `${Entities.LOGON_USER._type}:${data.id}`; @@ -22,10 +23,8 @@ export function createLogonUserEntity(data: UserLogon): Entity { return createIntegrationEntity({ entityData: { source: data, - assign: { + assign: assignLogonUser({ _key: createLogonUserEntityKey(data), - _class: Entities.LOGON_USER._class, - _type: Entities.LOGON_USER._type, id: data.id, name: data.accountName, domain: data.accountDomain, @@ -35,7 +34,7 @@ export function createLogonUserEntity(data: UserLogon): Entity { lastSeenOn: parseTimePropertyValue(data.lastSeen), logonTypes: data.logonTypes, active: true, - }, + }), }, }); } diff --git a/src/steps/ms-defender/machine/converters.test.ts b/src/steps/ms-defender/machine/converters.test.ts index 8a68147..91210c1 100644 --- a/src/steps/ms-defender/machine/converters.test.ts +++ b/src/steps/ms-defender/machine/converters.test.ts @@ -4,20 +4,12 @@ import { } from './converters'; import { getMockMachine } from '../../../../test/mocks'; import { IpAddress } from '../../../types'; +import { MACHINE_ENTITY } from '../../../entities'; test('#createMachineEntity', () => { - expect(createMachineEntity(getMockMachine())).toMatchGraphObjectSchema({ - _class: ['HostAgent'], - schema: { - properties: { - _type: { const: 'microsoft_defender_machine' }, - _rawData: { - type: 'array', - items: { type: 'object' }, - }, - }, - }, - }); + expect(createMachineEntity(getMockMachine())).toMatchGraphObjectSchema( + MACHINE_ENTITY, + ); }); describe('extractUniquePublicMacAddresses Tests', () => { diff --git a/src/steps/ms-defender/machine/converters.ts b/src/steps/ms-defender/machine/converters.ts index 2d4dd8f..ea199c4 100644 --- a/src/steps/ms-defender/machine/converters.ts +++ b/src/steps/ms-defender/machine/converters.ts @@ -9,6 +9,7 @@ import { import { Endpoint, IpAddress, Machine } from '../../../types'; import { Entities } from '../../../constants'; import { uniq, compact } from 'lodash'; +import { assignEndpoint, assignMachine } from '../../../entities'; export function createMachineEntity(data: Machine): Entity { const macAddress = extractUniquePublicMacAddresses(data.ipAddresses); @@ -19,13 +20,11 @@ export function createMachineEntity(data: Machine): Entity { return createIntegrationEntity({ entityData: { source: data, - assign: { - _class: Entities.MACHINE._class, - _type: Entities.MACHINE._type, + assign: assignMachine({ _key: `${Entities.MACHINE._type}:${data.id}`, id: data.id, firstSeenOn: parseTimePropertyValue(data.firstSeen), - lastSeenOn: parseTimePropertyValue(data.lastSeen), + lastSeenOn: parseTimePropertyValue(data.lastSeen) ?? null, agentVersion: data.agentVersion, defenderAvStatus: data.defenderAvStatus, riskScore: data.riskScore, @@ -53,7 +52,7 @@ export function createMachineEntity(data: Machine): Entity { 'vulnerability-detection', 'container-security', ], - }, + }), }, }); } @@ -67,9 +66,7 @@ export function createEndpointEntity(data: Endpoint): Entity { return createIntegrationEntity({ entityData: { source: data, - assign: { - _class: Entities.ENDPOINT._class, - _type: Entities.ENDPOINT._type, + assign: assignEndpoint({ _key: `${Entities.ENDPOINT._type}.${data.id}`, id: data.id, name: @@ -78,7 +75,7 @@ export function createEndpointEntity(data: Endpoint): Entity { `${data.managedBy || 'Unknown User'}'s Device`, computerDnsName: data.computerDnsName, firstSeenOn: parseTimePropertyValue(data.firstSeen), - lastSeenOn: parseTimePropertyValue(data.lastSeen), + lastSeenOn: parseTimePropertyValue(data.lastSeen) ?? null, osPlatform: data.osPlatform, osVersion: data.osVersion || undefined, osProcessor: data.osProcessor || undefined, @@ -115,7 +112,7 @@ export function createEndpointEntity(data: Endpoint): Entity { model: null, serial: null, deviceId: data.id, - }, + }), }, }); } diff --git a/src/steps/ms-defender/vulnerabilities/converters.test.ts b/src/steps/ms-defender/vulnerabilities/converters.test.ts index 582fa7a..aa4a93d 100644 --- a/src/steps/ms-defender/vulnerabilities/converters.test.ts +++ b/src/steps/ms-defender/vulnerabilities/converters.test.ts @@ -1,19 +1,9 @@ import { createVulnerabilityEntity } from './converters'; import { getMockVulnerability } from '../../../../test/mocks'; +import { VULNERABILITY_ENTITY } from '../../../entities'; test('#createVulnerabilityEntity', () => { expect( createVulnerabilityEntity(getMockVulnerability()), - ).toMatchGraphObjectSchema({ - _class: ['Finding'], - schema: { - properties: { - _type: { const: 'microsoft_defender_vulnerability' }, - _rawData: { - type: 'array', - items: { type: 'object' }, - }, - }, - }, - }); + ).toMatchGraphObjectSchema(VULNERABILITY_ENTITY); }); diff --git a/src/steps/ms-defender/vulnerabilities/converters.ts b/src/steps/ms-defender/vulnerabilities/converters.ts index cb7d62d..70dc151 100644 --- a/src/steps/ms-defender/vulnerabilities/converters.ts +++ b/src/steps/ms-defender/vulnerabilities/converters.ts @@ -10,6 +10,7 @@ import { import { Vulnerability } from '../../../types'; import { Entities, MappedRelationships } from '../../../constants'; +import { assignVulnerability } from '../../../entities'; export function createVulnerabilityKey(id: string): string { return `${Entities.VULNERABILITY._type}:${id}`; @@ -19,10 +20,8 @@ export function createVulnerabilityEntity(data: Vulnerability): Entity { return createIntegrationEntity({ entityData: { source: data, - assign: { + assign: assignVulnerability({ id: data.id, - _type: Entities.VULNERABILITY._type, - _class: Entities.VULNERABILITY._class, _key: createVulnerabilityKey(data.id), name: data.name, displayName: data.name, @@ -39,7 +38,7 @@ export function createVulnerabilityEntity(data: Vulnerability): Entity { production: false, public: data.publicExploit, numericSeverity: data.cvssV3, - }, + }), }, }); } diff --git a/src/types.ts b/src/types.ts index 0890456..717d5eb 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,9 +15,9 @@ export interface Machine { version: string; lastIpAddress: string; lastExternalIpAddress: string; - osBuild: number; + osBuild: number | null; rbacGroupId: number; - rbacGroupName?: string; + rbacGroupName: string | null; exposureLevel: string; isAadJoined: boolean; aadDeviceId: string | null; @@ -88,15 +88,15 @@ export interface Endpoint { lastIpAddress: string; lastExternalIpAddress: string; agentVersion: string; - osBuild: number; + osBuild: number | null; healthStatus: string; deviceValue: string; rbacGroupId: number; - rbacGroupName: string; + rbacGroupName: string | null; riskScore: string; exposureLevel: string; isAadJoined: boolean; - aadDeviceId: string; + aadDeviceId: string | null; machineTags: string[]; defenderAvStatus: string; onboardingStatus: string; diff --git a/yarn.lock b/yarn.lock index 9565bdb..60f904f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1394,6 +1394,13 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@ewoudenberg/difflib@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@ewoudenberg/difflib/-/difflib-0.1.0.tgz#a2ae5d3321ffa7c1b47691cf0db189d1264aaaa4" + integrity sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A== + dependencies: + heap ">= 0.2.0" + "@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" @@ -1671,29 +1678,31 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jupiterone/data-model@^0.54.0": - version "0.54.0" - resolved "https://registry.yarnpkg.com/@jupiterone/data-model/-/data-model-0.54.0.tgz#904b2629e2606b9fe334fa480472caa8c242bd20" - integrity sha512-cBFJT/q/UH40yOQsqAr1O75v64rnwC3bywDO81wWK+B0YbP+RCotzz/VFqgwNAhVb/QMCFuXhJk/ewaz704CoQ== +"@jupiterone/data-model@^0.61.9": + version "0.61.9" + resolved "https://registry.yarnpkg.com/@jupiterone/data-model/-/data-model-0.61.9.tgz#4052f6d30210cb17aac78e246aa2fe71d0cbc2b2" + integrity sha512-5hFbsej5kXAjXGL2UIyGdtB9PXGkfp86c8SQ07wvLQeaVvH+9wv9GgJzNoaPxifo34VwN5z4RSycZ5sgFWRgvw== dependencies: + "@sinclair/typebox" "^0.32.30" ajv "^8.0.0" ajv-formats "^2.0.0" -"@jupiterone/integration-sdk-cli@^12.2.5": - version "12.2.5" - resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-cli/-/integration-sdk-cli-12.2.5.tgz#771254bdf77b1c8bf09a2328dd85c3faa5c726ca" - integrity sha512-bbART+M0qzwIzXJM/Z8mrdguSWDa9Hfy26zjfDglRzlea559V0yJ69wc8UB1ga63mV1y4l6H3ItLhviKcW+FnQ== +"@jupiterone/integration-sdk-cli@^13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-cli/-/integration-sdk-cli-13.2.0.tgz#8ab1c12dcc5ad9766c67581e6a7d08607d7148a3" + integrity sha512-9FRCRb8CG/oFSzkyQPWiWF6U75VsENjxt4DKOEXF+tDs1L8XLUICyIc5+Av/UK3r8ecOku/D6p80/SWu9AIkbw== dependencies: - "@jupiterone/data-model" "^0.54.0" - "@jupiterone/integration-sdk-core" "^12.2.5" - "@jupiterone/integration-sdk-runtime" "^12.2.5" + "@jupiterone/data-model" "^0.61.9" + "@jupiterone/integration-sdk-core" "^13.2.0" + "@jupiterone/integration-sdk-runtime" "^13.2.0" chalk "^4" commander "^9.4.0" + ejs "^3.1.9" fs-extra "^10.1.0" globby "^11.0.0" inquirer-checkbox-plus-prompt "^1.4.2" js-yaml "^4.1.0" - json-diff "^0.5.4" + json-diff "^1.0.6" lodash "^4.17.19" markdown-table "^2.0.0" neo4j-driver "^4.3.3" @@ -1702,21 +1711,23 @@ upath "^1.2.0" url-exists "^1.0.3" -"@jupiterone/integration-sdk-core@^12.2.5": - version "12.2.5" - resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-core/-/integration-sdk-core-12.2.5.tgz#1a86bb176eafa7f441a9ec9313f54e3b899dbd3c" - integrity sha512-kW+/tyjgZfU0gpXoBPUStqIGkuQ2lvy7/o4wvUam+rj2u4mY5trxpIK3LTaOth2xaXl1Fm0Cdlq03dnWbKS5jA== +"@jupiterone/integration-sdk-core@^13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-core/-/integration-sdk-core-13.2.0.tgz#00ba41ca3af367e64f1552084622600afadda714" + integrity sha512-CfMWvS136NPMhucDWEwOPpFjEhR1Gk0/QC1M1TjpORBvXP0+tEwMeG5m40vzM8BOYummCxyHvkv3DX7hxda3SA== dependencies: - "@jupiterone/data-model" "^0.54.0" + "@jupiterone/data-model" "^0.61.9" + "@jupiterone/integration-sdk-entity-validator" "^13.2.0" + "@sinclair/typebox" "^0.32.30" lodash "^4.17.21" -"@jupiterone/integration-sdk-dev-tools@^12.2.5": - version "12.2.5" - resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-dev-tools/-/integration-sdk-dev-tools-12.2.5.tgz#93c78dd541b5fc7561da4ab6d54cc770dedbc8d3" - integrity sha512-BylFtiVAYYaKt9gn0bCgea7yFcGVmIQlezIPvi8YHMR63FOURdMNiYVNMAAR4b7Yce+ozxHrQ/mIogrvsPS/oA== +"@jupiterone/integration-sdk-dev-tools@^13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-dev-tools/-/integration-sdk-dev-tools-13.2.0.tgz#d7ad1be18d3cda6ed75062a1263fc6dca15cb7ee" + integrity sha512-S6/zioIXuA9hyqZZsM3cc2sQzrJD9FHPCsTL00lDr6tnCo0RzCUILEyetn+ZhQ8pt67USpoHn6S5FZ0tqzi/QA== dependencies: - "@jupiterone/integration-sdk-cli" "^12.2.5" - "@jupiterone/integration-sdk-testing" "^12.2.5" + "@jupiterone/integration-sdk-cli" "^13.2.0" + "@jupiterone/integration-sdk-testing" "^13.2.0" "@types/jest" "^29.5.3" "@types/node" "^18" "@typescript-eslint/eslint-plugin" "^6.2.1" @@ -1731,14 +1742,23 @@ prettier "^3.0.0" ts-jest "^29.1.1" ts-node "^9.1.1" - typescript "^5.1.6" + typescript "^5.5.2" + +"@jupiterone/integration-sdk-entity-validator@^13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-entity-validator/-/integration-sdk-entity-validator-13.2.0.tgz#88b43e1b091bc17e65894c1e3378a1587a8194ea" + integrity sha512-uDr3einGneDJJIEI5LB4XEdlPS/4ZpT/ctBhO/17v+TdLuF+HTK5YkqziHnsugEUYzV93V6Rp2KCEQxCS09UtQ== + dependencies: + ajv "^8.12.0" + ajv-formats "^3.0.1" + prettier "^3.2.5" -"@jupiterone/integration-sdk-runtime@^12.2.5": - version "12.2.5" - resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-runtime/-/integration-sdk-runtime-12.2.5.tgz#b65324705ac514ff0d3b3ae19cb4d91f369d7152" - integrity sha512-0JkHNKZm5OgvIBs3kRIk0XjIfCIKKhr4UjwYPEENP+0YoZkIlgGAy9p/y5x82mt/PLfP+cQO0NTQ1NvwkDGceQ== +"@jupiterone/integration-sdk-runtime@^13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-runtime/-/integration-sdk-runtime-13.2.0.tgz#ec96a48968a666b53fdc5db54b71b842f4c8d7f3" + integrity sha512-t5b5Vdid8DKeQpEHVWVESXYlei1b20ulD/jSXK8WJPNgrK9db17cfWqEzGkRC/zDKfI0qsFhSa7Svon7THOEWA== dependencies: - "@jupiterone/integration-sdk-core" "^12.2.5" + "@jupiterone/integration-sdk-core" "^13.2.0" "@lifeomic/alpha" "^5.2.0" "@lifeomic/attempt" "^3.0.3" async-sema "^3.1.0" @@ -1754,13 +1774,13 @@ p-queue "^6.3.0" rimraf "^3.0.2" -"@jupiterone/integration-sdk-testing@^12.2.5": - version "12.2.5" - resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-testing/-/integration-sdk-testing-12.2.5.tgz#a87952e4218dbad01781a9a13f386bdc246edada" - integrity sha512-JRodBBMNQKW7JDcgNJm7oSyaPGb2wVTQp+97sqsQN/GMfQMLAxQkvgPDJN5aTXMUdBTC4lPLij3B9Q8oYCC+og== +"@jupiterone/integration-sdk-testing@^13.2.0": + version "13.2.0" + resolved "https://registry.yarnpkg.com/@jupiterone/integration-sdk-testing/-/integration-sdk-testing-13.2.0.tgz#68aab49fc45a0ec6466b3ca9a0a0baf1922eb41c" + integrity sha512-huubIaruglKaURwt+imJP80Xx3sMsjlNK3Pyy0jtpz7JrBTriVkLxcEM/pXXFl+mllKlhVzN0luSp5iaX93PUA== dependencies: - "@jupiterone/integration-sdk-core" "^12.2.5" - "@jupiterone/integration-sdk-runtime" "^12.2.5" + "@jupiterone/integration-sdk-core" "^13.2.0" + "@jupiterone/integration-sdk-runtime" "^13.2.0" "@pollyjs/adapter-node-http" "^6.0.5" "@pollyjs/core" "^6.0.5" "@pollyjs/persister-fs" "^6.0.5" @@ -2036,6 +2056,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@sinclair/typebox@^0.32.30": + version "0.32.35" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.32.35.tgz#41c04473509478df9895800018a3d3ae7d40fb3c" + integrity sha512-Ul3YyOTU++to8cgNkttakC0dWvpERr6RYoHO2W47DLbFvrwBDJUY31B1sImH6JZSYc4Kt4PyHtoPNu+vL2r2dA== + "@sindresorhus/fnv1a@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@sindresorhus/fnv1a/-/fnv1a-2.0.1.tgz#2aefdfa7eb5b7f29a7936978218e986c70c603fc" @@ -3002,6 +3027,13 @@ ajv-formats@^2.0.0: dependencies: ajv "^8.0.0" +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -3022,6 +3054,16 @@ ajv@^8.0.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.12.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -3162,6 +3204,11 @@ async-sema@^3.1.0: resolved "https://registry.yarnpkg.com/async-sema/-/async-sema-3.1.1.tgz#e527c08758a0f8f6f9f15f799a173ff3c40ea808" integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg== +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3531,7 +3578,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -chalk@4.1.2, chalk@^4, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: +chalk@4.1.2, chalk@^4, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3606,13 +3653,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-color@~0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" - integrity sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c= - dependencies: - es5-ext "0.8.x" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -3703,6 +3743,11 @@ colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -4019,13 +4064,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -difflib@~0.2.1: - version "0.2.4" - resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" - integrity sha1-teMDYabbAjF21WKJLbhZQKcY9H4= - dependencies: - heap ">= 0.2.0" - dir-glob@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -4070,10 +4108,10 @@ dotenv@^8.0.0, dotenv@^8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== -dreamopt@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" - integrity sha1-2BPM2sjTnYrVJndVFKE92mZNa0s= +dreamopt@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.8.0.tgz#5bcc80be7097e45fc489c342405ab68140a8c1d9" + integrity sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg== dependencies: wordwrap ">=0.0.2" @@ -4104,6 +4142,13 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +ejs@^3.1.9: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.3.886: version "1.3.893" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.893.tgz#9d804c68953b05ede35409dba0d73dd54c077b4d" @@ -4180,11 +4225,6 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es5-ext@0.8.x: - version "0.8.2" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" - integrity sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs= - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4514,6 +4554,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + fast-xml-parser@4.2.5: version "4.2.5" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" @@ -4556,6 +4601,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -5521,6 +5573,16 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + java-properties@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" @@ -5914,14 +5976,14 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-diff@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a" - integrity sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q== +json-diff@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-1.0.6.tgz#63690f695469b6437efaed5bb3d51f011f7cac28" + integrity sha512-tcFIPRdlc35YkYdGxcamJjllUhXWv4n2rK9oJ2RsAzV4FBkuV4ojKEDgcZ+kpKxDmJKv+PFK65+1tVVOnSeEqA== dependencies: - cli-color "~0.1.6" - difflib "~0.2.1" - dreamopt "~0.6.0" + "@ewoudenberg/difflib" "0.1.0" + colors "^1.4.0" + dreamopt "~0.8.0" json-parse-better-errors@^1.0.1: version "1.0.2" @@ -6414,6 +6476,13 @@ minimatch@^3.0.5, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -7137,6 +7206,11 @@ prettier@^3.0.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +prettier@^3.2.5: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -8172,10 +8246,10 @@ typescript-memoize@^1.0.0-alpha.3: resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.1.tgz#02737495d5df6ebf72c07ba0d002e8f4cf5ccfa0" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== -typescript@^5.1.6: - version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== +typescript@^5.5.2: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== typical@^4.0.0: version "4.0.0"