namecheap-ts 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,10 +17,10 @@ You can use the package to perform various operations such as domain registratio
17
17
  ```typescript
18
18
  import Namecheap, { INamecheapConfig } from "namecheap-ts";
19
19
  const config: INamecheapConfig = {
20
- ApiKey: "api-key",
21
- ApiUser: "api-user",
22
- UserName: "user-name",
23
- ClientIp: "client-ip",
20
+ apiKey: "api-key",
21
+ apiUser: "api-user",
22
+ username: "user-name",
23
+ clientIp: "client-ip",
24
24
  };
25
25
 
26
26
  const api = new Namecheap(config, true);
@@ -28,7 +28,7 @@ const api = new Namecheap(config, true);
28
28
  const payload = { DomainList: "mezoishere.net" };
29
29
  const { data } = await api.call("namecheap.domains.check", payload);
30
30
 
31
- const isAvailabe = data[0].DomainCheckResult[0].$.Available;
31
+ const isAvailabe = data.DomainCheckResult.$.Available;
32
32
  console.log(isAvailable);
33
33
  ```
34
34
 
@@ -44,7 +44,7 @@ Create a new instance of the `Namecheap` class.
44
44
  const namecheap = new Namecheap(config, true);
45
45
  ```
46
46
 
47
- #### `call(command: Command, payload: Record<string, string>): Promise<IReponse>`
47
+ #### `call(command: Command, payload: Payload): Promise<IReponse>`
48
48
 
49
49
  Call a command on the Namecheap API.
50
50
 
@@ -62,14 +62,14 @@ console.log(response);
62
62
  Check if a domain is available and if it'is premium.
63
63
 
64
64
  ```typescript
65
- const { availabe, premium } = await namecheap.checkDomain("example.com");
65
+ const { data } = await namecheap.checkDomain("example.com");
66
66
 
67
- console.log({ availabe, premium });
67
+ console.log({ availabe: data.availabe, premium: data.premium });
68
68
  ```
69
69
 
70
70
  #### `getDomainPrice(domainName: string, action: DomainPriceAction): Promise<IReponse>`
71
71
 
72
- Get the price of a domain.
72
+ Get the prices list of a domain.
73
73
 
74
74
  ```typescript
75
75
  import { DomainPriceAction } from "namecheap-ts";
