From 046514817b4339b721ec1c3ea643ba091af177cc Mon Sep 17 00:00:00 2001 From: "pieterjan.eilers" Date: Fri, 29 May 2026 15:28:15 +0200 Subject: [PATCH 1/3] feat(DomainApi): Deprecate transferContacts --- src/models/Domain.ts | 2 ++ src/resources/DomainApi.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/models/Domain.ts b/src/models/Domain.ts index 834190e..d5f2e36 100644 --- a/src/models/Domain.ts +++ b/src/models/Domain.ts @@ -55,6 +55,7 @@ export enum DesignatedAgent { BOTH = 'BOTH' } +/** @deprecated has become obsolete */ export enum TransferContacts { REGISTRANT = 'REGISTRANT', ADMIN = 'ADMIN' @@ -108,6 +109,7 @@ export interface IDomainRegister extends IDomainRegisterTransfer { } export interface IDomainTransfer extends IDomainRegisterTransfer { + /** @deprecated has become obsolete */ transferContacts?: TransferContacts designatedAgent?: DesignatedAgent } diff --git a/src/resources/DomainApi.ts b/src/resources/DomainApi.ts index 048e0e0..18e510f 100644 --- a/src/resources/DomainApi.ts +++ b/src/resources/DomainApi.ts @@ -144,6 +144,7 @@ export default class DomainApi extends Base { zone, keyData, privacyProtect, + /** @deprecated has become obsolete */ transferContacts, designatedAgent, languageCode, @@ -160,6 +161,7 @@ export default class DomainApi extends Base { zone, keyData, privacyProtect, + /** @deprecated has become obsolete */ transferContacts, designatedAgent, languageCode, From 3f7ad2da72a81f76112fe52e562d781b8c1eb64a Mon Sep 17 00:00:00 2001 From: kevinkosterr Date: Tue, 2 Jun 2026 12:39:59 +0200 Subject: [PATCH 2/3] chore(deps): update dependencies Updates dependencies that have vulnerabilities which do not affect this codebase. --- package.json | 7 ++++++- pnpm-lock.yaml | 49 +++++++++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 52c7775..9933bb0 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,12 @@ "lodash@>=4.0.0 <=4.17.23": ">=4.18.0", "lodash-es@<=4.17.23": ">=4.18.0", "lodash@<=4.17.23": ">=4.18.0", - "axios@<1.15.0": ">=1.15.0" + "axios@<1.15.0": ">=1.15.0", + "postcss@<8.5.10": ">=8.5.10", + "fast-uri@<=3.1.0": ">=3.1.1", + "fast-uri@<=3.1.1": ">=3.1.2", + "brace-expansion@>=5.0.0 <5.0.6": ">=5.0.6", + "qs@>=6.11.1 <=6.15.1": ">=6.15.2" } }, "types": "./dist/index.d.ts", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6bc85c..e659fc8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,6 +27,11 @@ overrides: lodash-es@<=4.17.23: '>=4.18.0' lodash@<=4.17.23: '>=4.18.0' axios@<1.15.0: '>=1.15.0' + postcss@<8.5.10: '>=8.5.10' + fast-uri@<=3.1.0: '>=3.1.1' + fast-uri@<=3.1.1: '>=3.1.2' + brace-expansion@>=5.0.0 <5.0.6: '>=5.0.6' + qs@>=6.11.1 <=6.15.1: '>=6.15.2' importers: @@ -36,8 +41,8 @@ importers: specifier: ^1.16.0 version: 1.16.0 qs: - specifier: ^6.14.2 - version: 6.14.2 + specifier: '>=6.15.2' + version: 6.15.2 devDependencies: '@eslint/js': specifier: ^9.11.1 @@ -578,8 +583,8 @@ packages: resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} engines: {node: 20 || >=22} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -840,8 +845,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -1316,8 +1321,8 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -1420,8 +1425,8 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.9: - resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -1436,8 +1441,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.14.2: - resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} + qs@6.15.2: + resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} engines: {node: '>=0.6'} quansync@0.2.10: @@ -2269,7 +2274,7 @@ snapshots: ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -2355,7 +2360,7 @@ snapshots: balanced-match@4.0.3: {} - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.3 @@ -2698,7 +2703,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.0: {} + fast-uri@3.1.2: {} fastq@1.19.1: dependencies: @@ -3124,11 +3129,11 @@ snapshots: minimatch@10.2.2: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimist@1.2.8: {} @@ -3143,7 +3148,7 @@ snapshots: muggle-string@0.4.1: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} natural-compare@1.4.0: {} @@ -3254,9 +3259,9 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.5.9: + postcss@8.5.15: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -3266,7 +3271,7 @@ snapshots: punycode@2.3.1: {} - qs@6.14.2: + qs@6.15.2: dependencies: side-channel: 1.1.0 @@ -3604,7 +3609,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.9 + postcss: 8.5.15 rolldown: 1.0.0-rc.15 tinyglobby: 0.2.15 optionalDependencies: From acab5a8ecf64a47bc3cb94663ab1a4c67bf0b506 Mon Sep 17 00:00:00 2001 From: Wiebren Braakman Date: Tue, 23 Jun 2026 16:01:32 +0200 Subject: [PATCH 3/3] feat(Contact): Add verifications to contacts (#125) * feat(Contact): Add verifications to contacts relates to RT-18465 --------- Co-authored-by: Wiebren Braakman --- src/index.ts | 14 +++++- src/models/Contact.ts | 10 +++- src/models/ContactVerification.ts | 77 +++++++++++++++++++++++++++++++ src/resources/ContactApi.ts | 4 +- 4 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/models/ContactVerification.ts diff --git a/src/index.ts b/src/index.ts index 4d0cbb7..975ab17 100644 --- a/src/index.ts +++ b/src/index.ts @@ -442,6 +442,17 @@ export type { } from '@/models/Gateway.ts' import { RegistryAccount } from '@/models/Gateway.ts' +export type { + IContactVerification, + IContactVerificationCommand +} from '@/models/ContactVerification.ts' +export type { + VerificationMethod, + VerificationProof, + VerificationClaim +} from '@/models/ContactVerification.ts' +import ContactVerification from '@/models/ContactVerification.ts' + /** All model classes */ export { AcmeSubscription, @@ -500,5 +511,6 @@ export { Transaction, TransferInfo, ValidationCategory, - RegistryAccount + RegistryAccount, + ContactVerification } diff --git a/src/models/Contact.ts b/src/models/Contact.ts index d50c446..0f2fbbf 100644 --- a/src/models/Contact.ts +++ b/src/models/Contact.ts @@ -1,4 +1,5 @@ import { ContactRegistryAccount, IContactRegistryAccount } from '@/models/Gateway.ts' +import ContactVerification, { IContactVerification } from '@/models/ContactVerification.ts' export interface IContactValidation { validatedOn: Date @@ -77,12 +78,13 @@ export interface IContact { registries?: string[] properties?: Map> validations?: IContactValidation[] + verifications?: IContactVerification[] /** Only applicable on Gateway accounts. */ registryAccounts?: ContactRegistryAccount[] } export type ContactField = keyof Contact -export type ContactFilterField = Exclude | 'validation' +export type ContactFilterField = Exclude | 'validation' export interface IContactUpdate extends IContact{ designatedAgent?: DesignatedAgent @@ -108,6 +110,7 @@ export default class Contact implements IContact { registries?: string[] properties?: Map> validations?: ContactValidation[] + verifications?: ContactVerification[] registryAccounts?: ContactRegistryAccount[] constructor (contact: IContact) { @@ -134,6 +137,11 @@ export default class Contact implements IContact { d => new ContactValidation(d) ).sort((a, b) => a.category.localeCompare(b.category)) } + if (contact.verifications) { + this.verifications = contact.verifications.map( + v => new ContactVerification(v) + ) + } if (contact.registryAccounts) { this.registryAccounts = contact.registryAccounts.map((a: IContactRegistryAccount) => new ContactRegistryAccount(a)) } diff --git a/src/models/ContactVerification.ts b/src/models/ContactVerification.ts new file mode 100644 index 0000000..cf18f76 --- /dev/null +++ b/src/models/ContactVerification.ts @@ -0,0 +1,77 @@ +export const VerificationMethods = { + REACHABILITY: 'REACHABILITY', + ELECTRONIC_DOCUMENT: 'ELECTRONIC_DOCUMENT', + PHYSICAL_DOCUMENT: 'PHYSICAL_DOCUMENT', + EID_AUTH: 'EID_AUTH', + TRANSACTION: 'TRANSACTION', + DATA: 'DATA' +} as const +export type VerificationMethod = keyof typeof VerificationMethods + +export const VerificationProofs = { + LOG_RECORD: 'LOG_RECORD', + ID_CARD: 'ID_CARD', + PASSPORT: 'PASSPORT', + POPULATION_REGISTER: 'POPULATION_REGISTER', + RESIDENCE_PERMIT: 'RESIDENCE_PERMIT', + DRIVERS_LICENCE: 'DRIVERS_LICENCE', + COMPANY_REGISTER: 'COMPANY_REGISTER', + COMPANY_STATEMENT: 'COMPANY_STATEMENT', + BANK_ACCOUNT: 'BANK_ACCOUNT', + ONLINE_PAYMENT_ACCOUNT: 'ONLINE_PAYMENT_ACCOUNT', + UTILITY_ACCOUNT: 'UTILITY_ACCOUNT', + BANK_STATEMENT: 'BANK_STATEMENT', + TAX_STATEMENT: 'TAX_STATEMENT', + ADDRESS_DATABASE: 'ADDRESS_DATABASE' +} as const +export type VerificationProof = keyof typeof VerificationProofs + +export const VerificationClaims = { + EMAIL: 'EMAIL', + ADDRESS: 'ADDRESS', + ORGANIZATION: 'ORGANIZATION', + NAME: 'NAME', + VOICE: 'VOICE' +} as const +export type VerificationClaim = keyof typeof VerificationClaims + +export interface IContactVerification { + verificationDate: Date + method: VerificationMethod + proof: VerificationProof + source: string + externalId: string + claims: VerificationClaim[] + createdDate: Date + updatedDate?: Date +} + +export interface IContactVerificationCommand { + verificationDate: Date + method: VerificationMethod + proof: VerificationProof + externalId: string + claims: VerificationClaim[] +} + +export default class ContactVerification implements IContactVerification { + verificationDate: Date + method: VerificationMethod + proof: VerificationProof + source: string + externalId: string + claims: VerificationClaim[] + createdDate: Date + updatedDate?: Date + + constructor (verification: IContactVerification) { + this.verificationDate = verification.verificationDate ? new Date(verification.verificationDate) : verification.verificationDate + this.method = verification.method + this.proof = verification.proof + this.source = verification.source + this.externalId = verification.externalId + this.claims = verification.claims + this.createdDate = verification.createdDate ? new Date(verification.createdDate) : verification.createdDate + this.updatedDate = verification.updatedDate ? new Date(verification.updatedDate) : verification.updatedDate + } +} diff --git a/src/resources/ContactApi.ts b/src/resources/ContactApi.ts index 71e89fd..5e4642d 100644 --- a/src/resources/ContactApi.ts +++ b/src/resources/ContactApi.ts @@ -31,7 +31,7 @@ export default class ContactApi extends Base { * @param contact - Contact data. */ async create (contact: IContact): Promise { - const fields = (({ handle, brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax }) => ({ handle, brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax }))(contact) + const fields = (({ handle, brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax, verifications }) => ({ handle, brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax, verifications }))(contact) return this.axios.post('/customers/' + this.customer + '/contacts/' + contact.handle, fields) .then(response => new ProcessResponse(response)) @@ -43,7 +43,7 @@ export default class ContactApi extends Base { * @param contact - Contact data, will update based on provided fields. Provided handle will determine the contact to update. */ async update (contact: IContactUpdate): Promise { - const fields = (({ brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax, designatedAgent, disclosedFields }) => ({ brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax, designatedAgent, disclosedFields }))(contact) + const fields = (({ brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax, designatedAgent, disclosedFields, verifications }) => ({ brand, name, organization, addressLine, postalCode, city, state, country, email, voice, fax, designatedAgent, disclosedFields, verifications }))(contact) return this.axios.post('/customers/' + this.customer + '/contacts/' + contact.handle + '/update', fields) .then(response => new ProcessResponse(response))