From 729f9ecb47b75e6c6f91132df59b07318fcbc4cb Mon Sep 17 00:00:00 2001 From: Wilson Lin Date: Wed, 30 Aug 2023 15:42:46 +1000 Subject: [PATCH 1/3] Initial commit --- lib/registrar.ts | 78 ++++++++++++++++++ lib/types.ts | 2 + .../disableDomainTransferLock/success.http | 20 +++++ .../enableDomainTransferLock/success.http | 20 +++++ .../getDomainTransferLock/success.http | 20 +++++ test/registrar_domain_transfer_lock.spec.ts | 79 +++++++++++++++++++ 6 files changed, 219 insertions(+) create mode 100644 test/fixtures.http/disableDomainTransferLock/success.http create mode 100644 test/fixtures.http/enableDomainTransferLock/success.http create mode 100644 test/fixtures.http/getDomainTransferLock/success.http create mode 100644 test/registrar_domain_transfer_lock.spec.ts diff --git a/lib/registrar.ts b/lib/registrar.ts index 8612792..67dbc00 100644 --- a/lib/registrar.ts +++ b/lib/registrar.ts @@ -764,4 +764,82 @@ export class Registrar { ); return method; })(); + + /** + * Gets the transfer lock status for a domain. + * + * GET /{account}/registrar/domains/{domain}/transfer_lock + * + * @see https://developer.dnsimple.com/v2/registrar/#getDomainTransferLock + * + * @param account The account id + * @param domain The domain name or id + * @param params Query parameters + */ + getDomainTransferLock = (() => { + const method = ( + account: number, + domain: string, + params: QueryParams & {} = {} + ): Promise<{ data: types.DomainTransferLock }> => + this._client.request( + "GET", + `/${account}/registrar/domains/${domain}/transfer_lock`, + null, + params + ); + return method; + })(); + + /** + * Locks the domain to prevent unauthorized transfers. + * + * POST /{account}/registrar/domains/{domain}/transfer_lock + * + * @see https://developer.dnsimple.com/v2/registrar/#enableDomainTransferLock + * + * @param account The account id + * @param domain The domain name or id + * @param params Query parameters + */ + enableDomainTransferLock = (() => { + const method = ( + account: number, + domain: string, + params: QueryParams & {} = {} + ): Promise<{ data: types.DomainTransferLock }> => + this._client.request( + "POST", + `/${account}/registrar/domains/${domain}/transfer_lock`, + null, + params + ); + return method; + })(); + + /** + * Unlocks the domain to allow domain transfers. + * + * DELETE /{account}/registrar/domains/{domain}/transfer_lock + * + * @see https://developer.dnsimple.com/v2/registrar/#disableDomainTransferLock + * + * @param account The account id + * @param domain The domain name or id + * @param params Query parameters + */ + disableDomainTransferLock = (() => { + const method = ( + account: number, + domain: string, + params: QueryParams & {} = {} + ): Promise<{ data: types.DomainTransferLock }> => + this._client.request( + "DELETE", + `/${account}/registrar/domains/${domain}/transfer_lock`, + null, + params + ); + return method; + })(); } diff --git a/lib/types.ts b/lib/types.ts index 2991d00..20861c8 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -448,3 +448,5 @@ export type RegistrantChangeCheck = { extended_attributes: Array; registry_owner_change: boolean; }; + +export type DomainTransferLock = { enabled: boolean }; diff --git a/test/fixtures.http/disableDomainTransferLock/success.http b/test/fixtures.http/disableDomainTransferLock/success.http new file mode 100644 index 0000000..d562c1e --- /dev/null +++ b/test/fixtures.http/disableDomainTransferLock/success.http @@ -0,0 +1,20 @@ +HTTP/1.1 200 OK +Server: nginx +Date: Tue, 15 Aug 2023 09:58:37 GMT +Content-Type: application/json; charset=utf-8 +Connection: keep-alive +X-RateLimit-Limit: 2400 +X-RateLimit-Remaining: 2398 +X-RateLimit-Reset: 1488538623 +ETag: W/"fc2368a31a1b6a3afcca33bb37ff6b9d" +Cache-Control: max-age=0, private, must-revalidate +X-Request-Id: 8b0fe49a-c810-4552-84ab-a1cd9b4a7786 +X-Runtime: 0.024780 +X-Content-Type-Options: nosniff +X-Download-Options: noopen +X-Frame-Options: DENY +X-Permitted-Cross-Domain-Policies: none +X-XSS-Protection: 1; mode=block +Strict-Transport-Security: max-age=31536000 + +{"data":{"enabled":false}} diff --git a/test/fixtures.http/enableDomainTransferLock/success.http b/test/fixtures.http/enableDomainTransferLock/success.http new file mode 100644 index 0000000..e90c83c --- /dev/null +++ b/test/fixtures.http/enableDomainTransferLock/success.http @@ -0,0 +1,20 @@ +HTTP/1.1 201 Created +Server: nginx +Date: Tue, 15 Aug 2023 09:58:37 GMT +Content-Type: application/json; charset=utf-8 +Connection: keep-alive +X-RateLimit-Limit: 2400 +X-RateLimit-Remaining: 2398 +X-RateLimit-Reset: 1488538623 +ETag: W/"fc2368a31a1b6a3afcca33bb37ff6b9d" +Cache-Control: max-age=0, private, must-revalidate +X-Request-Id: 8b0fe49a-c810-4552-84ab-a1cd9b4a7786 +X-Runtime: 0.024780 +X-Content-Type-Options: nosniff +X-Download-Options: noopen +X-Frame-Options: DENY +X-Permitted-Cross-Domain-Policies: none +X-XSS-Protection: 1; mode=block +Strict-Transport-Security: max-age=31536000 + +{"data":{"enabled":true}} diff --git a/test/fixtures.http/getDomainTransferLock/success.http b/test/fixtures.http/getDomainTransferLock/success.http new file mode 100644 index 0000000..f93ffb3 --- /dev/null +++ b/test/fixtures.http/getDomainTransferLock/success.http @@ -0,0 +1,20 @@ +HTTP/1.1 200 OK +Server: nginx +Date: Tue, 15 Aug 2023 09:58:37 GMT +Content-Type: application/json; charset=utf-8 +Connection: keep-alive +X-RateLimit-Limit: 2400 +X-RateLimit-Remaining: 2398 +X-RateLimit-Reset: 1488538623 +ETag: W/"fc2368a31a1b6a3afcca33bb37ff6b9d" +Cache-Control: max-age=0, private, must-revalidate +X-Request-Id: 8b0fe49a-c810-4552-84ab-a1cd9b4a7786 +X-Runtime: 0.024780 +X-Content-Type-Options: nosniff +X-Download-Options: noopen +X-Frame-Options: DENY +X-Permitted-Cross-Domain-Policies: none +X-XSS-Protection: 1; mode=block +Strict-Transport-Security: max-age=31536000 + +{"data":{"enabled":true}} diff --git a/test/registrar_domain_transfer_lock.spec.ts b/test/registrar_domain_transfer_lock.spec.ts new file mode 100644 index 0000000..876495f --- /dev/null +++ b/test/registrar_domain_transfer_lock.spec.ts @@ -0,0 +1,79 @@ +import { expect } from "chai"; +import * as nock from "nock"; +import { createTestClient, loadFixture } from "./util"; + +const dnsimple = createTestClient(); + +describe("domain transfer lock", () => { + const accountId = 1010; + + describe("#getDomainTransferLock", () => { + const fixture = loadFixture("getDomainTransferLock/success.http"); + + it("produces a transfer lock", (done) => { + nock("https://api.dnsimple.com") + .get("/v2/1010/registrar/domains/101/transfer_lock") + .reply(fixture.statusCode, fixture.body); + + dnsimple.registrar + .getDomainTransferLock(accountId, "101") + .then( + ({ data }) => { + expect(data).to.deep.eq({ + enabled: true, + }); + done(); + }, + (error) => { + done(error); + } + ); + }); + }); + + describe("#enableDomainTransferLock", () => { + const fixture = loadFixture("enableDomainTransferLock/success.http"); + + it("produces a transfer lock", (done) => { + nock("https://api.dnsimple.com") + .post("/v2/1010/registrar/domains/101/transfer_lock") + .reply(fixture.statusCode, fixture.body); + + dnsimple.registrar + .enableDomainTransferLock(accountId, "101") + .then( + ({ data }) => { + expect(data).to.deep.eq({ + enabled: true, + }); + done(); + }, + (error) => { + done(error); + } + ); + }); + }); + + describe("#disableDomainTransferLock", () => { + const fixture = loadFixture("disableDomainTransferLock/success.http"); + + it("produces a transfer lock", (done) => { + nock("https://api.dnsimple.com") + .delete("/v2/1010/registrar/domains/101/transfer_lock") + .reply(fixture.statusCode, fixture.body); + + dnsimple.registrar.disableDomainTransferLock(accountId, "101").then( + ({data}) => { + expect(data).to.deep.eq({ + enabled: false, + }); + done(); + }, + (error) => { + done(error); + } + ); + }); + }); +}); From 9b322c2f050136de3099d9b989039efba0ce88e7 Mon Sep 17 00:00:00 2001 From: Wilson Lin Date: Wed, 30 Aug 2023 15:44:57 +1000 Subject: [PATCH 2/3] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index faa9b7f..3355ac4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ FEATURES: - NEW: Added `listRegistrantChanges`, `createRegistrantChange`, `checkRegistrantChange`, `getRegistrantChange`, and `deleteRegistrantChange` APIs to manage registrant changes. (dnsimple/dnsimple-node#181) +- NEW: Added `getDomainTransferLock`, `enableDomainTransferLock`, `disableDomainTransferLock` APIs to manage domain transfer locks. (dnsimple/dnsimple-node#183) ## 7.1.1 From 67be55e24559351e600616a9a240db599e81e0a6 Mon Sep 17 00:00:00 2001 From: Wilson Lin Date: Wed, 30 Aug 2023 16:02:20 +1000 Subject: [PATCH 3/3] Reformatting --- test/registrar_domain_transfer_lock.spec.ts | 50 ++++++++++----------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/test/registrar_domain_transfer_lock.spec.ts b/test/registrar_domain_transfer_lock.spec.ts index 876495f..f547356 100644 --- a/test/registrar_domain_transfer_lock.spec.ts +++ b/test/registrar_domain_transfer_lock.spec.ts @@ -15,19 +15,17 @@ describe("domain transfer lock", () => { .get("/v2/1010/registrar/domains/101/transfer_lock") .reply(fixture.statusCode, fixture.body); - dnsimple.registrar - .getDomainTransferLock(accountId, "101") - .then( - ({ data }) => { - expect(data).to.deep.eq({ - enabled: true, - }); - done(); - }, - (error) => { - done(error); - } - ); + dnsimple.registrar.getDomainTransferLock(accountId, "101").then( + ({ data }) => { + expect(data).to.deep.eq({ + enabled: true, + }); + done(); + }, + (error) => { + done(error); + } + ); }); }); @@ -39,19 +37,17 @@ describe("domain transfer lock", () => { .post("/v2/1010/registrar/domains/101/transfer_lock") .reply(fixture.statusCode, fixture.body); - dnsimple.registrar - .enableDomainTransferLock(accountId, "101") - .then( - ({ data }) => { - expect(data).to.deep.eq({ - enabled: true, - }); - done(); - }, - (error) => { - done(error); - } - ); + dnsimple.registrar.enableDomainTransferLock(accountId, "101").then( + ({ data }) => { + expect(data).to.deep.eq({ + enabled: true, + }); + done(); + }, + (error) => { + done(error); + } + ); }); }); @@ -64,7 +60,7 @@ describe("domain transfer lock", () => { .reply(fixture.statusCode, fixture.body); dnsimple.registrar.disableDomainTransferLock(accountId, "101").then( - ({data}) => { + ({ data }) => { expect(data).to.deep.eq({ enabled: false, });