@@ -81,4 +81,49 @@ const response = await namecheap.getDomainPrice(
81
81
  console.log(response);
82
82
  ```
83
83
 
84
+ #### `registerDomain(payload: Payload): Promise<IRegisterDomainResponse>`
85
+
86
+ Register domain in namecheap.
87
+
88
+ ```typescript
89
+ const payload = {
90
+ DomainName: "mezoishere.co",
91
+ Years: 2,
92
+ // ...etc other attributes
93
+ };
94
+
95
+ const response = await namecheap.registerDomain(payload);
96
+
97
+ console.log(response);
98
+ ```
99
+
100
+ #### `addFundsRequest(payload: AddFundsRequestPayload): Promise<IAddFundsRequestResponse>`
101
+
102
+ Add funds to the user account.
103
+
104
+ ```typescript
105
+ const payload = {
106
+ username: "username",
107
+ paymentType: "creditcard",
108
+ amount: 10,
109
+ returnURL: "the return url after payment is done",
110
+ };
111
+
112
+ const response = await namecheap.addFundsRequest(payload);
113
+
114
+ console.log(response);
115
+ ```
116
+
117
+ #### `getFundsStatus(tokenId: string): Promise<IGetFundsStatusResponse>`
118
+
119
+ Check the status of a specific funds request.
120
+
121
+ ```typescript
122
+ const tokenId = "the-token-id-of-the-created-funds-request"
123
+
124
+ const response = await namecheap.getFundsStatus(tokentId);
125
+
126
+ console.log(response);
127
+ ```
128
+
84
129
  You can refer to the official Namecheap API documentation for more information on the available methods and parameters. [The documentation is available at ¹](https://www.namecheap.com/support/api/intro/).
package/dist/index.d.mts CHANGED
@@ -61,6 +61,35 @@ declare enum Commands {
61
61
  }
62
62
  type Command = `${Commands}`;
63
63
 
64
+ type Payload = Record<string, string | number>;
65
+ interface IReponse<T = any> {
66
+ data: T;
67
+ status: number;
68
+ }
69
+ type ICheckDomainResponse = IReponse<{
70
+ availabe: boolean;
71
+ premium: boolean;
72
+ }>;
73
+ type IRegisterDomainResponse = IReponse<{
74
+ domain: string;
75
+ registered: boolean;
76
+ chargedAmount: number;
77
+ domainID: string;
78
+ orderID: string;
79
+ transactionID: string;
80
+ whoisguardEnable: boolean;
81
+ freePositiveSSL: boolean;
82
+ nonRealTimeDomain: boolean;
83
+ }>;
84
+ type IAddFundsRequestResponse = IReponse<{
85
+ tokenId: string;
86
+ returnURL: string;
87
+ redirectURL: string;
88
+ }>;
89
+ type IGetFundsStatusResponse = IReponse<{
90
+ status: string;
91
+ amount: number;
92
+ }>;
64
93
  declare enum DomainPriceActions {
65
94
  REGISTER = "REGISTER",
66
95
  RENEW = "RENEW",
@@ -68,28 +97,29 @@ declare enum DomainPriceActions {
68
97
  TRANSFER = "TRANSFER"
69
98
  }
70
99
  type DomainPriceAction = `${DomainPriceActions}`;
100
+ type AddFundsRequestPayload = {
101
+ username?: string;
102
+ paymentType: "creditcard";
103
+ amount: number;
104
+ returnURL: string;
105
+ };
71
106
 
72
107
  interface INamecheapConfig {
73
- ApiUser: string;
74
- ApiKey: string;
75
- UserName: string;
76
- ClientIp: string;
77
- }
78
- interface IReponse {
79
- data: any;
80
- status: number;
81
- }
82
- interface ICheckDomainResponse {
83
- availabe: boolean;
84
- premium: boolean;
108
+ apiUser: string;
109
+ apiKey: string;
110
+ username: string;
111
+ clientIp: string;
85
112
  }
86
113
  declare class Namecheap {
87
114
  private readonly config;
88
115
  private readonly apiClient;
89
116
  constructor(config: INamecheapConfig, sandbox?: boolean);
90
- call(command: Command, payload: Record<string, string>): Promise<IReponse>;
117
+ call(command: Command, payload: Payload): Promise<IReponse>;
91
118
  checkDomain(domainName: string): Promise<ICheckDomainResponse>;
92
- getDomainPrice(domainName: string, action: DomainPriceAction): Promise<IReponse>;
119
+ getDomainPrice(domainName: string, action: DomainPriceAction): Promise<IReponse<object[]>>;
120
+ registerDomain(payload: Payload): Promise<IRegisterDomainResponse>;
121
+ addFundsRequest(payload: AddFundsRequestPayload): Promise<IAddFundsRequestResponse>;
122
+ getFundsStatus(tokenId: string): Promise<IGetFundsStatusResponse>;
93
123
  }
94
124
 
95
- export { Command, Commands, DomainPriceAction, DomainPriceActions, ICheckDomainResponse, INamecheapConfig, IReponse, Namecheap as default };
125
+ export { AddFundsRequestPayload, Command, Commands, DomainPriceAction, DomainPriceActions, IAddFundsRequestResponse, ICheckDomainResponse, IGetFundsStatusResponse, INamecheapConfig, IRegisterDomainResponse, IReponse, Payload, Namecheap as default };
package/dist/index.d.ts CHANGED
@@ -61,6 +61,35 @@ declare enum Commands {
61
61
  }
62
62
  type Command = `${Commands}`;
63
63
 
64
+ type Payload = Record<string, string | number>;
65
+ interface IReponse<T = any> {
66
+ data: T;
67
+ status: number;
68
+ }
69
+ type ICheckDomainResponse = IReponse<{
70
+ availabe: boolean;
71
+ premium: boolean;
72
+ }>;
73
+ type IRegisterDomainResponse = IReponse<{
74
+ domain: string;
75
+ registered: boolean;
76
+ chargedAmount: number;
77
+ domainID: string;
78
+ orderID: string;
79
+ transactionID: string;
80
+ whoisguardEnable: boolean;
81
+ freePositiveSSL: boolean;
82
+ nonRealTimeDomain: boolean;
83
+ }>;
84
+ type IAddFundsRequestResponse = IReponse<{
85
+ tokenId: string;
86
+ returnURL: string;
87
+ redirectURL: string;
88
+ }>;
89
+ type IGetFundsStatusResponse = IReponse<{
90
+ status: string;
91
+ amount: number;
92
+ }>;
64
93
  declare enum DomainPriceActions {
65
94
  REGISTER = "REGISTER",
66
95
  RENEW = "RENEW",
@@ -68,28 +97,29 @@ declare enum DomainPriceActions {
68
97
  TRANSFER = "TRANSFER"
69
98
  }
70
99
  type DomainPriceAction = `${DomainPriceActions}`;
100
+ type AddFundsRequestPayload = {
101
+ username?: string;
102
+ paymentType: "creditcard";
103
+ amount: number;
104
+ returnURL: string;
105
+ };
71
106
 
72
107
  interface INamecheapConfig {
73
- ApiUser: string;
74
- ApiKey: string;
75
- UserName: string;
76
- ClientIp: string;
77
- }
78
- interface IReponse {
79
- data: any;
80
- status: number;
81
- }
82
- interface ICheckDomainResponse {
83
- availabe: boolean;
84
- premium: boolean;
108
+ apiUser: string;
109
+ apiKey: string;
110
+ username: string;
111
+ clientIp: string;
85
112
  }
86
113
  declare class Namecheap {
87
114
  private readonly config;
88
115
  private readonly apiClient;
89
116
  constructor(config: INamecheapConfig, sandbox?: boolean);
90
- call(command: Command, payload: Record<string, string>): Promise<IReponse>;
117
+ call(command: Command, payload: Payload): Promise<IReponse>;
91
118
  checkDomain(domainName: string): Promise<ICheckDomainResponse>;
92
- getDomainPrice(domainName: string, action: DomainPriceAction): Promise<IReponse>;
119
+ getDomainPrice(domainName: string, action: DomainPriceAction): Promise<IReponse<object[]>>;
120
+ registerDomain(payload: Payload): Promise<IRegisterDomainResponse>;
121
+ addFundsRequest(payload: AddFundsRequestPayload): Promise<IAddFundsRequestResponse>;
122
+ getFundsStatus(tokenId: string): Promise<IGetFundsStatusResponse>;
93
123
  }
94
124
 
95
- export { Command, Commands, DomainPriceAction, DomainPriceActions, ICheckDomainResponse, INamecheapConfig, IReponse, Namecheap as default };
125
+ export { AddFundsRequestPayload, Command, Commands, DomainPriceAction, DomainPriceActions, IAddFundsRequestResponse, ICheckDomainResponse, IGetFundsStatusResponse, INamecheapConfig, IRegisterDomainResponse, IReponse, Payload, Namecheap as default };
package/dist/index.js CHANGED
@@ -22,6 +22,18 @@ var __spreadValues = (a, b) => {
22
22
  return a;
23
23
  };
24
24
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __objRest = (source, exclude) => {
26
+ var target = {};
27
+ for (var prop in source)
28
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
29
+ target[prop] = source[prop];
30
+ if (source != null && __getOwnPropSymbols)
31
+ for (var prop of __getOwnPropSymbols(source)) {
32
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
33
+ target[prop] = source[prop];
34
+ }
35
+ return target;
36
+ };
25
37
  var __export = (target, all) => {
26
38
  for (var name in all)
27
39
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -148,7 +160,6 @@ var DomainPriceActions = /* @__PURE__ */ ((DomainPriceActions2) => {
148
160
 
149
161
  // src/api/api-client.ts
150
162
  var import_axios = __toESM(require("axios"));
151
- var import_xml2js = require("xml2js");
152
163
 
153
164
  // src/api/errors.ts
154
165
  var XMLParsingError = class extends Error {
@@ -165,6 +176,24 @@ var ResponseError = class extends Error {
165
176
  }
166
177
  };
167
178
 
179
+ // src/api/utils.ts
180
+ var import_xml2js = require("xml2js");
181
+ function parseXMLString(xml) {
182
+ return (0, import_xml2js.parseStringPromise)(xml, {
183
+ explicitArray: false,
184
+ attrValueProcessors: [transformValues]
185
+ });
186
+ }
187
+ function transformValues(value, name) {
188
+ if (value === "false" || value === "true") {
189
+ return value === "true";
190
+ }
191
+ if (!isNaN(+value)) {
192
+ return +value;
193
+ }
194
+ return value;
195
+ }
196
+
168
197
  // src/api/api-client.ts
169
198
  var APIClient = class {
170
199
  constructor(baseURL) {
@@ -176,14 +205,19 @@ var APIClient = class {
176
205
  return yield this._client.get(url);
177
206
  });
178
207
  }
208
+ post(url) {
209
+ return __async(this, null, function* () {
210
+ return yield this._client.post(url);
211
+ });
212
+ }
179
213
  onResponse(response) {
180
214
  return __async(this, null, function* () {
181
215
  try {
182
- const result = yield (0, import_xml2js.parseStringPromise)(response.data);
216
+ const result = yield parseXMLString(response.data);
183
217
  if (result.ApiResponse.$.Status === "ERROR") {
184
218
  const responseErrors = result.ApiResponse.Errors;
185
- const code = responseErrors[0].Error[0].$.Number;
186
- const message = responseErrors[0].Error[0]._;
219
+ const code = responseErrors.Error.$.Number;
220
+ const message = responseErrors.Error._;
187
221
  throw new ResponseError(message, code);
188
222
  }
189
223
  response.data = result.ApiResponse.CommandResponse;
@@ -217,31 +251,35 @@ var Namecheap = class {
217
251
  }
218
252
  call(command, payload) {
219
253
  return __async(this, null, function* () {
220
- const params = __spreadProps(__spreadValues(__spreadValues({}, payload), this.config), {
254
+ const _a = this.config, { username } = _a, config = __objRest(_a, ["username"]);
255
+ const params = __spreadProps(__spreadValues(__spreadValues({
256
+ username
257
+ }, payload), config), {
221
258
  command
222
259
  });
223
260
  const url = "?" + new URLSearchParams(params).toString();
224
- const { data, status } = yield this.apiClient.get(url);
261
+ const { data, status } = yield this.apiClient.post(url);
225
262
  return { data, status };
226
263
  });
227
264
  }
228
265
  checkDomain(domainName) {
229
266
  return __async(this, null, function* () {
230
- const { data } = yield this.call("namecheap.domains.check" /* DOMAINS_CHECK */, {
267
+ const { data, status } = yield this.call("namecheap.domains.check" /* DOMAINS_CHECK */, {
231
268
  DomainList: domainName
232
269
  });
233
- const isAvailabe = data[0].DomainCheckResult[0].$.Available;
234
- const isPremium = data[0].DomainCheckResult[0].$.IsPremiumName;
235
270
  const response = {
236
- availabe: isAvailabe === "true",
237
- premium: isPremium === "true"
271
+ data: {
272
+ availabe: data.DomainCheckResult.$.Available,
273
+ premium: data.DomainCheckResult.$.IsPremiumName
274
+ },
275
+ status
238
276
  };
239
277
  return response;
240
278
  });
241
279
  }
242
280
  getDomainPrice(domainName, action) {
243
281
  return __async(this, null, function* () {
244
- var _a, _b, _c, _d, _e, _f, _g, _h;
282
+ var _a, _b, _c, _d;
245
283
  const [_, tld] = domainName.split(".");
246
284
  if (!tld) {
247
285
  throw new InvalidDomainNameException(domainName);
@@ -252,12 +290,66 @@ var Namecheap = class {
252
290
  ActionName: action,
253
291
  ProductName: tld
254
292
  });
255
- const pricing = (_h = (_g = (_f = (_e = (_d = (_c = (_b = (_a = data[0].UserGetPricingResult[0]) == null ? void 0 : _a.ProductType) == null ? void 0 : _b[0]) == null ? void 0 : _c.ProductCategory) == null ? void 0 : _d[0]) == null ? void 0 : _e.Product) == null ? void 0 : _f[0]) == null ? void 0 : _g.Price) == null ? void 0 : _h.map(
256
- (price) => __spreadValues({}, price.$)
257
- );
293
+ const pricing = (((_d = (_c = (_b = (_a = data.UserGetPricingResult) == null ? void 0 : _a.ProductType) == null ? void 0 : _b.ProductCategory) == null ? void 0 : _c.Product) == null ? void 0 : _d.Price) || []).map((price) => __spreadValues({}, price.$));
258
294
  return { data: pricing, status };
259
295
  });
260
296
  }
297
+ registerDomain(payload) {
298
+ return __async(this, null, function* () {
299
+ var _a;
300
+ const { data, status } = yield this.call("namecheap.domains.create" /* DOMAINS_CREATE */, payload);
301
+ const result = (_a = data == null ? void 0 : data.DomainCreateResult) == null ? void 0 : _a.$;
302
+ const response = {
303
+ data: {
304
+ domain: result.Domain,
305
+ registered: result.Registered,
306
+ chargedAmount: result.ChargedAmount,
307
+ domainID: result.DomainID,
308
+ orderID: result.OrderID,
309
+ transactionID: result.TransactionID,
310
+ whoisguardEnable: result.WhoisguardEnable,
311
+ freePositiveSSL: result.FreePositiveSSL,
312
+ nonRealTimeDomain: result.NonRealTimeDomain
313
+ },
314
+ status
315
+ };
316
+ return response;
317
+ });
318
+ }
319
+ addFundsRequest(payload) {
320
+ return __async(this, null, function* () {
321
+ const { data, status } = yield this.call(
322
+ "namecheap.users.createaddfundsrequest" /* USERS_CREATEADDFUNDSREQUEST */,
323
+ payload
324
+ );
325
+ const result = data.Createaddfundsrequestresult.$;
326
+ const response = {
327
+ data: {
328
+ tokenId: result.TokenID,
329
+ returnURL: result.ReturnURL,
330
+ redirectURL: result.RedirectURL
331
+ },
332
+ status
333
+ };
334
+ return response;
335
+ });
336
+ }
337
+ getFundsStatus(tokenId) {
338
+ return __async(this, null, function* () {
339
+ const { data, status } = yield this.call("namecheap.users.getAddFundsStatus" /* USERS_GETADDFUNDSSTATUS */, {
340
+ tokenId
341
+ });
342
+ const result = data.GetAddFundsStatusResult.$;
343
+ const response = {
344
+ data: {
345
+ amount: result.Amount,
346
+ status: result.Status
347
+ },
348
+ status
349
+ };
350
+ return response;
351
+ });
352
+ }
261
353
  };
262
354
  var namecheap_default = Namecheap;
263
355
  // Annotate the CommonJS export names for ESM import in node:
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands.ts","../src/types.ts","../src/api/api-client.ts","../src/api/errors.ts","../src/exceptions/InvalidDomainNameException.ts","../src/namecheap.ts"],"sourcesContent":["export * from \"./commands\";\r\nexport * from \"./types\";\r\nexport * from \"./namecheap\";\r\nexport { default } from \"./namecheap\";\r\n","export enum Commands {\r\n // domains\r\n DOMAINS_GETLIST = \"namecheap.domains.getList\",\r\n DOMAINS_GETCONTACTS = \"namecheap.domains.getContacts\",\r\n DOMAINS_CREATE = \"namecheap.domains.create\",\r\n DOMAINS_GETTLDLIST = \"namecheap.domains.getTldList\",\r\n DOMAINS_SETCONTACTS = \"namecheap.domains.setContacts\",\r\n DOMAINS_CHECK = \"namecheap.domains.check\",\r\n DOMAINS_REACTIVATE = \"namecheap.domains.reactivate\",\r\n DOMAINS_RENEW = \"namecheap.domains.renew\",\r\n DOMAINS_GETREGISTRARLOCK = \"namecheap.domains.getRegistrarLock\",\r\n DOMAINS_SETREGISTRARLOCK = \"namecheap.domains.setRegistrarLock\",\r\n DOMAINS_GETINFO = \"namecheap.domains.getInfo\",\r\n\r\n // domains.dns\r\n DOMAINS_DNS_SETDEFAULT = \"namecheap.domains.dns.setDefault\",\r\n DOMAINS_DNS_SETCUSTOM = \"namecheap.domains.dns.setCustom\",\r\n DOMAINS_DNS_GETLIST = \"namecheap.domains.dns.getList\",\r\n DOMAINS_DNS_GETHOSTS = \"namecheap.domains.dns.getHosts\",\r\n DOMAINS_DNS_GETEMAILFORWARDING = \"namecheap.domains.dns.getEmailForwarding\",\r\n DOMAINS_DNS_SETEMAILFORWARDING = \"namecheap.domains.dns.setEmailForwarding\",\r\n DOMAINS_DNS_SETHOSTS = \"namecheap.domains.dns.setHosts\",\r\n\r\n // domains.ns\r\n DOMAINS_NS_CREATE = \"namecheap.domains.ns.create\",\r\n DOMAINS_NS_DELETE = \"namecheap.domains.ns.delete\",\r\n DOMAINS_NS_GETINFO = \"namecheap.domains.ns.getInfo\",\r\n DOMAINS_NS_UPDATE = \"namecheap.domains.ns.update\",\r\n\r\n // domains.transfer\r\n DOMAINS_TRANSFER_CREATE = \"namecheap.domains.transfer.create\",\r\n DOMAINS_TRANSFER_GETSTATUS = \"namecheap.domains.transfer.getStatus\",\r\n DOMAINS_TRANSFER_UPDATESTATUS = \"namecheap.domains.transfer.updateStatus\",\r\n DOMAINS_TRANSFER_GETLIST = \"namecheap.domains.transfer.getList\",\r\n\r\n // ssl\r\n SSL_CREATE = \"namecheap.ssl.create\",\r\n SSL_GETLIST = \"namecheap.ssl.getList\",\r\n SSL_PARSECSR = \"namecheap.ssl.parseCSR\",\r\n SSL_GETAPPROVEREMAILLIST = \"namecheap.ssl.getApproverEmailList\",\r\n SSL_ACTIVATE = \"namecheap.ssl.activate\",\r\n SSL_RESENDAPPROVEREMAIL = \"namecheap.ssl.resendApproverEmail\",\r\n SSL_GETINFO = \"namecheap.ssl.getInfo\",\r\n SSL_RENEW = \"namecheap.ssl.renew\",\r\n SSL_REISSUE = \"namecheap.ssl.reissue\",\r\n SSL_RESENDFULFILLMENTEMAIL = \"namecheap.ssl.resendfulfillmentemail\",\r\n SSL_PURCHASEMORESANS = \"namecheap.ssl.purchasemoresans\",\r\n SSL_REVOKECERTIFICATE = \"namecheap.ssl.revokecertificate\",\r\n SSL_EDITDCVMETHOD = \"namecheap.ssl.editDCVMethod\",\r\n\r\n // users\r\n USERS_GETPRICING = \"namecheap.users.getPricing\",\r\n USERS_GETBALANCES = \"namecheap.users.getBalances\",\r\n USERS_CHANGEPASSWORD = \"namecheap.users.changePassword\",\r\n USERS_UPDATE = \"namecheap.users.update\",\r\n USERS_CREATEADDFUNDSREQUEST = \"namecheap.users.createaddfundsrequest\",\r\n USERS_GETADDFUNDSSTATUS = \"namecheap.users.getAddFundsStatus\",\r\n USERS_CREATE = \"namecheap.users.create\",\r\n USERS_LOGIN = \"namecheap.users.login\",\r\n USERS_RESETPASSWORD = \"namecheap.users.resetPassword\",\r\n\r\n // users.address\r\n USERS_ADDRESS_CREATE = \"namecheap.users.address.create\",\r\n USERS_ADDRESS_DELETE = \"namecheap.users.address.delete\",\r\n USERS_ADDRESS_GETINFO = \"namecheap.users.address.getInfo\",\r\n USERS_ADDRESS_GETLIST = \"namecheap.users.address.getList\",\r\n USERS_ADDRESS_SETDEFAULT = \"namecheap.users.address.setDefault\",\r\n USERS_ADDRESS_UPDATE = \"namecheap.users.address.update\",\r\n\r\n // domainprivacy\r\n WHOISGUARD_CHANGEEMAILADDRESS = \"Namecheap.Whoisguard.changeemailaddress\",\r\n WHOISGUARD_ENABLE = \"Namecheap.Whoisguard.enable\",\r\n WHOISGUARD_DISABLE = \"Namecheap.Whoisguard.disable\",\r\n WHOISGUARD_GETLIST = \"Namecheap.Whoisguard.getList\",\r\n WHOISGUARD_RENEW = \"Namecheap.Whoisguard.renew\",\r\n}\r\n\r\nexport type Command = `${Commands}`;\r\n","export enum DomainPriceActions {\r\n REGISTER = \"REGISTER\",\r\n RENEW = \"RENEW\",\r\n REACTIVATE = \"REACTIVATE\",\r\n TRANSFER = \"TRANSFER\",\r\n}\r\n\r\nexport type DomainPriceAction = `${DomainPriceActions}`;\r\n","import axios, { AxiosInstance, AxiosResponse } from \"axios\";\r\nimport { parseStringPromise } from \"xml2js\";\r\nimport { ResponseError, XMLParsingError } from \"./errors\";\r\n\r\nclass APIClient {\r\n private readonly _client: AxiosInstance;\r\n constructor(baseURL: string) {\r\n this._client = axios.create({ baseURL });\r\n this._client.interceptors.response.use(this.onResponse);\r\n }\r\n\r\n async get(url: string) {\r\n return await this._client.get(url);\r\n }\r\n\r\n private async onResponse(response: AxiosResponse): Promise<AxiosResponse> {\r\n try {\r\n const result = await parseStringPromise(response.data);\r\n\r\n if (result.ApiResponse.$.Status === \"ERROR\") {\r\n const responseErrors = result.ApiResponse.Errors;\r\n const code = responseErrors[0].Error[0].$.Number;\r\n const message = responseErrors[0].Error[0]._;\r\n\r\n throw new ResponseError(message, code);\r\n }\r\n\r\n response.data = result.ApiResponse.CommandResponse;\r\n } catch (err) {\r\n response.status = 400;\r\n if (err instanceof ResponseError) {\r\n throw err;\r\n }\r\n\r\n throw new XMLParsingError();\r\n }\r\n\r\n return response;\r\n }\r\n}\r\n\r\nexport default APIClient;\r\n","export class XMLParsingError extends Error {\r\n constructor() {\r\n super(\"Invalid XML response\");\r\n\r\n this.name = \"XMLParsingError\";\r\n }\r\n}\r\n\r\nexport class ResponseError extends Error {\r\n constructor(message: string, readonly code?: number) {\r\n super((code ? `${code}: ` : \"\") + message);\r\n\r\n this.name = \"ResponseError\";\r\n }\r\n}\r\n","export class InvalidDomainNameException extends Error {\r\n constructor(domainName: string) {\r\n super(`The provided domain name [${domainName}] is not valid`);\r\n\r\n this.name = \"InvalidDomainNameException\";\r\n }\r\n}\r\n","import APIClient from \"./api\";\r\nimport { Commands, Command } from \"./commands\";\r\nimport { InvalidDomainNameException } from \"./exceptions\";\r\nimport { DomainPriceAction } from \"./types\";\r\n\r\nexport interface INamecheapConfig {\r\n ApiUser: string;\r\n ApiKey: string;\r\n UserName: string;\r\n ClientIp: string;\r\n}\r\n\r\nexport interface IReponse {\r\n data: any;\r\n status: number;\r\n}\r\n\r\nexport interface ICheckDomainResponse {\r\n availabe: boolean;\r\n premium: boolean;\r\n}\r\n\r\nclass Namecheap {\r\n private readonly apiClient: APIClient;\r\n constructor(private readonly config: INamecheapConfig, sandbox?: boolean) {\r\n const baseURL = `https://api${\r\n sandbox ? \".sandbox\" : \"\"\r\n }.namecheap.com/xml.response`;\r\n this.apiClient = new APIClient(baseURL);\r\n }\r\n\r\n async call(\r\n command: Command,\r\n payload: Record<string, string>\r\n ): Promise<IReponse> {\r\n const params = {\r\n ...payload,\r\n ...this.config,\r\n command,\r\n };\r\n\r\n const url = \"?\" + new URLSearchParams(params).toString();\r\n\r\n const { data, status } = await this.apiClient.get(url);\r\n\r\n return { data, status };\r\n }\r\n\r\n async checkDomain(domainName: string): Promise<ICheckDomainResponse> {\r\n const { data } = await this.call(Commands.DOMAINS_CHECK, {\r\n DomainList: domainName,\r\n });\r\n\r\n const isAvailabe: string = data[0].DomainCheckResult[0].$.Available;\r\n const isPremium: string = data[0].DomainCheckResult[0].$.IsPremiumName;\r\n\r\n const response: ICheckDomainResponse = {\r\n availabe: isAvailabe === \"true\",\r\n premium: isPremium === \"true\",\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async getDomainPrice(\r\n domainName: string,\r\n action: DomainPriceAction\r\n ): Promise<IReponse> {\r\n const [_, tld] = domainName.split(\".\");\r\n if (!tld) {\r\n throw new InvalidDomainNameException(domainName);\r\n }\r\n\r\n const { data, status } = await this.call(Commands.USERS_GETPRICING, {\r\n ProductType: \"DOMAIN\",\r\n ProductCategory: \"DOMAINS\",\r\n ActionName: action,\r\n ProductName: tld,\r\n });\r\n\r\n const pricing =\r\n data[0].UserGetPricingResult[0]?.ProductType?.[0]?.ProductCategory?.[0]?.Product?.[0]?.Price?.map(\r\n (price: any) => ({ ...price.$ })\r\n );\r\n\r\n return { data: pricing, status };\r\n }\r\n}\r\n\r\nexport default Namecheap;\r\n"],"mappings":"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","names":["Commands","DomainPriceActions","axios"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands.ts","../src/types.ts","../src/api/api-client.ts","../src/api/errors.ts","../src/api/utils.ts","../src/exceptions/InvalidDomainNameException.ts","../src/namecheap.ts"],"sourcesContent":["export * from \"./commands\";\r\nexport * from \"./types\";\r\nexport * from \"./namecheap\";\r\nexport { default } from \"./namecheap\";\r\n","export enum Commands {\r\n // domains\r\n DOMAINS_GETLIST = \"namecheap.domains.getList\",\r\n DOMAINS_GETCONTACTS = \"namecheap.domains.getContacts\",\r\n DOMAINS_CREATE = \"namecheap.domains.create\",\r\n DOMAINS_GETTLDLIST = \"namecheap.domains.getTldList\",\r\n DOMAINS_SETCONTACTS = \"namecheap.domains.setContacts\",\r\n DOMAINS_CHECK = \"namecheap.domains.check\",\r\n DOMAINS_REACTIVATE = \"namecheap.domains.reactivate\",\r\n DOMAINS_RENEW = \"namecheap.domains.renew\",\r\n DOMAINS_GETREGISTRARLOCK = \"namecheap.domains.getRegistrarLock\",\r\n DOMAINS_SETREGISTRARLOCK = \"namecheap.domains.setRegistrarLock\",\r\n DOMAINS_GETINFO = \"namecheap.domains.getInfo\",\r\n\r\n // domains.dns\r\n DOMAINS_DNS_SETDEFAULT = \"namecheap.domains.dns.setDefault\",\r\n DOMAINS_DNS_SETCUSTOM = \"namecheap.domains.dns.setCustom\",\r\n DOMAINS_DNS_GETLIST = \"namecheap.domains.dns.getList\",\r\n DOMAINS_DNS_GETHOSTS = \"namecheap.domains.dns.getHosts\",\r\n DOMAINS_DNS_GETEMAILFORWARDING = \"namecheap.domains.dns.getEmailForwarding\",\r\n DOMAINS_DNS_SETEMAILFORWARDING = \"namecheap.domains.dns.setEmailForwarding\",\r\n DOMAINS_DNS_SETHOSTS = \"namecheap.domains.dns.setHosts\",\r\n\r\n // domains.ns\r\n DOMAINS_NS_CREATE = \"namecheap.domains.ns.create\",\r\n DOMAINS_NS_DELETE = \"namecheap.domains.ns.delete\",\r\n DOMAINS_NS_GETINFO = \"namecheap.domains.ns.getInfo\",\r\n DOMAINS_NS_UPDATE = \"namecheap.domains.ns.update\",\r\n\r\n // domains.transfer\r\n DOMAINS_TRANSFER_CREATE = \"namecheap.domains.transfer.create\",\r\n DOMAINS_TRANSFER_GETSTATUS = \"namecheap.domains.transfer.getStatus\",\r\n DOMAINS_TRANSFER_UPDATESTATUS = \"namecheap.domains.transfer.updateStatus\",\r\n DOMAINS_TRANSFER_GETLIST = \"namecheap.domains.transfer.getList\",\r\n\r\n // ssl\r\n SSL_CREATE = \"namecheap.ssl.create\",\r\n SSL_GETLIST = \"namecheap.ssl.getList\",\r\n SSL_PARSECSR = \"namecheap.ssl.parseCSR\",\r\n SSL_GETAPPROVEREMAILLIST = \"namecheap.ssl.getApproverEmailList\",\r\n SSL_ACTIVATE = \"namecheap.ssl.activate\",\r\n SSL_RESENDAPPROVEREMAIL = \"namecheap.ssl.resendApproverEmail\",\r\n SSL_GETINFO = \"namecheap.ssl.getInfo\",\r\n SSL_RENEW = \"namecheap.ssl.renew\",\r\n SSL_REISSUE = \"namecheap.ssl.reissue\",\r\n SSL_RESENDFULFILLMENTEMAIL = \"namecheap.ssl.resendfulfillmentemail\",\r\n SSL_PURCHASEMORESANS = \"namecheap.ssl.purchasemoresans\",\r\n SSL_REVOKECERTIFICATE = \"namecheap.ssl.revokecertificate\",\r\n SSL_EDITDCVMETHOD = \"namecheap.ssl.editDCVMethod\",\r\n\r\n // users\r\n USERS_GETPRICING = \"namecheap.users.getPricing\",\r\n USERS_GETBALANCES = \"namecheap.users.getBalances\",\r\n USERS_CHANGEPASSWORD = \"namecheap.users.changePassword\",\r\n USERS_UPDATE = \"namecheap.users.update\",\r\n USERS_CREATEADDFUNDSREQUEST = \"namecheap.users.createaddfundsrequest\",\r\n USERS_GETADDFUNDSSTATUS = \"namecheap.users.getAddFundsStatus\",\r\n USERS_CREATE = \"namecheap.users.create\",\r\n USERS_LOGIN = \"namecheap.users.login\",\r\n USERS_RESETPASSWORD = \"namecheap.users.resetPassword\",\r\n\r\n // users.address\r\n USERS_ADDRESS_CREATE = \"namecheap.users.address.create\",\r\n USERS_ADDRESS_DELETE = \"namecheap.users.address.delete\",\r\n USERS_ADDRESS_GETINFO = \"namecheap.users.address.getInfo\",\r\n USERS_ADDRESS_GETLIST = \"namecheap.users.address.getList\",\r\n USERS_ADDRESS_SETDEFAULT = \"namecheap.users.address.setDefault\",\r\n USERS_ADDRESS_UPDATE = \"namecheap.users.address.update\",\r\n\r\n // domainprivacy\r\n WHOISGUARD_CHANGEEMAILADDRESS = \"Namecheap.Whoisguard.changeemailaddress\",\r\n WHOISGUARD_ENABLE = \"Namecheap.Whoisguard.enable\",\r\n WHOISGUARD_DISABLE = \"Namecheap.Whoisguard.disable\",\r\n WHOISGUARD_GETLIST = \"Namecheap.Whoisguard.getList\",\r\n WHOISGUARD_RENEW = \"Namecheap.Whoisguard.renew\",\r\n}\r\n\r\nexport type Command = `${Commands}`;\r\n","export type Payload = Record<string, string | number>;\r\n\r\nexport interface IReponse<T = any> {\r\n data: T;\r\n status: number;\r\n}\r\n\r\nexport type ICheckDomainResponse = IReponse<{\r\n availabe: boolean;\r\n premium: boolean;\r\n}>;\r\n\r\nexport type IRegisterDomainResponse = IReponse<{\r\n domain: string;\r\n registered: boolean;\r\n chargedAmount: number;\r\n domainID: string;\r\n orderID: string;\r\n transactionID: string;\r\n whoisguardEnable: boolean;\r\n freePositiveSSL: boolean;\r\n nonRealTimeDomain: boolean;\r\n}>;\r\n\r\nexport type IAddFundsRequestResponse = IReponse<{\r\n tokenId: string;\r\n returnURL: string;\r\n redirectURL: string;\r\n}>;\r\n\r\nexport type IGetFundsStatusResponse = IReponse<{\r\n status: string;\r\n amount: number;\r\n}>;\r\n\r\nexport enum DomainPriceActions {\r\n REGISTER = \"REGISTER\",\r\n RENEW = \"RENEW\",\r\n REACTIVATE = \"REACTIVATE\",\r\n TRANSFER = \"TRANSFER\",\r\n}\r\n\r\nexport type DomainPriceAction = `${DomainPriceActions}`;\r\n\r\nexport type AddFundsRequestPayload = {\r\n username?: string;\r\n paymentType: \"creditcard\";\r\n amount: number;\r\n returnURL: string;\r\n};\r\n","import axios, { AxiosInstance, AxiosResponse } from \"axios\";\r\nimport { ResponseError, XMLParsingError } from \"./errors\";\r\nimport { parseXMLString } from \"./utils\";\r\n\r\nclass APIClient {\r\n private readonly _client: AxiosInstance;\r\n constructor(baseURL: string) {\r\n this._client = axios.create({ baseURL });\r\n this._client.interceptors.response.use(this.onResponse);\r\n }\r\n\r\n async get(url: string) {\r\n return await this._client.get(url);\r\n }\r\n\r\n async post(url: string) {\r\n return await this._client.post(url);\r\n }\r\n\r\n private async onResponse(response: AxiosResponse): Promise<AxiosResponse> {\r\n try {\r\n const result = await parseXMLString(response.data);\r\n\r\n if (result.ApiResponse.$.Status === \"ERROR\") {\r\n const responseErrors = result.ApiResponse.Errors;\r\n const code = responseErrors.Error.$.Number;\r\n const message = responseErrors.Error._;\r\n\r\n throw new ResponseError(message, code);\r\n }\r\n\r\n response.data = result.ApiResponse.CommandResponse;\r\n } catch (err) {\r\n response.status = 400;\r\n if (err instanceof ResponseError) {\r\n throw err;\r\n }\r\n\r\n throw new XMLParsingError();\r\n }\r\n\r\n return response;\r\n }\r\n}\r\n\r\nexport default APIClient;\r\n","export class XMLParsingError extends Error {\r\n constructor() {\r\n super(\"Invalid XML response\");\r\n\r\n this.name = \"XMLParsingError\";\r\n }\r\n}\r\n\r\nexport class ResponseError extends Error {\r\n constructor(message: string, readonly code?: number) {\r\n super((code ? `${code}: ` : \"\") + message);\r\n\r\n this.name = \"ResponseError\";\r\n }\r\n}\r\n","import { parseStringPromise } from \"xml2js\";\r\n\r\nexport function parseXMLString(xml: string): Promise<any> {\r\n return parseStringPromise(xml, {\r\n explicitArray: false,\r\n attrValueProcessors: [transformValues],\r\n });\r\n}\r\n\r\nfunction transformValues(value: string, name: string) {\r\n // check boolean\r\n if (value === \"false\" || value === \"true\") {\r\n return value === \"true\";\r\n }\r\n\r\n // check numbers\r\n if (!isNaN(+value)) {\r\n return +value;\r\n }\r\n\r\n return value;\r\n}\r\n","export class InvalidDomainNameException extends Error {\r\n constructor(domainName: string) {\r\n super(`The provided domain name [${domainName}] is not valid`);\r\n\r\n this.name = \"InvalidDomainNameException\";\r\n }\r\n}\r\n","import APIClient from \"./api\";\r\nimport { Commands, Command } from \"./commands\";\r\nimport { InvalidDomainNameException } from \"./exceptions\";\r\nimport {\r\n AddFundsRequestPayload,\r\n DomainPriceAction,\r\n IAddFundsRequestResponse,\r\n ICheckDomainResponse,\r\n IGetFundsStatusResponse,\r\n IRegisterDomainResponse,\r\n IReponse,\r\n Payload,\r\n} from \"./types\";\r\n\r\nexport interface INamecheapConfig {\r\n apiUser: string;\r\n apiKey: string;\r\n username: string;\r\n clientIp: string;\r\n}\r\n\r\nclass Namecheap {\r\n private readonly apiClient: APIClient;\r\n constructor(private readonly config: INamecheapConfig, sandbox?: boolean) {\r\n const baseURL = `https://api${\r\n sandbox ? \".sandbox\" : \"\"\r\n }.namecheap.com/xml.response`;\r\n this.apiClient = new APIClient(baseURL);\r\n }\r\n\r\n async call(command: Command, payload: Payload): Promise<IReponse> {\r\n const { username, ...config } = this.config;\r\n\r\n const params = {\r\n username,\r\n ...payload,\r\n ...config,\r\n command,\r\n };\r\n\r\n const url = \"?\" + new URLSearchParams(params).toString();\r\n\r\n const { data, status } = await this.apiClient.post(url);\r\n\r\n return { data, status };\r\n }\r\n\r\n async checkDomain(domainName: string): Promise<ICheckDomainResponse> {\r\n const { data, status } = await this.call(Commands.DOMAINS_CHECK, {\r\n DomainList: domainName,\r\n });\r\n\r\n const response: ICheckDomainResponse = {\r\n data: {\r\n availabe: data.DomainCheckResult.$.Available,\r\n premium: data.DomainCheckResult.$.IsPremiumName,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async getDomainPrice(\r\n domainName: string,\r\n action: DomainPriceAction\r\n ): Promise<IReponse<object[]>> {\r\n const [_, tld] = domainName.split(\".\");\r\n if (!tld) {\r\n throw new InvalidDomainNameException(domainName);\r\n }\r\n\r\n const { data, status } = await this.call(Commands.USERS_GETPRICING, {\r\n ProductType: \"DOMAIN\",\r\n ProductCategory: \"DOMAINS\",\r\n ActionName: action,\r\n ProductName: tld,\r\n });\r\n\r\n const pricing: object[] = (\r\n data.UserGetPricingResult?.ProductType?.ProductCategory?.Product?.Price ||\r\n []\r\n ).map((price: any) => ({ ...price.$ }));\r\n\r\n return { data: pricing, status };\r\n }\r\n\r\n async registerDomain(payload: Payload): Promise<IRegisterDomainResponse> {\r\n const { data, status } = await this.call(Commands.DOMAINS_CREATE, payload);\r\n\r\n const result = data?.DomainCreateResult?.$;\r\n\r\n const response: IRegisterDomainResponse = {\r\n data: {\r\n domain: result.Domain,\r\n registered: result.Registered,\r\n chargedAmount: result.ChargedAmount,\r\n domainID: result.DomainID,\r\n orderID: result.OrderID,\r\n transactionID: result.TransactionID,\r\n whoisguardEnable: result.WhoisguardEnable,\r\n freePositiveSSL: result.FreePositiveSSL,\r\n nonRealTimeDomain: result.NonRealTimeDomain,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async addFundsRequest(\r\n payload: AddFundsRequestPayload\r\n ): Promise<IAddFundsRequestResponse> {\r\n const { data, status } = await this.call(\r\n Commands.USERS_CREATEADDFUNDSREQUEST,\r\n payload\r\n );\r\n\r\n const result = data.Createaddfundsrequestresult.$;\r\n\r\n const response: IAddFundsRequestResponse = {\r\n data: {\r\n tokenId: result.TokenID,\r\n returnURL: result.ReturnURL,\r\n redirectURL: result.RedirectURL,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async getFundsStatus(tokenId: string): Promise<IGetFundsStatusResponse> {\r\n const { data, status } = await this.call(Commands.USERS_GETADDFUNDSSTATUS, {\r\n tokenId,\r\n });\r\n\r\n const result = data.GetAddFundsStatusResult.$;\r\n\r\n const response: IGetFundsStatusResponse = {\r\n data: {\r\n amount: result.Amount,\r\n status: result.Status,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n}\r\n\r\nexport default Namecheap;\r\n"],"mappings":"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","names":["Commands","DomainPriceActions","axios"]}
package/dist/index.mjs CHANGED
@@ -17,6 +17,18 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
20
32
  var __async = (__this, __arguments, generator) => {
21
33
  return new Promise((resolve, reject) => {
22
34
  var fulfilled = (value) => {
@@ -113,7 +125,6 @@ var DomainPriceActions = /* @__PURE__ */ ((DomainPriceActions2) => {
113
125
 
114
126
  // src/api/api-client.ts
115
127
  import axios from "axios";
116
- import { parseStringPromise } from "xml2js";
117
128
 
118
129
  // src/api/errors.ts
119
130
  var XMLParsingError = class extends Error {
@@ -130,6 +141,24 @@ var ResponseError = class extends Error {
130
141
  }
131
142
  };
132
143
 
144
+ // src/api/utils.ts
145
+ import { parseStringPromise } from "xml2js";
146
+ function parseXMLString(xml) {
147
+ return parseStringPromise(xml, {
148
+ explicitArray: false,
149
+ attrValueProcessors: [transformValues]
150
+ });
151
+ }
152
+ function transformValues(value, name) {
153
+ if (value === "false" || value === "true") {
154
+ return value === "true";
155
+ }
156
+ if (!isNaN(+value)) {
157
+ return +value;
158
+ }
159
+ return value;
160
+ }
161
+
133
162
  // src/api/api-client.ts
134
163
  var APIClient = class {
135
164
  constructor(baseURL) {
@@ -141,14 +170,19 @@ var APIClient = class {
141
170
  return yield this._client.get(url);
142
171
  });
143
172
  }
173
+ post(url) {
174
+ return __async(this, null, function* () {
175
+ return yield this._client.post(url);
176
+ });
177
+ }
144
178
  onResponse(response) {
145
179
  return __async(this, null, function* () {
146
180
  try {
147
- const result = yield parseStringPromise(response.data);
181
+ const result = yield parseXMLString(response.data);
148
182
  if (result.ApiResponse.$.Status === "ERROR") {
149
183
  const responseErrors = result.ApiResponse.Errors;
150
- const code = responseErrors[0].Error[0].$.Number;
151
- const message = responseErrors[0].Error[0]._;
184
+ const code = responseErrors.Error.$.Number;
185
+ const message = responseErrors.Error._;
152
186
  throw new ResponseError(message, code);
153
187
  }
154
188
  response.data = result.ApiResponse.CommandResponse;
@@ -182,31 +216,35 @@ var Namecheap = class {
182
216
  }
183
217
  call(command, payload) {
184
218
  return __async(this, null, function* () {
185
- const params = __spreadProps(__spreadValues(__spreadValues({}, payload), this.config), {
219
+ const _a = this.config, { username } = _a, config = __objRest(_a, ["username"]);
220
+ const params = __spreadProps(__spreadValues(__spreadValues({
221
+ username
222
+ }, payload), config), {
186
223
  command
187
224
  });
188
225
  const url = "?" + new URLSearchParams(params).toString();
189
- const { data, status } = yield this.apiClient.get(url);
226
+ const { data, status } = yield this.apiClient.post(url);
190
227
  return { data, status };
191
228
  });
192
229
  }
193
230
  checkDomain(domainName) {
194
231
  return __async(this, null, function* () {
195
- const { data } = yield this.call("namecheap.domains.check" /* DOMAINS_CHECK */, {
232
+ const { data, status } = yield this.call("namecheap.domains.check" /* DOMAINS_CHECK */, {
196
233
  DomainList: domainName
197
234
  });
198
- const isAvailabe = data[0].DomainCheckResult[0].$.Available;
199
- const isPremium = data[0].DomainCheckResult[0].$.IsPremiumName;
200
235
  const response = {
201
- availabe: isAvailabe === "true",
202
- premium: isPremium === "true"
236
+ data: {
237
+ availabe: data.DomainCheckResult.$.Available,
238
+ premium: data.DomainCheckResult.$.IsPremiumName
239
+ },
240
+ status
203
241
  };
204
242
  return response;
205
243
  });
206
244
  }
207
245
  getDomainPrice(domainName, action) {
208
246
  return __async(this, null, function* () {
209
- var _a, _b, _c, _d, _e, _f, _g, _h;
247
+ var _a, _b, _c, _d;
210
248
  const [_, tld] = domainName.split(".");
211
249
  if (!tld) {
212
250
  throw new InvalidDomainNameException(domainName);
@@ -217,12 +255,66 @@ var Namecheap = class {
217
255
  ActionName: action,
218
256
  ProductName: tld
219
257
  });
220
- const pricing = (_h = (_g = (_f = (_e = (_d = (_c = (_b = (_a = data[0].UserGetPricingResult[0]) == null ? void 0 : _a.ProductType) == null ? void 0 : _b[0]) == null ? void 0 : _c.ProductCategory) == null ? void 0 : _d[0]) == null ? void 0 : _e.Product) == null ? void 0 : _f[0]) == null ? void 0 : _g.Price) == null ? void 0 : _h.map(
221
- (price) => __spreadValues({}, price.$)
222
- );
258
+ const pricing = (((_d = (_c = (_b = (_a = data.UserGetPricingResult) == null ? void 0 : _a.ProductType) == null ? void 0 : _b.ProductCategory) == null ? void 0 : _c.Product) == null ? void 0 : _d.Price) || []).map((price) => __spreadValues({}, price.$));
223
259
  return { data: pricing, status };
224
260
  });
225
261
  }
262
+ registerDomain(payload) {
263
+ return __async(this, null, function* () {
264
+ var _a;
265
+ const { data, status } = yield this.call("namecheap.domains.create" /* DOMAINS_CREATE */, payload);
266
+ const result = (_a = data == null ? void 0 : data.DomainCreateResult) == null ? void 0 : _a.$;
267
+ const response = {
268
+ data: {
269
+ domain: result.Domain,
270
+ registered: result.Registered,
271
+ chargedAmount: result.ChargedAmount,
272
+ domainID: result.DomainID,
273
+ orderID: result.OrderID,
274
+ transactionID: result.TransactionID,
275
+ whoisguardEnable: result.WhoisguardEnable,
276
+ freePositiveSSL: result.FreePositiveSSL,
277
+ nonRealTimeDomain: result.NonRealTimeDomain
278
+ },
279
+ status
280
+ };
281
+ return response;
282
+ });
283
+ }
284
+ addFundsRequest(payload) {
285
+ return __async(this, null, function* () {
286
+ const { data, status } = yield this.call(
287
+ "namecheap.users.createaddfundsrequest" /* USERS_CREATEADDFUNDSREQUEST */,
288
+ payload
289
+ );
290
+ const result = data.Createaddfundsrequestresult.$;
291
+ const response = {
292
+ data: {
293
+ tokenId: result.TokenID,
294
+ returnURL: result.ReturnURL,
295
+ redirectURL: result.RedirectURL
296
+ },
297
+ status
298
+ };
299
+ return response;
300
+ });
301
+ }
302
+ getFundsStatus(tokenId) {
303
+ return __async(this, null, function* () {
304
+ const { data, status } = yield this.call("namecheap.users.getAddFundsStatus" /* USERS_GETADDFUNDSSTATUS */, {
305
+ tokenId
306
+ });
307
+ const result = data.GetAddFundsStatusResult.$;
308
+ const response = {
309
+ data: {
310
+ amount: result.Amount,
311
+ status: result.Status
312
+ },
313
+ status
314
+ };
315
+ return response;
316
+ });
317
+ }
226
318
  };
227
319
  var namecheap_default = Namecheap;
228
320
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands.ts","../src/types.ts","../src/api/api-client.ts","../src/api/errors.ts","../src/exceptions/InvalidDomainNameException.ts","../src/namecheap.ts"],"sourcesContent":["export enum Commands {\r\n // domains\r\n DOMAINS_GETLIST = \"namecheap.domains.getList\",\r\n DOMAINS_GETCONTACTS = \"namecheap.domains.getContacts\",\r\n DOMAINS_CREATE = \"namecheap.domains.create\",\r\n DOMAINS_GETTLDLIST = \"namecheap.domains.getTldList\",\r\n DOMAINS_SETCONTACTS = \"namecheap.domains.setContacts\",\r\n DOMAINS_CHECK = \"namecheap.domains.check\",\r\n DOMAINS_REACTIVATE = \"namecheap.domains.reactivate\",\r\n DOMAINS_RENEW = \"namecheap.domains.renew\",\r\n DOMAINS_GETREGISTRARLOCK = \"namecheap.domains.getRegistrarLock\",\r\n DOMAINS_SETREGISTRARLOCK = \"namecheap.domains.setRegistrarLock\",\r\n DOMAINS_GETINFO = \"namecheap.domains.getInfo\",\r\n\r\n // domains.dns\r\n DOMAINS_DNS_SETDEFAULT = \"namecheap.domains.dns.setDefault\",\r\n DOMAINS_DNS_SETCUSTOM = \"namecheap.domains.dns.setCustom\",\r\n DOMAINS_DNS_GETLIST = \"namecheap.domains.dns.getList\",\r\n DOMAINS_DNS_GETHOSTS = \"namecheap.domains.dns.getHosts\",\r\n DOMAINS_DNS_GETEMAILFORWARDING = \"namecheap.domains.dns.getEmailForwarding\",\r\n DOMAINS_DNS_SETEMAILFORWARDING = \"namecheap.domains.dns.setEmailForwarding\",\r\n DOMAINS_DNS_SETHOSTS = \"namecheap.domains.dns.setHosts\",\r\n\r\n // domains.ns\r\n DOMAINS_NS_CREATE = \"namecheap.domains.ns.create\",\r\n DOMAINS_NS_DELETE = \"namecheap.domains.ns.delete\",\r\n DOMAINS_NS_GETINFO = \"namecheap.domains.ns.getInfo\",\r\n DOMAINS_NS_UPDATE = \"namecheap.domains.ns.update\",\r\n\r\n // domains.transfer\r\n DOMAINS_TRANSFER_CREATE = \"namecheap.domains.transfer.create\",\r\n DOMAINS_TRANSFER_GETSTATUS = \"namecheap.domains.transfer.getStatus\",\r\n DOMAINS_TRANSFER_UPDATESTATUS = \"namecheap.domains.transfer.updateStatus\",\r\n DOMAINS_TRANSFER_GETLIST = \"namecheap.domains.transfer.getList\",\r\n\r\n // ssl\r\n SSL_CREATE = \"namecheap.ssl.create\",\r\n SSL_GETLIST = \"namecheap.ssl.getList\",\r\n SSL_PARSECSR = \"namecheap.ssl.parseCSR\",\r\n SSL_GETAPPROVEREMAILLIST = \"namecheap.ssl.getApproverEmailList\",\r\n SSL_ACTIVATE = \"namecheap.ssl.activate\",\r\n SSL_RESENDAPPROVEREMAIL = \"namecheap.ssl.resendApproverEmail\",\r\n SSL_GETINFO = \"namecheap.ssl.getInfo\",\r\n SSL_RENEW = \"namecheap.ssl.renew\",\r\n SSL_REISSUE = \"namecheap.ssl.reissue\",\r\n SSL_RESENDFULFILLMENTEMAIL = \"namecheap.ssl.resendfulfillmentemail\",\r\n SSL_PURCHASEMORESANS = \"namecheap.ssl.purchasemoresans\",\r\n SSL_REVOKECERTIFICATE = \"namecheap.ssl.revokecertificate\",\r\n SSL_EDITDCVMETHOD = \"namecheap.ssl.editDCVMethod\",\r\n\r\n // users\r\n USERS_GETPRICING = \"namecheap.users.getPricing\",\r\n USERS_GETBALANCES = \"namecheap.users.getBalances\",\r\n USERS_CHANGEPASSWORD = \"namecheap.users.changePassword\",\r\n USERS_UPDATE = \"namecheap.users.update\",\r\n USERS_CREATEADDFUNDSREQUEST = \"namecheap.users.createaddfundsrequest\",\r\n USERS_GETADDFUNDSSTATUS = \"namecheap.users.getAddFundsStatus\",\r\n USERS_CREATE = \"namecheap.users.create\",\r\n USERS_LOGIN = \"namecheap.users.login\",\r\n USERS_RESETPASSWORD = \"namecheap.users.resetPassword\",\r\n\r\n // users.address\r\n USERS_ADDRESS_CREATE = \"namecheap.users.address.create\",\r\n USERS_ADDRESS_DELETE = \"namecheap.users.address.delete\",\r\n USERS_ADDRESS_GETINFO = \"namecheap.users.address.getInfo\",\r\n USERS_ADDRESS_GETLIST = \"namecheap.users.address.getList\",\r\n USERS_ADDRESS_SETDEFAULT = \"namecheap.users.address.setDefault\",\r\n USERS_ADDRESS_UPDATE = \"namecheap.users.address.update\",\r\n\r\n // domainprivacy\r\n WHOISGUARD_CHANGEEMAILADDRESS = \"Namecheap.Whoisguard.changeemailaddress\",\r\n WHOISGUARD_ENABLE = \"Namecheap.Whoisguard.enable\",\r\n WHOISGUARD_DISABLE = \"Namecheap.Whoisguard.disable\",\r\n WHOISGUARD_GETLIST = \"Namecheap.Whoisguard.getList\",\r\n WHOISGUARD_RENEW = \"Namecheap.Whoisguard.renew\",\r\n}\r\n\r\nexport type Command = `${Commands}`;\r\n","export enum DomainPriceActions {\r\n REGISTER = \"REGISTER\",\r\n RENEW = \"RENEW\",\r\n REACTIVATE = \"REACTIVATE\",\r\n TRANSFER = \"TRANSFER\",\r\n}\r\n\r\nexport type DomainPriceAction = `${DomainPriceActions}`;\r\n","import axios, { AxiosInstance, AxiosResponse } from \"axios\";\r\nimport { parseStringPromise } from \"xml2js\";\r\nimport { ResponseError, XMLParsingError } from \"./errors\";\r\n\r\nclass APIClient {\r\n private readonly _client: AxiosInstance;\r\n constructor(baseURL: string) {\r\n this._client = axios.create({ baseURL });\r\n this._client.interceptors.response.use(this.onResponse);\r\n }\r\n\r\n async get(url: string) {\r\n return await this._client.get(url);\r\n }\r\n\r\n private async onResponse(response: AxiosResponse): Promise<AxiosResponse> {\r\n try {\r\n const result = await parseStringPromise(response.data);\r\n\r\n if (result.ApiResponse.$.Status === \"ERROR\") {\r\n const responseErrors = result.ApiResponse.Errors;\r\n const code = responseErrors[0].Error[0].$.Number;\r\n const message = responseErrors[0].Error[0]._;\r\n\r\n throw new ResponseError(message, code);\r\n }\r\n\r\n response.data = result.ApiResponse.CommandResponse;\r\n } catch (err) {\r\n response.status = 400;\r\n if (err instanceof ResponseError) {\r\n throw err;\r\n }\r\n\r\n throw new XMLParsingError();\r\n }\r\n\r\n return response;\r\n }\r\n}\r\n\r\nexport default APIClient;\r\n","export class XMLParsingError extends Error {\r\n constructor() {\r\n super(\"Invalid XML response\");\r\n\r\n this.name = \"XMLParsingError\";\r\n }\r\n}\r\n\r\nexport class ResponseError extends Error {\r\n constructor(message: string, readonly code?: number) {\r\n super((code ? `${code}: ` : \"\") + message);\r\n\r\n this.name = \"ResponseError\";\r\n }\r\n}\r\n","export class InvalidDomainNameException extends Error {\r\n constructor(domainName: string) {\r\n super(`The provided domain name [${domainName}] is not valid`);\r\n\r\n this.name = \"InvalidDomainNameException\";\r\n }\r\n}\r\n","import APIClient from \"./api\";\r\nimport { Commands, Command } from \"./commands\";\r\nimport { InvalidDomainNameException } from \"./exceptions\";\r\nimport { DomainPriceAction } from \"./types\";\r\n\r\nexport interface INamecheapConfig {\r\n ApiUser: string;\r\n ApiKey: string;\r\n UserName: string;\r\n ClientIp: string;\r\n}\r\n\r\nexport interface IReponse {\r\n data: any;\r\n status: number;\r\n}\r\n\r\nexport interface ICheckDomainResponse {\r\n availabe: boolean;\r\n premium: boolean;\r\n}\r\n\r\nclass Namecheap {\r\n private readonly apiClient: APIClient;\r\n constructor(private readonly config: INamecheapConfig, sandbox?: boolean) {\r\n const baseURL = `https://api${\r\n sandbox ? \".sandbox\" : \"\"\r\n }.namecheap.com/xml.response`;\r\n this.apiClient = new APIClient(baseURL);\r\n }\r\n\r\n async call(\r\n command: Command,\r\n payload: Record<string, string>\r\n ): Promise<IReponse> {\r\n const params = {\r\n ...payload,\r\n ...this.config,\r\n command,\r\n };\r\n\r\n const url = \"?\" + new URLSearchParams(params).toString();\r\n\r\n const { data, status } = await this.apiClient.get(url);\r\n\r\n return { data, status };\r\n }\r\n\r\n async checkDomain(domainName: string): Promise<ICheckDomainResponse> {\r\n const { data } = await this.call(Commands.DOMAINS_CHECK, {\r\n DomainList: domainName,\r\n });\r\n\r\n const isAvailabe: string = data[0].DomainCheckResult[0].$.Available;\r\n const isPremium: string = data[0].DomainCheckResult[0].$.IsPremiumName;\r\n\r\n const response: ICheckDomainResponse = {\r\n availabe: isAvailabe === \"true\",\r\n premium: isPremium === \"true\",\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async getDomainPrice(\r\n domainName: string,\r\n action: DomainPriceAction\r\n ): Promise<IReponse> {\r\n const [_, tld] = domainName.split(\".\");\r\n if (!tld) {\r\n throw new InvalidDomainNameException(domainName);\r\n }\r\n\r\n const { data, status } = await this.call(Commands.USERS_GETPRICING, {\r\n ProductType: \"DOMAIN\",\r\n ProductCategory: \"DOMAINS\",\r\n ActionName: action,\r\n ProductName: tld,\r\n });\r\n\r\n const pricing =\r\n data[0].UserGetPricingResult[0]?.ProductType?.[0]?.ProductCategory?.[0]?.Product?.[0]?.Price?.map(\r\n (price: any) => ({ ...price.$ })\r\n );\r\n\r\n return { data: pricing, status };\r\n }\r\n}\r\n\r\nexport default Namecheap;\r\n"],"mappings":"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","names":["Commands","DomainPriceActions"]}
1
+ {"version":3,"sources":["../src/commands.ts","../src/types.ts","../src/api/api-client.ts","../src/api/errors.ts","../src/api/utils.ts","../src/exceptions/InvalidDomainNameException.ts","../src/namecheap.ts"],"sourcesContent":["export enum Commands {\r\n // domains\r\n DOMAINS_GETLIST = \"namecheap.domains.getList\",\r\n DOMAINS_GETCONTACTS = \"namecheap.domains.getContacts\",\r\n DOMAINS_CREATE = \"namecheap.domains.create\",\r\n DOMAINS_GETTLDLIST = \"namecheap.domains.getTldList\",\r\n DOMAINS_SETCONTACTS = \"namecheap.domains.setContacts\",\r\n DOMAINS_CHECK = \"namecheap.domains.check\",\r\n DOMAINS_REACTIVATE = \"namecheap.domains.reactivate\",\r\n DOMAINS_RENEW = \"namecheap.domains.renew\",\r\n DOMAINS_GETREGISTRARLOCK = \"namecheap.domains.getRegistrarLock\",\r\n DOMAINS_SETREGISTRARLOCK = \"namecheap.domains.setRegistrarLock\",\r\n DOMAINS_GETINFO = \"namecheap.domains.getInfo\",\r\n\r\n // domains.dns\r\n DOMAINS_DNS_SETDEFAULT = \"namecheap.domains.dns.setDefault\",\r\n DOMAINS_DNS_SETCUSTOM = \"namecheap.domains.dns.setCustom\",\r\n DOMAINS_DNS_GETLIST = \"namecheap.domains.dns.getList\",\r\n DOMAINS_DNS_GETHOSTS = \"namecheap.domains.dns.getHosts\",\r\n DOMAINS_DNS_GETEMAILFORWARDING = \"namecheap.domains.dns.getEmailForwarding\",\r\n DOMAINS_DNS_SETEMAILFORWARDING = \"namecheap.domains.dns.setEmailForwarding\",\r\n DOMAINS_DNS_SETHOSTS = \"namecheap.domains.dns.setHosts\",\r\n\r\n // domains.ns\r\n DOMAINS_NS_CREATE = \"namecheap.domains.ns.create\",\r\n DOMAINS_NS_DELETE = \"namecheap.domains.ns.delete\",\r\n DOMAINS_NS_GETINFO = \"namecheap.domains.ns.getInfo\",\r\n DOMAINS_NS_UPDATE = \"namecheap.domains.ns.update\",\r\n\r\n // domains.transfer\r\n DOMAINS_TRANSFER_CREATE = \"namecheap.domains.transfer.create\",\r\n DOMAINS_TRANSFER_GETSTATUS = \"namecheap.domains.transfer.getStatus\",\r\n DOMAINS_TRANSFER_UPDATESTATUS = \"namecheap.domains.transfer.updateStatus\",\r\n DOMAINS_TRANSFER_GETLIST = \"namecheap.domains.transfer.getList\",\r\n\r\n // ssl\r\n SSL_CREATE = \"namecheap.ssl.create\",\r\n SSL_GETLIST = \"namecheap.ssl.getList\",\r\n SSL_PARSECSR = \"namecheap.ssl.parseCSR\",\r\n SSL_GETAPPROVEREMAILLIST = \"namecheap.ssl.getApproverEmailList\",\r\n SSL_ACTIVATE = \"namecheap.ssl.activate\",\r\n SSL_RESENDAPPROVEREMAIL = \"namecheap.ssl.resendApproverEmail\",\r\n SSL_GETINFO = \"namecheap.ssl.getInfo\",\r\n SSL_RENEW = \"namecheap.ssl.renew\",\r\n SSL_REISSUE = \"namecheap.ssl.reissue\",\r\n SSL_RESENDFULFILLMENTEMAIL = \"namecheap.ssl.resendfulfillmentemail\",\r\n SSL_PURCHASEMORESANS = \"namecheap.ssl.purchasemoresans\",\r\n SSL_REVOKECERTIFICATE = \"namecheap.ssl.revokecertificate\",\r\n SSL_EDITDCVMETHOD = \"namecheap.ssl.editDCVMethod\",\r\n\r\n // users\r\n USERS_GETPRICING = \"namecheap.users.getPricing\",\r\n USERS_GETBALANCES = \"namecheap.users.getBalances\",\r\n USERS_CHANGEPASSWORD = \"namecheap.users.changePassword\",\r\n USERS_UPDATE = \"namecheap.users.update\",\r\n USERS_CREATEADDFUNDSREQUEST = \"namecheap.users.createaddfundsrequest\",\r\n USERS_GETADDFUNDSSTATUS = \"namecheap.users.getAddFundsStatus\",\r\n USERS_CREATE = \"namecheap.users.create\",\r\n USERS_LOGIN = \"namecheap.users.login\",\r\n USERS_RESETPASSWORD = \"namecheap.users.resetPassword\",\r\n\r\n // users.address\r\n USERS_ADDRESS_CREATE = \"namecheap.users.address.create\",\r\n USERS_ADDRESS_DELETE = \"namecheap.users.address.delete\",\r\n USERS_ADDRESS_GETINFO = \"namecheap.users.address.getInfo\",\r\n USERS_ADDRESS_GETLIST = \"namecheap.users.address.getList\",\r\n USERS_ADDRESS_SETDEFAULT = \"namecheap.users.address.setDefault\",\r\n USERS_ADDRESS_UPDATE = \"namecheap.users.address.update\",\r\n\r\n // domainprivacy\r\n WHOISGUARD_CHANGEEMAILADDRESS = \"Namecheap.Whoisguard.changeemailaddress\",\r\n WHOISGUARD_ENABLE = \"Namecheap.Whoisguard.enable\",\r\n WHOISGUARD_DISABLE = \"Namecheap.Whoisguard.disable\",\r\n WHOISGUARD_GETLIST = \"Namecheap.Whoisguard.getList\",\r\n WHOISGUARD_RENEW = \"Namecheap.Whoisguard.renew\",\r\n}\r\n\r\nexport type Command = `${Commands}`;\r\n","export type Payload = Record<string, string | number>;\r\n\r\nexport interface IReponse<T = any> {\r\n data: T;\r\n status: number;\r\n}\r\n\r\nexport type ICheckDomainResponse = IReponse<{\r\n availabe: boolean;\r\n premium: boolean;\r\n}>;\r\n\r\nexport type IRegisterDomainResponse = IReponse<{\r\n domain: string;\r\n registered: boolean;\r\n chargedAmount: number;\r\n domainID: string;\r\n orderID: string;\r\n transactionID: string;\r\n whoisguardEnable: boolean;\r\n freePositiveSSL: boolean;\r\n nonRealTimeDomain: boolean;\r\n}>;\r\n\r\nexport type IAddFundsRequestResponse = IReponse<{\r\n tokenId: string;\r\n returnURL: string;\r\n redirectURL: string;\r\n}>;\r\n\r\nexport type IGetFundsStatusResponse = IReponse<{\r\n status: string;\r\n amount: number;\r\n}>;\r\n\r\nexport enum DomainPriceActions {\r\n REGISTER = \"REGISTER\",\r\n RENEW = \"RENEW\",\r\n REACTIVATE = \"REACTIVATE\",\r\n TRANSFER = \"TRANSFER\",\r\n}\r\n\r\nexport type DomainPriceAction = `${DomainPriceActions}`;\r\n\r\nexport type AddFundsRequestPayload = {\r\n username?: string;\r\n paymentType: \"creditcard\";\r\n amount: number;\r\n returnURL: string;\r\n};\r\n","import axios, { AxiosInstance, AxiosResponse } from \"axios\";\r\nimport { ResponseError, XMLParsingError } from \"./errors\";\r\nimport { parseXMLString } from \"./utils\";\r\n\r\nclass APIClient {\r\n private readonly _client: AxiosInstance;\r\n constructor(baseURL: string) {\r\n this._client = axios.create({ baseURL });\r\n this._client.interceptors.response.use(this.onResponse);\r\n }\r\n\r\n async get(url: string) {\r\n return await this._client.get(url);\r\n }\r\n\r\n async post(url: string) {\r\n return await this._client.post(url);\r\n }\r\n\r\n private async onResponse(response: AxiosResponse): Promise<AxiosResponse> {\r\n try {\r\n const result = await parseXMLString(response.data);\r\n\r\n if (result.ApiResponse.$.Status === \"ERROR\") {\r\n const responseErrors = result.ApiResponse.Errors;\r\n const code = responseErrors.Error.$.Number;\r\n const message = responseErrors.Error._;\r\n\r\n throw new ResponseError(message, code);\r\n }\r\n\r\n response.data = result.ApiResponse.CommandResponse;\r\n } catch (err) {\r\n response.status = 400;\r\n if (err instanceof ResponseError) {\r\n throw err;\r\n }\r\n\r\n throw new XMLParsingError();\r\n }\r\n\r\n return response;\r\n }\r\n}\r\n\r\nexport default APIClient;\r\n","export class XMLParsingError extends Error {\r\n constructor() {\r\n super(\"Invalid XML response\");\r\n\r\n this.name = \"XMLParsingError\";\r\n }\r\n}\r\n\r\nexport class ResponseError extends Error {\r\n constructor(message: string, readonly code?: number) {\r\n super((code ? `${code}: ` : \"\") + message);\r\n\r\n this.name = \"ResponseError\";\r\n }\r\n}\r\n","import { parseStringPromise } from \"xml2js\";\r\n\r\nexport function parseXMLString(xml: string): Promise<any> {\r\n return parseStringPromise(xml, {\r\n explicitArray: false,\r\n attrValueProcessors: [transformValues],\r\n });\r\n}\r\n\r\nfunction transformValues(value: string, name: string) {\r\n // check boolean\r\n if (value === \"false\" || value === \"true\") {\r\n return value === \"true\";\r\n }\r\n\r\n // check numbers\r\n if (!isNaN(+value)) {\r\n return +value;\r\n }\r\n\r\n return value;\r\n}\r\n","export class InvalidDomainNameException extends Error {\r\n constructor(domainName: string) {\r\n super(`The provided domain name [${domainName}] is not valid`);\r\n\r\n this.name = \"InvalidDomainNameException\";\r\n }\r\n}\r\n","import APIClient from \"./api\";\r\nimport { Commands, Command } from \"./commands\";\r\nimport { InvalidDomainNameException } from \"./exceptions\";\r\nimport {\r\n AddFundsRequestPayload,\r\n DomainPriceAction,\r\n IAddFundsRequestResponse,\r\n ICheckDomainResponse,\r\n IGetFundsStatusResponse,\r\n IRegisterDomainResponse,\r\n IReponse,\r\n Payload,\r\n} from \"./types\";\r\n\r\nexport interface INamecheapConfig {\r\n apiUser: string;\r\n apiKey: string;\r\n username: string;\r\n clientIp: string;\r\n}\r\n\r\nclass Namecheap {\r\n private readonly apiClient: APIClient;\r\n constructor(private readonly config: INamecheapConfig, sandbox?: boolean) {\r\n const baseURL = `https://api${\r\n sandbox ? \".sandbox\" : \"\"\r\n }.namecheap.com/xml.response`;\r\n this.apiClient = new APIClient(baseURL);\r\n }\r\n\r\n async call(command: Command, payload: Payload): Promise<IReponse> {\r\n const { username, ...config } = this.config;\r\n\r\n const params = {\r\n username,\r\n ...payload,\r\n ...config,\r\n command,\r\n };\r\n\r\n const url = \"?\" + new URLSearchParams(params).toString();\r\n\r\n const { data, status } = await this.apiClient.post(url);\r\n\r\n return { data, status };\r\n }\r\n\r\n async checkDomain(domainName: string): Promise<ICheckDomainResponse> {\r\n const { data, status } = await this.call(Commands.DOMAINS_CHECK, {\r\n DomainList: domainName,\r\n });\r\n\r\n const response: ICheckDomainResponse = {\r\n data: {\r\n availabe: data.DomainCheckResult.$.Available,\r\n premium: data.DomainCheckResult.$.IsPremiumName,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async getDomainPrice(\r\n domainName: string,\r\n action: DomainPriceAction\r\n ): Promise<IReponse<object[]>> {\r\n const [_, tld] = domainName.split(\".\");\r\n if (!tld) {\r\n throw new InvalidDomainNameException(domainName);\r\n }\r\n\r\n const { data, status } = await this.call(Commands.USERS_GETPRICING, {\r\n ProductType: \"DOMAIN\",\r\n ProductCategory: \"DOMAINS\",\r\n ActionName: action,\r\n ProductName: tld,\r\n });\r\n\r\n const pricing: object[] = (\r\n data.UserGetPricingResult?.ProductType?.ProductCategory?.Product?.Price ||\r\n []\r\n ).map((price: any) => ({ ...price.$ }));\r\n\r\n return { data: pricing, status };\r\n }\r\n\r\n async registerDomain(payload: Payload): Promise<IRegisterDomainResponse> {\r\n const { data, status } = await this.call(Commands.DOMAINS_CREATE, payload);\r\n\r\n const result = data?.DomainCreateResult?.$;\r\n\r\n const response: IRegisterDomainResponse = {\r\n data: {\r\n domain: result.Domain,\r\n registered: result.Registered,\r\n chargedAmount: result.ChargedAmount,\r\n domainID: result.DomainID,\r\n orderID: result.OrderID,\r\n transactionID: result.TransactionID,\r\n whoisguardEnable: result.WhoisguardEnable,\r\n freePositiveSSL: result.FreePositiveSSL,\r\n nonRealTimeDomain: result.NonRealTimeDomain,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async addFundsRequest(\r\n payload: AddFundsRequestPayload\r\n ): Promise<IAddFundsRequestResponse> {\r\n const { data, status } = await this.call(\r\n Commands.USERS_CREATEADDFUNDSREQUEST,\r\n payload\r\n );\r\n\r\n const result = data.Createaddfundsrequestresult.$;\r\n\r\n const response: IAddFundsRequestResponse = {\r\n data: {\r\n tokenId: result.TokenID,\r\n returnURL: result.ReturnURL,\r\n redirectURL: result.RedirectURL,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n\r\n async getFundsStatus(tokenId: string): Promise<IGetFundsStatusResponse> {\r\n const { data, status } = await this.call(Commands.USERS_GETADDFUNDSSTATUS, {\r\n tokenId,\r\n });\r\n\r\n const result = data.GetAddFundsStatusResult.$;\r\n\r\n const response: IGetFundsStatusResponse = {\r\n data: {\r\n amount: result.Amount,\r\n status: result.Status,\r\n },\r\n status,\r\n };\r\n\r\n return response;\r\n }\r\n}\r\n\r\nexport default Namecheap;\r\n"],"mappings":"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","names":["Commands","DomainPriceActions"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "namecheap-ts",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "A simple wrapper for namecheap API",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -10,7 +10,7 @@
10
10
  ],
11
11
  "scripts": {
12
12
  "start": "tsc --build && node dist/index.js",
13
- "build": "tsup",
13
+ "build": "rm -rf dist && tsup",
14
14
  "release": "rm -rf dist && tsup && npm publish",
15
15
  "test": "jest"
16
16
  },