domain-quotes 0.2.1 → 0.2.2
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/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/types.d.ts.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EAEjB,eAAe,EAIf,KAAK,EAEN,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,cAAc,EACd,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EACzI,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAGlD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAGlD;AAuBD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK/D;AAiGD,cAAM,gBAAiB,SAAQ,KAAK;IAClC,IAAI,EAAE,MAAM,CAAC;gBACA,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK3C;AAED,qBAAa,yBAA0B,SAAQ,gBAAgB;gBAChD,GAAG,EAAE,MAAM;CAIzB;AAED,qBAAa,wBAAyB,SAAQ,gBAAgB;gBAC/C,QAAQ,EAAE,MAAM;CAI9B;AA+BD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE9B,MAAM,EAAE,iBAAiB;IAItC,OAAO,CAAC,YAAY;IAOd,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,KAAK,CAAC;CAqGlB;AAGD,eAAO,MAAM,cAAc,EAAE,iBAM5B,CAAC;AAEF,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,KAAK,CAAC,CAGhB"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var O={SAVE1:{rate:.01,extensions:["com","net"],startAt:"2023-01-01T00:00:00Z",endAt:"2025-12-31T23:59:59Z"},NEWUSER15:{rate:.15,extensions:["com","net","org"],startAt:"2023-01-01T00:00:00Z",endAt:"2024-12-31T23:59:59Z"},FALL20:{rate:.2,extensions:["org","info"],startAt:"2024-09-01T00:00:00Z",endAt:"2024-12-01T00:00:00Z"}};var k=.075;function Z(){return(M.supportedCurrencies??["USD","NGN"]).slice()}function ce(e){if(!e)return!1;let t=e.toUpperCase();return Z().includes(t)}function ae(){let e=N();return Object.keys(e).sort()}function w(e){if(e==null)return;if(typeof e=="number")return!Number.isFinite(e)||e<=0?void 0:{USD:e};let t={};for(let[n,r]of Object.entries(e)){let c=n?.toUpperCase();if(!c||!Number.isFinite(r)||r<=0)continue;let a=t[c];t[c]=a===void 0?r:Math.min(a,r)}return Object.keys(t).length>0?t:void 0}function V(e){return!!w(e)}function ue(e){let t=N(),n=F(e),r=t[n];return V(r)}function F(e){return e&&e.trim().toLowerCase().replace(/^\.+/,"")}function q(e){return e instanceof Date?e.getTime():typeof e=="number"?e:Date.now()}var z="https://raw.githubusercontent.com/namewiz/registrar-pricelist/refs/heads/main/data/unified-create-prices.csv",J="https://raw.githubusercontent.com/namewiz/registrar-pricelist/refs/heads/main/data/exchange-rates.json";async function X(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`);return t.text()}async function H(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`);return t.json()}function B(e){let t=e.split(/\r?\n/).map(c=>c.trim()).filter(Boolean);if(t.length===0)return{};let n=t.shift(),r={};for(let c of t){let a=c.split(",");if(a.length<4)continue;let x=a[0]?.trim().toLowerCase(),o=a[2]?.trim().toUpperCase(),E=a[3]?.trim(),d=Number(E);if(!x||!o||!Number.isFinite(d)||d<=0)continue;let i=r[x],u;i===void 0?u={}:typeof i=="number"?u={USD:i}:u=i;let p=u[o];u[o]=p===void 0?d:Math.min(p,d),r[x]=u}return r}async function W(){try{let[e,t]=await Promise.all([X(z).then(B),H(J)]);return[e,t]}catch(e){let t=e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error");throw t.message=`domain-quotes: failed to load remote pricing data: ${t.message}`,t}}var[Y,K]=await W();function N(){return Y}function ee(){return K}function te(){return O}var
|
|
1
|
+
var O={SAVE1:{rate:.01,extensions:["com","net"],startAt:"2023-01-01T00:00:00Z",endAt:"2025-12-31T23:59:59Z"},NEWUSER15:{rate:.15,extensions:["com","net","org"],startAt:"2023-01-01T00:00:00Z",endAt:"2024-12-31T23:59:59Z"},FALL20:{rate:.2,extensions:["org","info"],startAt:"2024-09-01T00:00:00Z",endAt:"2024-12-01T00:00:00Z"}};var k=.075;function Z(){return(M.supportedCurrencies??["USD","NGN"]).slice()}function ce(e){if(!e)return!1;let t=e.toUpperCase();return Z().includes(t)}function ae(){let e=N();return Object.keys(e).sort()}function w(e){if(e==null)return;if(typeof e=="number")return!Number.isFinite(e)||e<=0?void 0:{USD:e};let t={};for(let[n,r]of Object.entries(e)){let c=n?.toUpperCase();if(!c||!Number.isFinite(r)||r<=0)continue;let a=t[c];t[c]=a===void 0?r:Math.min(a,r)}return Object.keys(t).length>0?t:void 0}function V(e){return!!w(e)}function ue(e){let t=N(),n=F(e),r=t[n];return V(r)}function F(e){return e&&e.trim().toLowerCase().replace(/^\.+/,"")}function q(e){return e instanceof Date?e.getTime():typeof e=="number"?e:Date.now()}var z="https://raw.githubusercontent.com/namewiz/registrar-pricelist/refs/heads/main/data/unified-create-prices.csv",J="https://raw.githubusercontent.com/namewiz/registrar-pricelist/refs/heads/main/data/exchange-rates.json";async function X(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`);return t.text()}async function H(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`);return t.json()}function B(e){let t=e.split(/\r?\n/).map(c=>c.trim()).filter(Boolean);if(t.length===0)return{};let n=t.shift(),r={};for(let c of t){let a=c.split(",");if(a.length<4)continue;let x=a[0]?.trim().toLowerCase(),o=a[2]?.trim().toUpperCase(),E=a[3]?.trim(),d=Number(E);if(!x||!o||!Number.isFinite(d)||d<=0)continue;let i=r[x],u;i===void 0?u={}:typeof i=="number"?u={USD:i}:u=i;let p=u[o];u[o]=p===void 0?d:Math.min(p,d),r[x]=u}return r}async function W(){try{let[e,t]=await Promise.all([X(z).then(B),H(J)]);return[e,t]}catch(e){let t=e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error");throw t.message=`domain-quotes: failed to load remote pricing data: ${t.message}`,t}}var[Y,K]=await W();function N(){return Y}function ee(){return K}function te(){return O}var y=class extends Error{constructor(t,n){super(n),this.name="DomainQuoteError",this.code=t}},R=class extends y{constructor(t){super("ERR_UNSUPPORTED_EXTENSION",`Unsupported extension: ${t}`),this.name="UnsupportedExtensionError"}},D=class extends y{constructor(t){super("ERR_UNSUPPORTED_CURRENCY",`Unsupported currency: ${t}`),this.name="UnsupportedCurrencyError"}};function ne(){return{countryCode:"US",currencyName:"United States Dollar",currencySymbol:"$",currencyCode:"USD",exchangeRate:1,inverseRate:1}}function m(e){return Number(e.toFixed(2))}function re(e,t){if(!t)return e;let n=typeof t.value=="number"?t.value:0;if(!Number.isFinite(n)||n<=0)return e;switch(t.type){case"percentage":return e+e*n;case"fixedUsd":return e+n;default:return e}}var C=class{constructor(t){this.config=t}findRateInfo(t){if(t==="USD")return ne();let n=this.config.exchangeRates.find(r=>r.currencyCode===t);if(!n)throw new D(t);return n}async getQuote(t,n,r={}){let c=this.config.createPrices,a=typeof this.config.vatRate=="number"?this.config.vatRate:k,x=this.config.discounts,o=F(t),E=r.transaction||"create",d=w(c[o]);if(!d)throw new R(o);let i={...d},u=(()=>{switch(E){case"renew":return this.config.renewPrices;case"restore":return this.config.restorePrices;case"transfer":return this.config.transferPrices;default:return}})();if(u){let s=w(u[o]);s&&(i={...i,...s})}if(Object.keys(i).length===0)throw new R(o);let p=(n||"").toUpperCase();if(!(this.config.supportedCurrencies??["USD","NGN"]).includes(p))throw new D(n);let P=this.findRateInfo(p),G=P.currencySymbol,f=i.USD;f===void 0&&(f=d.USD);let b=i[p];if(f===void 0&&b!==void 0&&(f=b/P.exchangeRate),f===void 0||f<=0)throw new R(o);let S=re(f,this.config.markup),l;if(b!==void 0&&f>0){let s=b/f;l=m(S*s)}else l=m(S*P.exchangeRate);let I=a,$=Array.from(new Set((r.discountCodes||[]).map(s=>s.toUpperCase()))),U=q(r.now),T=[];for(let s of $){let g=x[s];if(!g)continue;let Q=Date.parse(g.startAt),_=Date.parse(g.endAt);Number.isNaN(Q)||Number.isNaN(_)||U<Q||U>_||g.extensions.includes(o)&&T.push(m(l*g.rate))}let h=0;T.length>0&&(r.discountPolicy==="stack"?h=m(T.reduce((s,g)=>s+g,0)):h=Math.max(...T)),h>l&&(h=l);let A=m(l-h),v=m(A*I),j=m(A+v);return{extension:o,currency:p,basePrice:l,discount:h,tax:v,totalPrice:j,symbol:G,domainTransaction:E}}},M={createPrices:N(),exchangeRates:ee(),vatRate:k,discounts:te(),supportedCurrencies:["USD","NGN"]};async function fe(e,t,n={}){return new C(M).getQuote(e,t,n)}export{M as DEFAULT_CONFIG,k as DEFAULT_VAT_RATE,C as DomainQuotes,D as UnsupportedCurrencyError,R as UnsupportedExtensionError,fe as getDefaultQuote,ce as isSupportedCurrency,ue as isSupportedExtension,Z as listSupportedCurrencies,ae as listSupportedExtensions};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,CAAC;AAC7C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,UAAU,CAAC;IAEzB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAElC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "domain-quotes",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Fast multi-currency domain quote checker library across registrars.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
7
8
|
"scripts": {
|
|
8
|
-
"build": "npx -y esbuild src/index.ts --bundle --minify --format=esm --target=esnext --outdir=dist/ --platform=neutral",
|
|
9
|
+
"build": "npx -y esbuild src/index.ts --bundle --minify --format=esm --target=esnext --outdir=dist/ --platform=neutral && tsc --emitDeclarationOnly",
|
|
9
10
|
"postbuild": "cp dist/index.js docs/domain-quotes.js",
|
|
10
11
|
"test": "npm run build && node --test",
|
|
11
12
|
"start": "npm run build && cp dist/index.js docs/domain-quotes.js && npx serve docs"
|
|
@@ -29,11 +30,10 @@
|
|
|
29
30
|
"quote-check"
|
|
30
31
|
],
|
|
31
32
|
"exports": {
|
|
32
|
-
".":
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"default": "./dist/index.js"
|
|
36
|
+
}
|
|
33
37
|
},
|
|
34
|
-
"license": "MIT"
|
|
35
|
-
"engines": {
|
|
36
|
-
"node": "^22.12.0",
|
|
37
|
-
"npm": "^10.9.0"
|
|
38
|
-
}
|
|
38
|
+
"license": "MIT"
|
|
39
39
|
}
|