From bbfbca806727fb09460fb36ba04fec2dbd692c97 Mon Sep 17 00:00:00 2001 From: Varun Villait Date: Mon, 16 Jan 2023 13:23:00 -0700 Subject: [PATCH] Add Insights Types, filter_updated param to retrieve, add bulk Retrieve and export Person/Company Response (#46) * add types for insights fields * add recommended_personal_email * update package version * add filter_updated * add gics_sector and mic_exchange * simplify types * add bulk retrieve * change to major version change * update dependencies * fix it for bulk retrieve test * fix tsconfig * lint rules * fix tsconfig * package updates * rename location for bulkEnrichment * upgrade note readme * fix docs link --- .eslintrc.cjs | 6 +- README.md | 26 +- example/index.js | 18 +- example/package.json | 4 +- example/yarn.lock | 8 +- package.json | 12 +- src/endpoints/autocomplete/index.ts | 1 + .../{bulk => bulkEnrichment}/index.ts | 1 + src/endpoints/bulkRetrieve/index.ts | 28 ++ src/endpoints/cleaner/index.ts | 1 + src/endpoints/enrichment/index.ts | 5 +- src/endpoints/identify/index.ts | 5 +- src/endpoints/index.ts | 9 +- src/endpoints/jobTitle/index.ts | 1 + src/endpoints/retrieve/index.ts | 1 + src/endpoints/search/index.ts | 3 +- src/errors.ts | 7 +- src/index.ts | 73 ++-- src/types/bulk-retrieve-types.ts | 27 ++ src/types/bulk-types.ts | 2 +- src/types/cleaner-types.ts | 8 +- src/types/common-types.ts | 377 +++++++++++++++++- src/types/enrichment-types.ts | 2 +- src/types/retrieve-types.ts | 2 + src/types/search-types.ts | 2 +- src/utils/api-utils.ts | 1 + tests/index.test.js | 80 ++-- tsconfig.eslint.json | 5 + yarn.lock | 111 +++--- 29 files changed, 667 insertions(+), 159 deletions(-) rename src/endpoints/{bulk => bulkEnrichment}/index.ts (99%) create mode 100644 src/endpoints/bulkRetrieve/index.ts create mode 100644 src/types/bulk-retrieve-types.ts create mode 100644 tsconfig.eslint.json diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 7bf3a60..d468a31 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -11,12 +11,16 @@ module.exports = { parserOptions: { ecmaVersion: 'latest', sourceType: 'module', - project: './tsconfig.json', + project: './tsconfig.eslint.json', }, plugins: [ '@typescript-eslint', + 'simple-import-sort', ], rules: { 'max-len': 'off', + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error', + 'object-curly-newline': 'off', }, }; diff --git a/README.md b/README.md index b17f8fc..43a7a86 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ This library bundles up PDL API requests into simple function calls, making it e - [🌐 Endpoints](#endpoints) - [📘 Documentation](#documentation) - [Special Note about Search API Support](#special-note) + - [Upgrading to v5.X.X](#upgrading-to-v5) ## 🔧 Installation @@ -72,7 +73,7 @@ PDLJSClient.person.enrichment({ phone: '4155688415' }).then((data) => { }); // By Bulk Enrichment -const records = { +const bulkEnrichmentRecords = { requests: [ { params: { @@ -87,7 +88,7 @@ const records = { ], }; -PDLJSClient.person.bulk(records).then((data) => { +PDLJSClient.person.bulk.enrichment(bulkEnrichmentRecords).then((data) => { console.log(data.items); }).catch((error) => { console.log(error); @@ -128,6 +129,20 @@ PDLJSClient.person.retrieve({ id: 'qEnOZ5Oh0poWnQ1luFBfVw_0000' }).then((data) = console.log(error); }); +// By Bulk Retrieve +const bulkRetrieveRecords = { + requests: [ + { id: 'qEnOZ5Oh0poWnQ1luFBfVw_0000' }, + { id: 'PzFD15NINdBWNULBBkwlig_0000' }, + ], +}; + +PDLJSClient.person.bulk.retrieve(bulkRetrieveRecords).then((data) => { + console.log(data.items); +}).catch((error) => { + console.log(error); +}); + // By Fuzzy Enrichment PDLJSClient.person.identify({ name: 'sean thorne' }).then((data) => { console.log(data); @@ -281,9 +296,10 @@ PDLJSClient.person.identify({ company: 'walmart', sandbox: true }).then((data) = | API Endpoint | PDLJS Function | |-|-| | [Person Enrichment API](https://docs.peopledatalabs.com/docs/enrichment-api) | `PDLJS.person.enrichment({ ...params })` | -| [Person Bulk Person Enrichment API](https://docs.peopledatalabs.com/docs/bulk-enrichment-api) | `PDLJS.person.bulk({ ...records })` | +| [Person Bulk Person Enrichment API](https://docs.peopledatalabs.com/docs/bulk-enrichment-api) | `PDLJS.person.bulk.enrichment({ ...records })` | | [Person Search API](https://docs.peopledatalabs.com/docs/search-api) | SQL: `PDLJS.person.search.sql({ ...params })`
Elasticsearch: `PDLJS.person.search.elastic({ ...params })`| | [Person Retrieve API](https://docs.peopledatalabs.com/docs/person-retrieve-api) | `PDLJS.person.retrieve({ ...params })` | +| [Person Bulk Person Retrieve API](https://docs.peopledatalabs.com/docs/bulk-person-retrieve) | `PDLJS.person.bulk.retrieve({ ...records })` | | [Person Identify API](https://docs.peopledatalabs.com/docs/identify-api) | `PDLJS.person.identify({ ...params })` | **Company Endpoints** @@ -354,3 +370,7 @@ PDLJSClient.company.search.sql({ searchQuery: sqlQuery, size: 10 }).then((data) console.log(error); }); ``` + +#### Upgrading to v5.X.X + +NOTE: When upgrading to v5.X.X from v4.X.X and below, Bulk Enrichment was moved from `PDLJS.person.bulk({ ...records })` to `PDLJS.person.bulk.enrichment({ ...records })` \ No newline at end of file diff --git a/example/index.js b/example/index.js index 409c407..ecdecaa 100644 --- a/example/index.js +++ b/example/index.js @@ -1,7 +1,6 @@ /* eslint no-console: "off" */ import dotenv from 'dotenv'; - import PDLJS from 'peopledatalabs'; dotenv.config({ path: '../.env.local' }); @@ -22,14 +21,14 @@ PDLJSClient.person.identify({ phone: '4155688415' }).then((data) => { console.log(error); }); -const records = { +const bulkEnrichmentRecords = { requests: [ { params: { profile: ['linkedin.com/in/seanthorne'] } }, { params: { profile: ['linkedin.com/in/randrewn'] } }, ], }; -PDLJSClient.person.bulk(records).then((data) => { +PDLJSClient.person.bulk.enrichment(bulkEnrichmentRecords).then((data) => { console.log(data.items); }).catch((error) => { console.log(error); @@ -50,6 +49,19 @@ PDLJSClient.person.retrieve({ id: 'qEnOZ5Oh0poWnQ1luFBfVw_0000' }).then((data) = console.log(error); }); +const bulkRetrieveRecords = { + requests: [ + { id: 'qEnOZ5Oh0poWnQ1luFBfVw_0000' }, + { id: 'PzFD15NINdBWNULBBkwlig_0000' }, + ], +}; + +PDLJSClient.person.bulk.retrieve(bulkRetrieveRecords).then((data) => { + console.log(data.items); +}).catch((error) => { + console.log(error); +}); + // Company APIs PDLJSClient.company.enrichment({ website: 'peopledatalabs.com' }).then((data) => { diff --git a/example/package.json b/example/package.json index ee6af0c..206dc64 100644 --- a/example/package.json +++ b/example/package.json @@ -10,7 +10,7 @@ "author": "People Data Labs", "license": "MIT", "dependencies": { - "dotenv": "^14.2.0", + "dotenv": "^16.0.3", "peopledatalabs": "*" } -} +} \ No newline at end of file diff --git a/example/yarn.lock b/example/yarn.lock index db8878c..90a5102 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -9,10 +9,10 @@ axios@^0.24.0: dependencies: follow-redirects "^1.14.4" -dotenv@^14.2.0: - version "14.3.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-14.3.2.tgz#7c30b3a5f777c79a3429cb2db358eef6751e8369" - integrity sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ== +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== follow-redirects@^1.14.4: version "1.15.1" diff --git a/package.json b/package.json index 62afb5f..54c2bde 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "peopledatalabs", - "version": "4.1.0", + "version": "5.0.0", "description": "JavaScript client with TypeScript support for the People Data Labs API", "type": "module", "main": "dist/index.cjs", @@ -16,7 +16,8 @@ "dev": "microbundle watch -p 6008", "test": "yarn run build && yarn run mocha", "mocha": "mocha --recursive 'tests/**/*.js'", - "pub": "yarn run build && yarn publish" + "pub": "yarn run build && yarn publish", + "lint": "eslint --fix" }, "repository": { "type": "git", @@ -43,11 +44,11 @@ "homepage": "https://docs.peopledatalabs.com/docs/javascript-sdk", "devDependencies": { "@types/lodash": "^4.14.191", - "@typescript-eslint/eslint-plugin": "^5.48.1", - "@typescript-eslint/parser": "^5.48.1", + "@typescript-eslint/eslint-plugin": "^5.48.2", + "@typescript-eslint/parser": "^5.48.2", "chai": "^4.3.7", "dotenv": "^16.0.3", - "eslint": "^8.31.0", + "eslint": "^8.32.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-typescript": "^17.0.0", @@ -55,6 +56,7 @@ "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.32.0", "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-simple-import-sort": "^8.0.0", "eslint-plugin-unused-imports": "^2.0.0", "esm": "^3.2.25", "microbundle": "^0.15.1", diff --git a/src/endpoints/autocomplete/index.ts b/src/endpoints/autocomplete/index.ts index 68b8cfe..3318342 100644 --- a/src/endpoints/autocomplete/index.ts +++ b/src/endpoints/autocomplete/index.ts @@ -1,4 +1,5 @@ import axios from 'axios'; + import { check, errorHandler } from '../../errors'; import type { AutoCompleteParams, AutoCompleteResponse } from '../../types/autocomplete-types'; import { parseRateLimitingResponse } from '../../utils/api-utils'; diff --git a/src/endpoints/bulk/index.ts b/src/endpoints/bulkEnrichment/index.ts similarity index 99% rename from src/endpoints/bulk/index.ts rename to src/endpoints/bulkEnrichment/index.ts index f151ad4..8cae1a0 100644 --- a/src/endpoints/bulk/index.ts +++ b/src/endpoints/bulkEnrichment/index.ts @@ -1,4 +1,5 @@ import axios from 'axios'; + import { check, errorHandler } from '../../errors'; import { BulkPersonEnrichmentParams, BulkPersonEnrichmentResponse } from '../../types/bulk-types'; import { parseRateLimitingResponse } from '../../utils/api-utils'; diff --git a/src/endpoints/bulkRetrieve/index.ts b/src/endpoints/bulkRetrieve/index.ts new file mode 100644 index 0000000..5675def --- /dev/null +++ b/src/endpoints/bulkRetrieve/index.ts @@ -0,0 +1,28 @@ +import axios from 'axios'; + +import { check, errorHandler } from '../../errors'; +import { BulkPersonRetrieveParams, BulkPersonRetrieveResponse } from '../../types/bulk-retrieve-types'; +import { parseRateLimitingResponse } from '../../utils/api-utils'; + +export default (basePath: string, apiKey: string, records: BulkPersonRetrieveParams) => { + const headers = { + 'Content-Type': 'application/json', + 'Accept-Encoding': 'gzip', + 'X-Api-Key': apiKey, + 'User-Agent': 'PDL-JS-SDK', + }; + + return new Promise((resolve, reject) => { + check(records, basePath, apiKey, 'Records', 'bulk').then(() => { + axios.post(`${basePath}/person/retrieve/bulk`, records, { headers }) + .then((response) => { + resolve(parseRateLimitingResponse(response)); + }) + .catch((error) => { + reject(errorHandler(error)); + }); + }).catch((error) => { + reject(error); + }); + }); +}; diff --git a/src/endpoints/cleaner/index.ts b/src/endpoints/cleaner/index.ts index 5dd223c..998c428 100644 --- a/src/endpoints/cleaner/index.ts +++ b/src/endpoints/cleaner/index.ts @@ -1,4 +1,5 @@ import axios from 'axios'; + import { check, errorHandler } from '../../errors'; import { BaseResponse } from '../../types/api-types'; import { CleanerType } from '../../types/cleaner-types'; diff --git a/src/endpoints/enrichment/index.ts b/src/endpoints/enrichment/index.ts index 204a93a..2f026c6 100644 --- a/src/endpoints/enrichment/index.ts +++ b/src/endpoints/enrichment/index.ts @@ -1,9 +1,8 @@ import axios from 'axios'; import _ from 'lodash'; -import { - PersonEnrichmentParams, CompanyEnrichmentParams, EnrichmentType, PersonEnrichmentResponse, CompanyEnrichmentResponse, -} from '../../types/enrichment-types'; + import { check, errorHandler } from '../../errors'; +import { CompanyEnrichmentParams, CompanyEnrichmentResponse, EnrichmentType, PersonEnrichmentParams, PersonEnrichmentResponse } from '../../types/enrichment-types'; import { parseRateLimitingResponse } from '../../utils/api-utils'; export default ( diff --git a/src/endpoints/identify/index.ts b/src/endpoints/identify/index.ts index 7cce879..9ecd5bf 100644 --- a/src/endpoints/identify/index.ts +++ b/src/endpoints/identify/index.ts @@ -1,7 +1,8 @@ -import _ from 'lodash'; import axios from 'axios'; +import _ from 'lodash'; + import { check, errorHandler } from '../../errors'; -import { IdentifyResponse, IdentifyParams } from '../../types/identify-types'; +import { IdentifyParams, IdentifyResponse } from '../../types/identify-types'; import { parseRateLimitingResponse } from '../../utils/api-utils'; export default ( diff --git a/src/endpoints/index.ts b/src/endpoints/index.ts index 03f9122..01afce8 100644 --- a/src/endpoints/index.ts +++ b/src/endpoints/index.ts @@ -1,13 +1,12 @@ import autocomplete from './autocomplete'; -import bulk from './bulk'; +import bulkEnrichment from './bulkEnrichment'; +import bulkRetrieve from './bulkRetrieve'; import cleaner from './cleaner'; import enrichment from './enrichment'; import identify from './identify'; +import jobTitle from './jobTitle'; import retrieve from './retrieve'; import search from './search'; -import jobTitle from './jobTitle'; import skill from './skill'; -export { - autocomplete, bulk, cleaner, enrichment, identify, retrieve, search, jobTitle, skill, -}; +export { autocomplete, bulkEnrichment, bulkRetrieve, cleaner, enrichment, identify, jobTitle, retrieve, search, skill }; diff --git a/src/endpoints/jobTitle/index.ts b/src/endpoints/jobTitle/index.ts index 20a0074..04523ce 100644 --- a/src/endpoints/jobTitle/index.ts +++ b/src/endpoints/jobTitle/index.ts @@ -1,4 +1,5 @@ import axios from 'axios'; + import { check, errorHandler } from '../../errors'; import { JobTitleParams, JobTitleResponse } from '../../types/jobTitle-types'; import { parseRateLimitingResponse } from '../../utils/api-utils'; diff --git a/src/endpoints/retrieve/index.ts b/src/endpoints/retrieve/index.ts index 803c055..9e1b717 100644 --- a/src/endpoints/retrieve/index.ts +++ b/src/endpoints/retrieve/index.ts @@ -1,4 +1,5 @@ import axios from 'axios'; + import { check, errorHandler } from '../../errors'; import { RetrieveParams, RetrieveResponse } from '../../types/retrieve-types'; import { parseRateLimitingResponse } from '../../utils/api-utils'; diff --git a/src/endpoints/search/index.ts b/src/endpoints/search/index.ts index af4d2f0..6eede96 100644 --- a/src/endpoints/search/index.ts +++ b/src/endpoints/search/index.ts @@ -1,7 +1,8 @@ import axios from 'axios'; + import { check, errorHandler } from '../../errors'; -import { BaseSearchParams, SearchType } from '../../types/search-types'; import { BaseResponse } from '../../types/api-types'; +import { BaseSearchParams, SearchType } from '../../types/search-types'; import { parseRateLimitingResponse } from '../../utils/api-utils'; export default ( diff --git a/src/errors.ts b/src/errors.ts index abf696d..26d2347 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -1,9 +1,10 @@ import { AxiosError } from 'axios'; -import { ErrorEndpoint } from './types/error-types'; -import { BaseSearchParams } from './types/search-types'; + import { AutoCompleteParams } from './types/autocomplete-types'; -import { RetrieveParams } from './types/retrieve-types'; +import { ErrorEndpoint } from './types/error-types'; import { JobTitleParams } from './types/jobTitle-types'; +import { RetrieveParams } from './types/retrieve-types'; +import { BaseSearchParams } from './types/search-types'; import { SkillParams } from './types/skill-types'; const check = ( diff --git a/src/index.ts b/src/index.ts index fd735c6..0e1b6f0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,32 +1,15 @@ +import { autocomplete, bulkEnrichment, bulkRetrieve, cleaner, enrichment, identify, jobTitle, retrieve, search, skill } from './endpoints'; +import { APISettings } from './types/api-types'; import { AutoCompleteParams, AutoCompleteResponse } from './types/autocomplete-types'; -import { - CompanyCleanerParams, - CompanyCleanerResponse, - LocationCleanerParams, - LocationCleanerResponse, - SchoolCleanerParams, - SchoolCleanerResponse, -} from './types/cleaner-types'; -import { - CompanyEnrichmentParams, - CompanyEnrichmentResponse, - PersonEnrichmentParams, - PersonEnrichmentResponse, -} from './types/enrichment-types'; +import { BulkPersonRetrieveParams, BulkPersonRetrieveResponse } from './types/bulk-retrieve-types'; import { BulkPersonEnrichmentParams, BulkPersonEnrichmentResponse } from './types/bulk-types'; -import { - autocomplete, bulk, cleaner, enrichment, identify, retrieve, search, jobTitle, skill, -} from './endpoints'; -import { - CompanySearchParams, - CompanySearchResponse, - PersonSearchParams, - PersonSearchResponse, -} from './types/search-types'; +import { CompanyCleanerParams, CompanyCleanerResponse, LocationCleanerParams, LocationCleanerResponse, SchoolCleanerParams, SchoolCleanerResponse } from './types/cleaner-types'; +import { CompanyResponse, PersonResponse } from './types/common-types'; +import { CompanyEnrichmentParams, CompanyEnrichmentResponse, PersonEnrichmentParams, PersonEnrichmentResponse } from './types/enrichment-types'; import { IdentifyParams, IdentifyResponse } from './types/identify-types'; -import { APISettings } from './types/api-types'; -import { RetrieveParams, RetrieveResponse } from './types/retrieve-types'; import { JobTitleParams, JobTitleResponse } from './types/jobTitle-types'; +import { RetrieveParams, RetrieveResponse } from './types/retrieve-types'; +import { CompanySearchParams, CompanySearchResponse, PersonSearchParams, PersonSearchResponse } from './types/search-types'; import { SkillParams, SkillResponse } from './types/skill-types'; class PDLJS { @@ -44,7 +27,10 @@ class PDLJS { }; identify: (params: IdentifyParams) => Promise; retrieve: (params: RetrieveParams) => Promise; - bulk: (records: BulkPersonEnrichmentParams) => Promise; + bulk: { + enrichment: (records: BulkPersonEnrichmentParams) => Promise; + retrieve: (records: BulkPersonRetrieveParams) => Promise; + } }; public company: { @@ -82,7 +68,10 @@ class PDLJS { elastic: (params) => search(this.basePath, this.sandboxBasePath, this.apiKey, 'elastic', params, 'person'), sql: (params) => search(this.basePath, this.sandboxBasePath, this.apiKey, 'sql', params, 'person'), }, - bulk: (records) => bulk(this.basePath, this.apiKey, records), + bulk: { + enrichment: (records) => bulkEnrichment(this.basePath, this.apiKey, records), + retrieve: (records) => bulkRetrieve(this.basePath, this.apiKey, records), + }, identify: (params) => identify(this.basePath, this.sandboxBasePath, this.apiKey, params), retrieve: (params) => retrieve(this.basePath, this.apiKey, params), }; @@ -115,31 +104,35 @@ class PDLJS { export default PDLJS; export type { + APISettings, AutoCompleteParams, AutoCompleteResponse, + BulkPersonEnrichmentParams, + BulkPersonEnrichmentResponse, + BulkPersonRetrieveParams, + BulkPersonRetrieveResponse, CompanyCleanerParams, CompanyCleanerResponse, - LocationCleanerParams, - LocationCleanerResponse, - SchoolCleanerParams, - SchoolCleanerResponse, CompanyEnrichmentParams, CompanyEnrichmentResponse, - PersonEnrichmentParams, - PersonEnrichmentResponse, - BulkPersonEnrichmentParams, - BulkPersonEnrichmentResponse, + CompanyResponse, CompanySearchParams, CompanySearchResponse, - PersonSearchParams, - PersonSearchResponse, IdentifyParams, IdentifyResponse, - RetrieveParams, - RetrieveResponse, JobTitleParams, JobTitleResponse, + LocationCleanerParams, + LocationCleanerResponse, + PersonEnrichmentParams, + PersonEnrichmentResponse, + PersonResponse, + PersonSearchParams, + PersonSearchResponse, + RetrieveParams, + RetrieveResponse, + SchoolCleanerParams, + SchoolCleanerResponse, SkillParams, SkillResponse, - APISettings, }; diff --git a/src/types/bulk-retrieve-types.ts b/src/types/bulk-retrieve-types.ts new file mode 100644 index 0000000..2219636 --- /dev/null +++ b/src/types/bulk-retrieve-types.ts @@ -0,0 +1,27 @@ +import { BaseResponse, RateLimit } from './api-types'; +import { PersonResponse } from './common-types'; + +export type BulkPersonRetrieveRequest = { + id: string; + metadata?: unknown; +}; + +export interface BulkPersonRetrieveParams { + requests: Array & { + pretty?: boolean; + filter_updated?: 'job_change' | any; + } +} + +export interface BulkPersonRetrieveResponseItem extends BaseResponse { + data: PersonResponse; + metadata?: unknown; + billed: boolean; +} + +// This response does extend from the BaseResponse since each item in the array has its own status +// See https://docs.peopledatalabs.com/docs/bulk-requests +export type BulkPersonRetrieveResponse = { + items: Array, + rateLimit: RateLimit +}; diff --git a/src/types/bulk-types.ts b/src/types/bulk-types.ts index ae8c4ce..df77272 100644 --- a/src/types/bulk-types.ts +++ b/src/types/bulk-types.ts @@ -1,5 +1,5 @@ -import { PersonEnrichmentParams, PersonEnrichmentResponse } from './enrichment-types'; import { RateLimit } from './api-types'; +import { PersonEnrichmentParams, PersonEnrichmentResponse } from './enrichment-types'; export interface BulkPersonEnrichmentRequest { params: PersonEnrichmentParams, diff --git a/src/types/cleaner-types.ts b/src/types/cleaner-types.ts index 7ded4fe..6a2cb70 100644 --- a/src/types/cleaner-types.ts +++ b/src/types/cleaner-types.ts @@ -1,6 +1,6 @@ -import { RequireAtLeastOne } from './utility-types'; -import { LocationResponse } from './common-types'; import { BaseResponse } from './api-types'; +import { LocationResponse } from './common-types'; +import { RequireAtLeastOne } from './utility-types'; export type CleanerType = 'company' | 'school' | 'location'; @@ -39,7 +39,7 @@ export interface CompanyCleanerResponse extends BaseResponse { export type SchoolCleanerParams = CompanyCleanerParams; -export interface SchoolCleanerResponse extends BaseResponse{ +export interface SchoolCleanerResponse extends BaseResponse { name?: string, type?: string, id?: string, @@ -67,7 +67,7 @@ export interface LocationCleanerParams { pretty?: boolean; } -export interface LocationCleanerResponse extends BaseResponse{ +export interface LocationCleanerResponse extends BaseResponse { name?: string, locality?: string, region?: string, diff --git a/src/types/common-types.ts b/src/types/common-types.ts index a1e35b7..fe68f2e 100644 --- a/src/types/common-types.ts +++ b/src/types/common-types.ts @@ -193,7 +193,7 @@ export interface PersonResponse { job_onet_minor_group?: string, job_onet_broad_occupation?: string, job_onet_specific_occupation?: string, - job_onet_title?: string, + job_onet_specific_occupation_detail?: string, job_summary?: string, job_last_updated?: string, job_start_date?: string, @@ -237,7 +237,8 @@ export interface PersonResponse { num_records?: number, num_sources?: number, first_seen?: string, - certifications?: Array + certifications?: Array, + recommended_personal_email?: string, } export interface CompanyResponse { @@ -255,6 +256,8 @@ export interface CompanyResponse { profiles?: Array, website?: string, ticker?: string, + gics_sector?: string, + mic_exchange?: string, type?: string, summary?: string, tags?: Array, @@ -262,7 +265,375 @@ export interface CompanyResponse { alternative_names?: Array, alternative_domains?: Array, affiliated_profiles?: Array, - likelihood?: number + likelihood?: number, + average_employee_tenure?: number, + average_tenure_by_level?: { + cxo?: number, + director?: number, + entry?: number, + manager?: number, + owner?: number, + partner?: number, + senior?: number, + training?: number, + unpaid?: number, + vp?: number, + }, + average_tenure_by_role?: { + customer_service?: number, + design?: number, + education?: number, + engineering?: number, + finance?: number, + health?: number, + human_resources?: number, + legal?: number, + marketing?: number, + media?: number, + operations?: number, + public_relations?: number, + real_estate?: number, + sales?: number, + trades?: number, + }, + employee_count_by_country?: { + afghanistan?: number, + albania ?: number, + algeria ?: number, + 'american samoa' ?: number, + andorra ?: number, + angola ?: number, + anguilla ?: number, + antarctica ?: number, + 'antigua and barbuda' ?: number, + argentina ?: number, + armenia ?: number, + aruba ?: number, + australia?: number, + austria?: number, + azerbaijan?: number, + bahamas?: number, + bahrain?: number, + bangladesh?: number, + barbados?: number, + belarus?: number, + belgium?: number, + belize?: number, + benin?: number, + bermuda?: number, + bhutan?: number, + bolivia?: number, + 'bosnia and herzegovina'?: number, + botswana?: number, + 'bouvet island'?: number, + brazil?: number, + 'british indian ocean territory'?: number, + 'british virgin islands'?: number, + brunei?: number, + bulgaria?: number, + 'burkina faso'?: number, + burundi?: number, + cambodia?: number, + cameroon?: number, + canada?: number, + 'cape verde'?: number, + 'caribbean netherlands'?: number, + 'cayman islands'?: number, + 'central african republic'?: number, + chad?: number, + chile?: number, + china?: number, + 'christmas island'?: number, + 'cocos (keeling) islands'?: number, + colombia?: number, + comoros?: number, + 'cook islands'?: number, + 'costa rica'?: number, + croatia?: number, + cuba?: number, + curaçao?: number, + cyprus?: number, + czechia?: number, + 'cĂŽte d’ivoire'?: number, + 'democratic republic of the congo'?: number, + denmark?: number, + djibouti?: number, + dominica?: number, + 'dominican republic'?: number, + ecuador?: number, + egypt?: number, + 'el salvador'?: number, + 'equatorial guinea'?: number, + eritrea?: number, + estonia?: number, + ethiopia?: number, + 'falkland islands'?: number, + 'faroe islands'?: number, + fiji?: number, + finland?: number, + france?: number, + 'french guiana'?: number, + 'french polynesia'?: number, + 'french southern territories'?: number, + gabon?: number, + gambia?: number, + georgia?: number, + germany?: number, + ghana?: number, + gibraltar?: number, + greece?: number, + greenland?: number, + grenada?: number, + guadeloupe?: number, + guam?: number, + guatemala?: number, + guernsey?: number, + guinea?: number, + 'guinea-bissau'?: number, + guyana?: number, + haiti?: number, + 'heard island and mcdonald islands'?: number, + honduras?: number, + 'hong kong'?: number, + hungary?: number, + iceland?: number, + india?: number, + indonesia?: number, + iran?: number, + iraq?: number, + ireland?: number, + 'isle of man'?: number, + israel?: number, + italy?: number, + 'ivory coast'?: number, + jamaica?: number, + japan?: number, + jersey?: number, + jordan?: number, + kazakhstan?: number, + kenya?: number, + kiribati?: number, + kosovo?: number, + kuwait?: number, + kyrgyzstan?: number, + laos?: number, + latvia?: number, + lebanon?: number, + lesotho?: number, + liberia?: number, + libya?: number, + liechtenstein?: number, + lithuania?: number, + luxembourg?: number, + macau?: number, + macedonia?: number, + madagascar?: number, + malawi?: number, + malaysia?: number, + maldives?: number, + mali?: number, + malta?: number, + 'marshall islands'?: number, + martinique?: number, + mauritania?: number, + mauritius?: number, + mayotte?: number, + mexico?: number, + micronesia?: number, + moldova?: number, + monaco?: number, + mongolia?: number, + montenegro?: number, + montserrat?: number, + morocco?: number, + mozambique?: number, + myanmar?: number, + namibia?: number, + nauru?: number, + nepal?: number, + netherlands?: number, + 'netherlands antilles'?: number, + 'new caledonia'?: number, + 'new zealand'?: number, + nicaragua?: number, + niger?: number, + nigeria?: number, + niue?: number, + 'norfolk island'?: number, + 'north korea'?: number, + 'northern mariana islands'?: number, + norway?: number, + oman?: number, + pakistan?: number, + palau?: number, + palestine?: number, + panama?: number, + 'papua new guinea'?: number, + paraguay?: number, + peru?: number, + philippines?: number, + pitcairn?: number, + poland?: number, + portugal?: number, + 'puerto rico'?: number, + qatar?: number, + 'republic of the congo'?: number, + romania?: number, + russia?: number, + rwanda?: number, + rĂ©union?: number, + 'saint barthĂ©lemy'?: number, + 'saint helena'?: number, + 'saint kitts and nevis'?: number, + 'saint lucia'?: number, + 'saint martin'?: number, + 'saint pierre and miquelon'?: number, + 'saint vincent and the grenadines'?: number, + samoa?: number, + 'san marino'?: number, + 'saudi arabia'?: number, + senegal?: number, + serbia?: number, + seychelles?: number, + 'sierra leone'?: number, + singapore?: number, + 'sint maarten'?: number, + slovakia?: number, + slovenia?: number, + 'solomon islands'?: number, + somalia?: number, + 'south africa'?: number, + 'south georgia and the south sandwich islands'?: number, + 'south korea'?: number, + 'south sudan'?: number, + spain?: number, + 'sri lanka'?: number, + sudan?: number, + suriname?: number, + 'svalbard and jan mayen'?: number, + swaziland?: number, + sweden?: number, + switzerland?: number, + syria?: number, + 'sĂŁo tomĂ© and prĂ­ncipe'?: number, + taiwan?: number, + tajikistan?: number, + tanzania?: number, + thailand?: number, + 'timor-leste'?: number, + togo?: number, + tokelau?: number, + tonga?: number, + 'trinidad and tobago'?: number, + tunisia?: number, + 'turkey' ?: number, + 'turkmenistan'?: number, + 'turks and caicos islands'?: number, + tuvalu?: number, + 'u.s. virgin islands'?: number, + uganda?: number, + ukraine?: number, + 'united arab emirates'?: number, + 'united kingdom'?: number, + 'united states'?: number, + 'united states minor outlying islands'?: number, + uruguay?: number, + uzbekistan?: number, + vanuatu?: number, + 'vatican city'?: number, + venezuela?: number, + vietnam?: number, + 'wallis and futuna'?: number, + 'western sahara'?: number, + yemen?: number, + zambia?: number, + zimbabwe?: number, + 'Åland islands'?: number, + 'Ă„land islands'?: number, + }, + employee_count_by_month?: object, + employee_count_by_month_by_level?: object, + employee_count_by_month_by_role?: object, + employee_churn_rate: { + '3_month'?: number, + '6_month'?: number, + '12_month'?: number, + '24_month'?: number, + }, + employee_growth_rate?: { + '3_month'?: number, + '6_month'?: number, + '12_month'?: number, + '24_month'?: number, + }, + gross_additions_by_month?: object, + gross_departures_by_month?: object, + inferred_revenue?: string, + recent_exec_departures?: Array<{ + departed_date?: string, + pdl_id?: string, + job_title?: string, + job_title_role?: string, + job_title_sub_role?: string, + job_title_levels?: Array, + new_company_id?: string, + new_company_job_title?: string, + new_company_job_title_role?: string, + new_company_job_title_sub_role?: string, + new_company_job_title_levels?: Array, + }>, + recent_exec_hires?: Array<{ + joined_date?: string, + pdl_id?: string, + job_title?: string, + job_title_role?: string, + job_title_sub_role?: string, + job_title_levels?: Array, + previous_company_id?: string, + previous_company_job_title?: string, + previous_company_job_title_role?: string, + previous_company_job_title_sub_role?: string, + previous_company_job_title_levels?: Array, + }>, + top_next_employers_by_role?: { + customer_service?: object, + design?: object, + education?: object, + engineering?: object, + finance?: object, + health?: object, + human_resources?: object, + legal?: object, + marketing?: object, + media?: object, + operations?: object, + public_relations?: object, + real_estate?: object, + sales?: object, + trades?: object, + }, + top_previous_employers_by_role?: { + customer_service?: object, + design?: object, + education?: object, + engineering?: object, + finance?: object, + health?: object, + human_resources?: object, + legal?: object, + marketing?: object, + media?: object, + operations?: object, + public_relations?: object, + real_estate?: object, + sales?: object, + trades?: object, + }, + top_us_employee_metros: object, + all_subsidiaries?: Array, + direct_subsidiaries?: Array, + immediate_parent?: string, + ultimate_parent?: string, } export interface ErrorResponse { diff --git a/src/types/enrichment-types.ts b/src/types/enrichment-types.ts index 17a15ce..6d7b679 100644 --- a/src/types/enrichment-types.ts +++ b/src/types/enrichment-types.ts @@ -1,6 +1,6 @@ -import { RequireAtLeastOne } from './utility-types'; import { BaseResponse } from './api-types'; import { CompanyResponse, PersonResponse } from './common-types'; +import { RequireAtLeastOne } from './utility-types'; export type EnrichmentType = 'company' | 'person'; diff --git a/src/types/retrieve-types.ts b/src/types/retrieve-types.ts index 20f4de0..6dd71ff 100644 --- a/src/types/retrieve-types.ts +++ b/src/types/retrieve-types.ts @@ -5,8 +5,10 @@ export type RetrieveParams = { id: string; } & { pretty?: boolean; + filter_updated?: 'job_change' | any; }; export interface RetrieveResponse extends BaseResponse { data: PersonResponse + billed: boolean; } diff --git a/src/types/search-types.ts b/src/types/search-types.ts index f959e60..8d48631 100644 --- a/src/types/search-types.ts +++ b/src/types/search-types.ts @@ -34,4 +34,4 @@ export interface PersonSearchResponse extends BaseSearchResponse export interface CompanySearchParams extends BaseSearchParams {} -export interface CompanySearchResponse extends BaseSearchResponse{} +export interface CompanySearchResponse extends BaseSearchResponse {} diff --git a/src/utils/api-utils.ts b/src/utils/api-utils.ts index 30df94e..9b75185 100644 --- a/src/utils/api-utils.ts +++ b/src/utils/api-utils.ts @@ -1,4 +1,5 @@ import { AxiosResponse } from 'axios'; + import { RateLimit } from '../types/api-types'; // eslint-disable-next-line import/prefer-default-export diff --git a/tests/index.test.js b/tests/index.test.js index d4c660d..412842b 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -2,7 +2,8 @@ import { expect } from 'chai'; import dotenv from 'dotenv'; -// eslint-disable-next-line + +// eslint-disable-next-line import/extensions import PDLJS from '../dist/index.m.js'; dotenv.config({ path: './.env.local' }); @@ -42,6 +43,13 @@ const personElastic = { const personID = 'qEnOZ5Oh0poWnQ1luFBfVw_0000'; +const bulkRecords = { + requests: [ + { id: 'qEnOZ5Oh0poWnQ1luFBfVw_0000' }, + { id: 'PzFD15NINdBWNULBBkwlig_0000' }, + ], +}; + const website = 'peopledatalabs.com'; const companySQL = "SELECT * FROM company WHERE tags='big data' AND industry='financial services' AND location.country='united states';"; @@ -96,11 +104,11 @@ describe('Person Enrichment', () => { }); }); -describe('Person Identify', () => { - it(`Should Return Person Record for ${phone}`, (done) => { - PDLJSClient.person.identify({ phone: '4155688415' }).then((data) => { - expect(data.status).to.equal(200); - expect(data).to.be.a('object'); +describe('Person Bulk Enrichment', () => { + it(`Should Return Person Records for ${JSON.stringify(records)}`, (done) => { + PDLJSClient.person.bulk.enrichment(records).then((data) => { + expect(data.items.length).to.equal(2); + expect(data.items).to.be.a('array'); done(); }).catch((error) => { expect(error).to.be.a('object'); @@ -108,10 +116,10 @@ describe('Person Identify', () => { }); }); - it('Should Error for Person Identify', (done) => { - PDLJSClient.person.identify().then((data) => { - expect(data.status).to.equal(200); - expect(data).to.be.a('object'); + it('Should Error for Person Bulk Enrichment', (done) => { + PDLJSClient.person.bulk.enrichment().then((data) => { + expect(data.items.length).to.equal(2); + expect(data.items).to.be.a('array'); done(); }).catch((error) => { expect(error).to.be.a('object'); @@ -120,11 +128,11 @@ describe('Person Identify', () => { }); }); -describe('Person Bulk', () => { - it(`Should Return Person Records for ${JSON.stringify(records)}`, (done) => { - PDLJSClient.person.bulk(records).then((data) => { - expect(data.items.length).to.equal(2); - expect(data.items).to.be.a('array'); +describe('Person Identify', () => { + it(`Should Return Person Record for ${phone}`, (done) => { + PDLJSClient.person.identify({ phone: '4155688415' }).then((data) => { + expect(data.status).to.equal(200); + expect(data).to.be.a('object'); done(); }).catch((error) => { expect(error).to.be.a('object'); @@ -132,10 +140,10 @@ describe('Person Bulk', () => { }); }); - it('Should Error for Person Bulk', (done) => { - PDLJSClient.person.bulk().then((data) => { - expect(data.items.length).to.equal(2); - expect(data.items).to.be.a('array'); + it('Should Error for Person Identify', (done) => { + PDLJSClient.person.identify().then((data) => { + expect(data.status).to.equal(200); + expect(data).to.be.a('object'); done(); }).catch((error) => { expect(error).to.be.a('object'); @@ -214,6 +222,30 @@ describe('Person Retrieve', () => { }); }); +describe('Bulk Person Retrieve', () => { + it(`Should Return Person Records for ${JSON.stringify(bulkRecords)}`, (done) => { + PDLJSClient.person.bulk.retrieve(bulkRecords).then((data) => { + expect(data.status).to.equal(200); + expect(data).to.be.a('object'); + done(); + }).catch((error) => { + expect(error).to.be.a('object'); + done(); + }); + }); + + it('Should Error for Bulk Person Retrieve', (done) => { + PDLJSClient.person.bulk.retrieve().then((data) => { + expect(data.status).to.equal(200); + expect(data).to.be.a('object'); + done(); + }).catch((error) => { + expect(error).to.be.a('object'); + done(); + }); + }); +}); + describe('Company Enrichment', () => { it(`Should Return Company Record for ${website}`, (done) => { PDLJSClient.company.enrichment({ website }).then((data) => { @@ -425,7 +457,7 @@ describe('Job Title API', () => { }); describe('Sandbox APIs', () => { - it(`Should Return Sandbox Person Record for { email: 'irussell@example.org' }`, (done) => { + it('Should Return Sandbox Person Record for { email: \'irussell@example.org\' }', (done) => { PDLJSClient.person.enrichment({ email: 'irussell@example.org', sandbox: true }).then((data) => { expect(data.status).to.equal(200); expect(data).to.be.a('object'); @@ -447,7 +479,7 @@ describe('Sandbox APIs', () => { }); }); - it(`Should Return Sandbox Person Records for "SELECT * FROM person WHERE location_country='mexico';"`, (done) => { + it('Should Return Sandbox Person Records for "SELECT * FROM person WHERE location_country=\'mexico\';"', (done) => { PDLJSClient.person.search.sql({ searchQuery: "SELECT * FROM person WHERE location_country='mexico';", size: 10, sandbox: true }).then((data) => { expect(data.status).to.equal(200); expect(data).to.be.a('object'); @@ -469,8 +501,8 @@ describe('Sandbox APIs', () => { }); }); - it(`Should Return Sandbox Person Records for { query: { bool: { must: [{term: {location_country: "mexico"}}] } } }`, (done) => { - PDLJSClient.person.search.elastic({ searchQuery: { query: { bool: { must: [{term: {location_country: "mexico"}}] } } }, size: 10, sandbox: true }).then((data) => { + it('Should Return Sandbox Person Records for { query: { bool: { must: [{term: {location_country: "mexico"}}] } } }', (done) => { + PDLJSClient.person.search.elastic({ searchQuery: { query: { bool: { must: [{ term: { location_country: 'mexico' } }] } } }, size: 10, sandbox: true }).then((data) => { expect(data.status).to.equal(200); expect(data).to.be.a('object'); done(); @@ -491,7 +523,7 @@ describe('Sandbox APIs', () => { }); }); - it(`Should Return Sandbox Identify Person Records for { company: 'walmart' }`, (done) => { + it('Should Return Sandbox Identify Person Records for { company: \'walmart\' }', (done) => { PDLJSClient.person.identify({ company: 'walmart', sandbox: true }).then((data) => { expect(data.status).to.equal(200); expect(data).to.be.a('object'); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000..627392d --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*", "tests", "example", ".eslintrc.cjs"], + "exclude": ["node_modules", "dist",] + } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index a78abf5..0f51e95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1222,14 +1222,14 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== -"@typescript-eslint/eslint-plugin@^5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz#deee67e399f2cb6b4608c935777110e509d8018c" - integrity sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ== - dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/type-utils" "5.48.1" - "@typescript-eslint/utils" "5.48.1" +"@typescript-eslint/eslint-plugin@^5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" + integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== + dependencies: + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/type-utils" "5.48.2" + "@typescript-eslint/utils" "5.48.2" debug "^4.3.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" @@ -1237,72 +1237,72 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10" - integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA== +"@typescript-eslint/parser@^5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.2.tgz#c9edef2a0922d26a37dba03be20c5fff378313b3" + integrity sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d" - integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ== +"@typescript-eslint/scope-manager@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" + integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" -"@typescript-eslint/type-utils@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz#5d94ac0c269a81a91ad77c03407cea2caf481412" - integrity sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ== +"@typescript-eslint/type-utils@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" + integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== dependencies: - "@typescript-eslint/typescript-estree" "5.48.1" - "@typescript-eslint/utils" "5.48.1" + "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/utils" "5.48.2" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" - integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg== +"@typescript-eslint/types@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" + integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== -"@typescript-eslint/typescript-estree@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056" - integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA== +"@typescript-eslint/typescript-estree@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" + integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9" - integrity sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA== +"@typescript-eslint/utils@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" + integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb" - integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA== +"@typescript-eslint/visitor-keys@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" + integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== dependencies: - "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/types" "5.48.2" eslint-visitor-keys "^3.3.0" acorn-jsx@^5.3.2: @@ -2365,6 +2365,11 @@ eslint-plugin-react@^7.32.0: semver "^6.3.0" string.prototype.matchall "^4.0.8" +eslint-plugin-simple-import-sort@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-8.0.0.tgz#9d9a2372b0606e999ea841b10458a370a6ccc160" + integrity sha512-bXgJQ+lqhtQBCuWY/FUWdB27j4+lqcvXv5rUARkzbeWLwea+S5eBZEQrhnO+WgX3ZoJHVj0cn943iyXwByHHQw== + eslint-plugin-unused-imports@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz" @@ -2410,10 +2415,10 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.31.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== +eslint@^8.32.0: + version "8.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861" + integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ== dependencies: "@eslint/eslintrc" "^1.4.1" "@humanwhocodes/config-array" "^0.11.8"