(window.webpackJsonpAPI=window.webpackJsonpAPI||[]).push([[0],{169:function(e,a){},260:function(e,a,t){e.exports=t(500)},265:function(e,a,t){},284:function(e,a){},285:function(e,a){},286:function(e,a){},287:function(e,a){},288:function(e,a){},486:function(e,a,t){},500:function(e,a,t){"use strict";t.r(a);var n=t(0),s=t.n(n),r=t(53),l=t.n(r),c=(t(265),t(9)),i=t(11),o=t(8),m=t(6),u=t(10),d=t(24),p=t(65),h=t(20),E=t.n(h);var g=function(){var e=document.createElement("link");e.href="/css/geocoder.css",e.rel="stylesheet",e.async=!0,document.head.appendChild(e)},y=t(12),f=t(207),v=t(118),b=t(4),N=t(79),P=(t(96),t(178),t(210)),_=t(211),A=t(212),S=t(121),k=t(213),C=t(214),O=t(231),T=t(217),I=t(216),w=t(215),R=t(248),j=t(223),x=t(224),M=t(208),U=t(209),L=t(226),D=t(120),H=t(225),W=t(18),q=t(503),F=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).state={modal:!1,nestedModal:!1,closeAll:!1,signupEmail:"",signupPassword:"",loading:!1,loadingSSO:!1,success:!1,isSignup:!0,isSsoLogin:!0,errorMessage:"",baseWebUrl:"https://ip2loc.com",baseApiUrl:"https://api.ip2loc.com"},t.toggle=t.toggle.bind(Object(y.a)(t)),t.handleEmailPasswordSubmit=t.handleEmailPasswordSubmit.bind(Object(y.a)(t)),t.handleValidSubmit=t.handleValidSubmit.bind(Object(y.a)(t)),t.handleSSOSubmit=t.handleSSOSubmit.bind(Object(y.a)(t)),t.handleInvalidSubmit=t.handleInvalidSubmit.bind(Object(y.a)(t)),t.updateSignupEmail=t.updateSignupEmail.bind(Object(y.a)(t)),t.updateSignupPassword=t.updateSignupPassword.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"toggle",value:function(e){}},{key:"componentDidMount",value:function(){var e=this;this.props.onMounted&&this.props.onMounted({toggle:function(a){return e.toggle(a)}})}},{key:"updateSignupEmail",value:function(e){this.setState({signupEmail:e.target.value})}},{key:"updateSignupPassword",value:function(e){this.setState({signupPassword:e.target.value})}},{key:"handleInvalidSubmit",value:function(e,a,t){this.setState({email:t.email,error:!0})}},{key:"handleEmailPasswordSubmit",value:function(){console.log("handleEmailPasswordSubmit: "+this.state.baseWebUrl),this.setState({isSsoLogin:!1}),this.form.submit()}},{key:"handleSSOSubmit",value:function(){console.log("handleSSOSubmit: "+this.state.baseWebUrl),this.setState({isSsoLogin:!0}),this.form.submit()}},{key:"handleValidSubmit",value:function(){var e=this;console.log("Your input email is: "+this.state.signupEmail),console.log("baseWebUrl: "+this.state.baseWebUrl);var a=this.state.baseWebUrl;this.state.isSsoLogin?a+="/auth/email/request":a=a+"/user/"+(this.state.isSignup?"signup":"login"),this.setState({loading:!0}),fetch(a,{method:"post",headers:{Accept:"application/json"},body:JSON.stringify({email:this.state.signupEmail})}).then((function(e){return e.json()})).then((function(a){if(console.log("response success = "+a.success+", error = "+a.error),a.success)e.setState({errorMessage:"",success:!0});else switch(console.log("success: false"+a.error),a.error){case 208:e.setState({errorMessage:"Email already exists!"});break;case 403:e.setState({errorMessage:"Invalid Email!"});break;case 404:e.setState({errorMessage:"Email not exists!"});break;case 429:e.setState({errorMessage:"Too many requests, try again later."});break;default:e.setState({errorMessage:"Server Error: "+a.error})}})).catch((function(a){console.error(a),console.log("success: false catch!"),e.setState({errorMessage:"can't reach server"})})).finally((function(){e.setState({loading:!1})}))}},{key:"render",value:function(){var e=this;return s.a.createElement(R.a,{isOpen:this.state.modal,toggle:this.toggle,className:this.props.className},s.a.createElement(j.a,{toggle:this.toggle},this.state.isSignup?"Sign up":"Login"),s.a.createElement(x.a,null,this.state.success?s.a.createElement(W.AvForm,null,s.a.createElement(M.a,{form:!0},s.a.createElement(U.a,{md:12},s.a.createElement(L.a,null))),s.a.createElement(W.AvGroup,null,this.state.errorMessage?s.a.createElement(D.a,{color:"danger"},this.state.errorMessage):s.a.createElement(D.a,{color:"success"},"Successful! Check your Email. ",s.a.createElement(b.a,{icon:"check"}))),s.a.createElement(v.a,{color:"primary",className:"float-left",id:"buttonOk",onClick:this.handleValidSubmit},s.a.createElement("span",null,"Resend "),s.a.createElement(q.a,null))):s.a.createElement(W.AvForm,{ref:function(a){return e.form=a},onValidSubmit:this.handleValidSubmit,onInvalidSubmit:this.handleInvalidSubmit},s.a.createElement(M.a,{form:!0},s.a.createElement(U.a,{md:12},s.a.createElement(L.a,null,s.a.createElement(W.AvField,{onChange:this.updateSignupEmail,name:"email",label:"Email Address",type:"email",id:"useremail",required:!0})))),this.state.isSignup?s.a.createElement(W.AvGroup,{check:!0},s.a.createElement("small",null,"By signing up, you agree to our terms of service and privacy policy.")):"",this.state.errorMessage?s.a.createElement(D.a,{color:"danger"},this.state.errorMessage):"",s.a.createElement("br",null),s.a.createElement("div",{className:"col-md-12 text-center"},s.a.createElement(v.a,{color:"primary",block:!0,id:"buttonsso",onClick:this.handleSSOSubmit,disabled:this.state.loading&&this.state.isSsoLogin},this.state.loading&&this.state.isSsoLogin?s.a.createElement("span",null,s.a.createElement(b.a,{icon:"spinner",spin:!0})," "):s.a.createElement("span",null,"Submit"))))),s.a.createElement(H.a,null))}}]),a}(s.a.Component),B=Object(p.g)(F),K=t(22);var G=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),console.log("REACT_APP_ENVIRONMENT is => ",Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_FLAVOR:"geocoder",REACT_APP_TITLE:"ip2loc",REACT_APP_HOME_TITLE:"IP 2 Location API, detect Language, Currency and more from IP Address",REACT_APP_HOME_TITLE_2_LINE:"Ready to Save Time and Money?",REACT_APP_HOME_TITLE_3_LINE:"",REACT_APP_HOME_H1:"[ACCENT]IP 2 Location API[/ACCENT], detect Language, Currency and more from IP Address",REACT_APP_HOME_H2:"",REACT_APP_HOME_HERO_SHOT_H2:"[ACCENT]Benefit[/ACCENT] from ip2loc's [ACCENT]reliable[/ACCENT] and [ACCENT]developer-friendly[/ACCENT] tools.",REACT_APP_HOME_HERO_WHY_0:"The Power of Geolocation: Use it for Targeted Advertising, Fraud Prevention, Website Localization, Content Personalization, Geotargeting and much more.",REACT_APP_HOME_HERO_WHY_1:"Targeted Advertising: Tailoring ads based on geographic location of website visitors.",REACT_APP_HOME_HERO_WHY_2:"Fraud Prevention: Detecting fraudulent activities by comparing IP location with user's billing or shipping address.",REACT_APP_HOME_HERO_WHY_3:"Website Localization: Automatically presenting website in appropriate language and currency based on visitor's location.",REACT_APP_HOME_HERO_WHY_4:"Content Personalization: Personalizing website content based on visitor's location.",REACT_APP_HOME_HERO_WHY_5:"Targeting regions or countries with marketing campaigns.",REACT_APP_HOME_TITLE_FREE:"Free contingent: 15.000 Requests per month!",REACT_APP_HOME_TEST_IT:"Geolocation is a powerful tool that businesses can use to target their advertising, prevent fraud, localize their website, personalize content, and target specific locations for their products or services. IP 2 Location API is a popular geolocation service that can detect a user's location, language, currency, and other details from their IP address.",REACT_APP_KEYWORDS:"ip api, ip to location api, geoip api, ip to country api",REACT_APP_DESCRIPTION:"IP to location REST API using JSON, XML and Yaml supporting PHP, JavaScript, Node, Java, and more.",REACT_APP_HOME_CALL2ACTION:"Get your [LIGHT]API Key[/LIGHT] now",REACT_APP_DEV_BASE_WEB_URL:"http://localhost:8080",REACT_APP_DEV_BASE_API_URL:"http://0.0.0.0:8080",REACT_APP_BASE_WEB_URL:"https://ip2loc.com",REACT_APP_BASE_API_URL:"https://api.ip2loc.com",REACT_APP_NO_KEY_DAILY_LIMIT_PER_IP:"0",REACT_APP_COLOR:"#355691",REACT_APP_BACKGROUND_COLOR:"#00a8ff",REACT_APP_BACKGROUND_IMAGE:"/img/world.svg"})),console.log("REACT_APP_ENVIRONMENT flavor => ","geocoder"),console.log("REACT_APP_ENVIRONMENT flavor => ","geocoder"),t.toggleNav=t.toggleNav.bind(Object(y.a)(t)),t.logout=t.logout.bind(Object(y.a)(t)),t.goToPageAccount=t.goToPageAccount.bind(Object(y.a)(t));var n=e.cookies;return t.state={isOpen:!1,session:void 0!==n.get("session"),baseWebUrl:"https://ip2loc.com"},console.log("cookies has session : "+t.state.session),console.log("cookies session: "+n.get("session")),console.log("loggedInOnly: "+t.props.loggedInOnly),t.props.loggedInOnly&&!t.state.session&&t.props.history.push("/login"),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"toggleNav",value:function(){this.setState({isOpen:!this.state.isOpen})}},{key:"toggleModalMounted",value:function(e){this.modalSignup=e}},{key:"toggleSignup",value:function(){this.modalSignup.toggle(!0)}},{key:"toggleLogin",value:function(){this.modalSignup.toggle(!1)}},{key:"goToPageAccount",value:function(){this.props.history.push("/dashboard"),console.log("goToPageAccount: /dashboard")}},{key:"logout",value:function(){var e=this;console.log("logout now... ");var a=this.state.baseWebUrl+"/auth/logout";this.setState({loading:!0}),fetch(a,{method:"post",headers:{Accept:"application/json"}}).then((function(e){return e.json()})).then((function(a){console.log("response success = "+a.success+", error = "+a.error),a.success?(console.log("logout: true"),e.setState({session:!1}),e.props.history.push("/#")):console.log("logout: false"+a.error)})).catch((function(a){console.error(a),console.log("success: false catch!"),e.setState({errorMessage:"can't reach server"})})).finally((function(){e.setState({loading:!1})}))}},{key:"render",value:function(){return s.a.createElement(P.a,{light:!0,expand:"md",className:"navbar fixed-top navbar-custom"},s.a.createElement(B,{onMounted:this.toggleModalMounted.bind(this)}),s.a.createElement(_.a,{href:"/"},s.a.createElement(s.a.Fragment,null,s.a.createElement("img",{src:"/img/ip2loc-icon.svg",alt:"",height:"40",width:"40"})," ","ip2loc","")),s.a.createElement(A.a,{onClick:this.toggleNav}),s.a.createElement(S.a,{isOpen:this.state.isOpen,navbar:!0},s.a.createElement(k.a,{className:"ml-auto d-flex justify-content-center"},s.a.createElement(s.a.Fragment,null,s.a.createElement(C.a,{id:"btn_pricing",href:"/pricing"},"Pricing"),s.a.createElement(C.a,{id:"btn_pricing",href:"/documentation"},"Documentation"),this.state.session?"":s.a.createElement(C.a,{id:"btn_register",href:"/login",className:"btn-try-for-free",onClick:this.toggleSignup.bind(this)},"Try for Free \u2794"),this.state.session?s.a.createElement(O.a,{nav:!0,inNavbar:!0},s.a.createElement(T.a,{id:"nav_item_account",nav:!0,caret:!0},"Account"),s.a.createElement(I.a,{right:!0},s.a.createElement(w.a,{id:"nav_item_dashboard",onClick:this.goToPageAccount.bind(this)},"Dashboard"),s.a.createElement(w.a,{divider:!0}),s.a.createElement(w.a,{id:"nav_item_logout",onClick:this.logout.bind(this)},"Logout"))):s.a.createElement(C.a,{href:"/login",onClick:this.toggleLogin.bind(this),id:"nav_item_login"},"Login")))))}}]),a}(n.Component),z=Object(p.g)(Object(K.b)(G));function Y(e){return e.toUpperCase()}function V(e){return e.replace(/\[ACCENT\]/g,'').replace(/\[\/ACCENT\]/g,"").replace(/\[LIGHT\]/g,'').replace(/\[\/LIGHT\]/g,"")}var J=t(74),Z=function(e){function a(e){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).call(this,e))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement("div",null,s.a.createElement("table",{className:"col-md-6",class:"table"},s.a.createElement("tbody",null,s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"phone",color:"#00a8ff"})," calling codes"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"map-signs",color:"#00a8ff"})," capital"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"atlas",color:"#00a8ff"})," continent code")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"globe-americas",color:"#00a8ff"})," continent name"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"flag",color:"#00a8ff"})," country"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"flag-usa",color:"#00a8ff"})," country emoji")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"globe-europe",color:"#00a8ff"})," eu membership"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"signature",color:"#00a8ff"})," country name"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"coins",color:"#00a8ff"})," currencies")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"ethernet",color:"#00a8ff"})," ipVersion"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"globe",rotation:90,color:"#00a8ff"})," latitude"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"globe",color:"#00a8ff"})," longitude")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"map",color:"#00a8ff"})," subdivision"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"map-marked-alt",color:"#00a8ff"})," subdivision id"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"clock",color:"#00a8ff"})," time zone")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"route",color:"#00a8ff"})," zip"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"border-all",color:"#00a8ff"})," proxy"),s.a.createElement("td",null,s.a.createElement(b.a,{icon:"dumpster-fire",color:"#00a8ff"})," tor")))),s.a.createElement("br",null),s.a.createElement("br",null))}}]),a}(n.Component),Q=(Object(p.g)(Z),function(e){function a(){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).apply(this,arguments))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"render",value:function(){var e=this;return s.a.createElement("div",null,s.a.createElement("h4",{className:"subsubheading"},"ProducePDF provides"),s.a.createElement("table",{className:"col-md-6",class:"table list-group"},s.a.createElement("tbody",null,s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"file-pdf",color:"#00a8ff"})," tailored pdf documents in seconds")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"file-code",color:"#00a8ff"})," produce beautiful pdf from html files")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"file-contract",color:"#00a8ff"})," transform online available html to pdf")),s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement(b.a,{icon:"globe",color:"#00a8ff"})," real browser based PDF engine")))),s.a.createElement("br",null),s.a.createElement(v.a,{color:"primary",onClick:function(){return e.props.history.push("/documentation")}},"Example API Response"),s.a.createElement("br",null))}}]),a}(n.Component)),$=Object(p.g)(Q),X=t(123),ee=t.n(X),ae=(t(246),t(3)),te=t.n(ae),ne=(n.Component,t(221)),se=t(228),re=t(227),le=function(e){function a(){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).apply(this,arguments))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"render",value:function(){return ee.a.highlightAll(),s.a.createElement("pre",null,s.a.createElement("code",{className:ae(this.props.language,"myStyle.cardTextStyle")},this.props.code))}}]),a}(n.Component),ce={cardsize:{position:"relative",width:"480px",height:"360px"},cardcenter:{float:"none",margin:"0 auto"}},ie=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).state={activeTab:"1",address:"66.249.90.77",result:"",baseApiUrl:"https://api.ip2loc.com"},t.toggle=t.toggle.bind(Object(y.a)(t)),t.input=s.a.createRef(),t.updateIp=t.updateIp.bind(Object(y.a)(t)),t.handleSubmit=t.handleSubmit.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this.state.baseApiUrl+"/t8wiiODrLK9j0nYkAQWIgr7pvRMWFf3L/detect";this.fetch(e)}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var t=this;fetch(e).then((function(e){return e.json()})).then((function(e){if(e.success){var n=a.responseToState(e);t.setState({result:JSON.stringify(n,null,2)}),t.setState({address:n.ip})}})).catch((function(e){return console.error(e)})).finally((function(){return t.setState({loading:!1})}))}))},{key:"updateIp",value:function(e){this.setState({address:e.target.value})}},{key:"handleSubmit",value:function(){var e=this;console.log("Your input ip is: "+this.state.address);var t=this.state.baseApiUrl+"/t8wiiODrLK9j0nYkAQWIgr7pvRMWFf3L/"+this.state.address;fetch(t,{method:"get",headers:{Accept:"application/json"}}).then((function(e){return e.json()})).then((function(t){if(t.success){var n=a.responseToState(t);console.log("response: "+n),e.setState({address:n.ip}),e.setState({result:JSON.stringify(n,null,2)})}else console.log(t.body)})).catch((function(e){return console.error(e)})).finally((function(){return e.setState({loading:!1})}))}},{key:"toggle",value:function(e){this.state.activeTab!==e&&this.setState({activeTab:e})}},{key:"render",value:function(){var e=this;return s.a.createElement("div",{style:ce.cardsize},s.a.createElement(se.a,null,s.a.createElement(re.a,{type:"text",onChange:this.updateIp,onKeyPress:function(a){"Enter"===a.key&&e.handleSubmit()},id:"ipSearch",ref:this.input,placeholder:"supports Ipv4 and Ipv6 addresses",value:this.state.address}),s.a.createElement(v.a,{onClick:this.handleSubmit},s.a.createElement(b.a,{icon:"search"}))),s.a.createElement(le,{language:"language-javascript",code:this.state.result}))}}],[{key:"responseToState",value:function(e){return{ip:e.connection.ip,city:e.location.city,country:e.location.country.alpha_2,country_emoji:e.location.country.emoji,country_eu_member:e.location.country.eu_member,country_name:e.location.country.name,dialing_code:e.location.country.dialing_code[0],latitude:e.location.latitude,longitude:e.location.longitude,time_zone:e.time.zone,zip_code:e.location.country.zip_code}}}]),a}(n.Component),oe=function(e){function a(){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).apply(this,arguments))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement(J.a,{query:"(max-width: 500px)",align:"center"},(function(e){return e?s.a.createElement(ne.a,{className:te()("cardrotatedScaled")},s.a.createElement(ie,null)):s.a.createElement(ne.a,{className:"cardrotated"},s.a.createElement(ie,null))}))}}]),a}(n.Component),me=(n.Component,{cardsize:{position:"relative",width:"364px",height:"550px",background:'url("/img/file-conversion.svg")',backgroundSize:"364px 570px",backgroundRepeat:"no-repeat",borderRadius:"5px",padding:"2px"},cardcenter:{float:"none",margin:"0 auto"}}),ue={cMapUrl:"cmaps/",cMapPacked:!0,standardFontDataUrl:"standard_fonts/"},de=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).goToPrevPage=function(){t.state.pageNumber>1&&t.setState((function(e){return{pageNumber:e.pageNumber-1}}))},t.goToNextPage=function(){t.state.pageNumber1&&void 0!==arguments[1]&&arguments[1],t=a?"":",";return"boolean"===e.type||"number"===e.type?s.a.createElement("div",{key:e.key},s.a.createElement("span",{className:"code-key"},'"',e.key,'"'),": ",s.a.createElement("span",{className:"code-boolean"},e.value),t):s.a.createElement("div",{key:e.key},s.a.createElement("span",{className:"code-key"},'"',e.key,'"'),": ",s.a.createElement("span",{className:"code-string"},'"',e.value,'"'),t)}},{key:"render",value:function(){var e=this,a=!1!==this.props.showHeader;return s.a.createElement("div",{className:"use-cases-section"},a&&s.a.createElement("div",{className:"section-header"},s.a.createElement("span",{className:"section-label"},"Use Cases"),s.a.createElement("h2",{className:"section-title"},"Built for Real-World Applications"),s.a.createElement("p",{className:"section-subtitle"},"From fraud detection to personalization, see how developers use our API")),s.a.createElement("div",{className:"use-cases-grid"},fe.map((function(a,t){return s.a.createElement("a",{className:"use-case-card use-case-card-link",href:"/use-cases/".concat(a.slug),key:t,"aria-label":"Use case: ".concat(a.title)},s.a.createElement("div",{className:"use-case-icon"},s.a.createElement(b.a,{icon:a.icon})),s.a.createElement("div",{className:"use-case-title"},a.title),s.a.createElement("div",{className:"use-case-desc"},a.desc),s.a.createElement("div",{className:"use-case-code"},s.a.createElement("code",null,"{",a.code.map((function(t,n){return e.renderCodeLine(t,n===a.code.length-1)})),"}")))}))))}}]),a}(n.Component),be=Object(p.g)(ve),Ne=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).state={address:"66.249.90.77",result:null,baseApiUrl:"https://api.ip2loc.com"},t.input=s.a.createRef(),t.updateIp=t.updateIp.bind(Object(y.a)(t)),t.handleSubmit=t.handleSubmit.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this.state.baseApiUrl+"/t8wiiODrLK9j0nYkAQWIgr7pvRMWFf3L/detect";this.fetch(e)}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var t=this;fetch(e).then((function(e){return e.json()})).then((function(e){if(e.success){var n=a.responseToState(e);t.setState({result:n}),t.setState({address:n.ip})}})).catch((function(e){return console.error(e)})).finally((function(){return t.setState({loading:!1})}))}))},{key:"updateIp",value:function(e){this.setState({address:e.target.value})}},{key:"handleSubmit",value:function(){var e=this,t=this.state.baseApiUrl+"/t8wiiODrLK9j0nYkAQWIgr7pvRMWFf3L/"+this.state.address;fetch(t,{method:"get",headers:{Accept:"application/json"}}).then((function(e){return e.json()})).then((function(t){if(t.success){var n=a.responseToState(t);e.setState({address:n.ip}),e.setState({result:n})}})).catch((function(e){return console.error(e)})).finally((function(){return e.setState({loading:!1})}))}},{key:"renderJsonLine",value:function(e,a){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t?"":",";return"boolean"===typeof a?s.a.createElement("div",{className:"json-line",key:e},s.a.createElement("span",{className:"json-key"},'"',e,'"'),s.a.createElement("span",{className:"json-colon"},": "),s.a.createElement("span",{className:a?"json-true":"json-false"},a.toString()),n):"number"===typeof a?s.a.createElement("div",{className:"json-line",key:e},s.a.createElement("span",{className:"json-key"},'"',e,'"'),s.a.createElement("span",{className:"json-colon"},": "),s.a.createElement("span",{className:"json-number"},a),n):s.a.createElement("div",{className:"json-line",key:e},s.a.createElement("span",{className:"json-key"},'"',e,'"'),s.a.createElement("span",{className:"json-colon"},": "),s.a.createElement("span",{className:"json-string"},'"',a,'"'),n)}},{key:"render",value:function(){var e=this,a=this.state.result,t=a?Object.keys(a):[];return s.a.createElement("div",{className:"api-console-v2"},s.a.createElement("div",{className:"console-header"},s.a.createElement("div",{className:"window-buttons"},s.a.createElement("span",{className:"window-btn red"}),s.a.createElement("span",{className:"window-btn yellow"}),s.a.createElement("span",{className:"window-btn green"})),s.a.createElement("div",{className:"console-title"},"Live API Response - Your IP")),s.a.createElement("div",{className:"console-search"},s.a.createElement(se.a,{className:"console-input-group"},s.a.createElement(re.a,{type:"text",onChange:this.updateIp,onKeyPress:function(a){"Enter"===a.key&&e.handleSubmit()},id:"ipSearchV2",ref:this.input,placeholder:"Enter IP address...",value:this.state.address,className:"console-input"}),s.a.createElement(v.a,{onClick:this.handleSubmit,className:"console-lookup-btn"},"Lookup"))),s.a.createElement("div",{className:"console-response"},s.a.createElement("pre",{className:"json-output"},s.a.createElement("code",null,"{",a&&t.map((function(n,s){return e.renderJsonLine(n,a[n],s===t.length-1)})),"}"))))}}],[{key:"responseToState",value:function(e){return{ip:e.connection.ip,country:e.location.country.alpha_2,country_name:e.location.country.name,country_emoji:e.location.country.emoji,city:e.location.city,latitude:e.location.latitude,longitude:e.location.longitude,timezone:e.time.zone,currency:e.currencies&&e.currencies.length>0?e.currencies[0]:"EUR",eu_member:e.location.country.eu_member,is_proxy:e.connection.is_proxy||!1,is_tor:e.connection.is_tor||!1}}}]),a}(n.Component),Pe=t(61);function _e(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}var Ae="operational",Se=s.a.createContext({loading:!1,error:null,overall:Ae,status:null,uptimeHistory:null,updatedAt:null,consentRequired:!1,includeUptimeHistory:!1,requestUptimeHistory:function(){}});var ke=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).requestUptimeHistory=function(e){var a=!0===e;a!==t.state.includeUptimeHistory&&t.setState({includeUptimeHistory:a,uptimeHistory:a?t.state.uptimeHistory:null},(function(){return t.fetchStatus()}))},t.state={loading:!1,error:null,overall:Ae,status:null,uptimeHistory:null,updatedAt:null,consentRequired:!1,includeUptimeHistory:!1},t._isMounted=!1,t._timer=null,t._inFlight=!1,t._needsRefetch=!1,t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this;this._isMounted=!0,this.fetchStatus();var a="number"===typeof this.props.intervalMs?this.props.intervalMs:5e3;this._timer=setInterval((function(){return e.fetchStatus()}),a)}},{key:"componentWillUnmount",value:function(){this._isMounted=!1,this._timer&&clearInterval(this._timer)}},{key:"fetchStatus",value:function(){var e=this,a=function(e,a){if(!e)return null;var t=e.replace(/\/$/,"")+"/api/status";return a?t+"?include=uptime_history":t}(this.props.baseWebUrl,this.state.includeUptimeHistory);a&&(this._inFlight?this._needsRefetch=!0:(this._inFlight=!0,this.setState({loading:!0}),fetch(a).then((function(e){return e.json()})).then((function(a){e._isMounted&&(a&&a.success?e.setState({loading:!1,error:null,overall:a.overall||Ae,status:a.status||null,uptimeHistory:a.uptime_history||null,updatedAt:a.updated_at||null,consentRequired:!0===a.consent_required}):e.setState({loading:!1,error:"status endpoint returned error"}))})).catch((function(a){e._isMounted&&e.setState({loading:!1,error:a?String(a):"status fetch failed"})})).finally((function(){e._inFlight=!1,e._needsRefetch&&(e._needsRefetch=!1,e.fetchStatus())}))))}},{key:"render",value:function(){var e=function(e){for(var a=1;a0}},{key:"switchTab",value:function(e){this.setState({activeTab:e,copied:!1})}},{key:"getPlainTextCode",value:function(e){var a=this.props,t=a.apiKey||"YOUR_API_KEY",n=a.baseApiUrl||this.getDefaultApiUrl(),s=!("YOUR_API_KEY"!==t)&&this.isNoKeyDemoEnabled()?n:"".concat(n,"/").concat(t),r='curl "'.concat(s,'/8.8.8.8"');return{curl:this.props.curlCopyCommandOnly?r:"# Get location data for any IP\n".concat(r,'\n\n# Response\n{\n "success": true,\n "connection": {\n "ip": "8.8.8.8",\n "ip_version": "4"\n },\n "location": {\n "country": {\n "name": "United States",\n "alpha_2": "US"\n },\n "city": "Mountain View"\n }\n}'),python:'import requests\n\nresponse = requests.get(\n "'.concat(s,"/8.8.8.8\"\n)\n\ndata = response.json()\nprint(f\"Country: {data['location']['country']['name']}\")\nprint(f\"City: {data['location']['city']}\")"),node:'const response = await fetch(\n "'.concat(s,'/8.8.8.8"\n);\n\nconst data = await response.json();\n\nconsole.log(`Country: ${data.location.country.name}`);\nconsole.log(`City: ${data.location.city}`);'),php:'location->country->name;\necho "City: " . $data->location->city;')}[e]||""}},{key:"copyCode",value:function(){var e=this,a=this.getPlainTextCode(this.state.activeTab);navigator.clipboard.writeText(a).then((function(){e.setState({copied:!0}),setTimeout((function(){return e.setState({copied:!1})}),2e3)}))}},{key:"render",value:function(){var e=this,a=this.props,t=a.apiKey,n=a.baseApiUrl,r=a.showResponse,l=void 0===r||r,c=this.state,i=c.activeTab,o=c.copied,m=t||"YOUR_API_KEY",u=n||this.getDefaultApiUrl(),d=!("YOUR_API_KEY"!==m)&&this.isNoKeyDemoEnabled()?u:"".concat(u,"/").concat(m);return s.a.createElement("div",{className:"code-tabs-container"},s.a.createElement("div",{className:"code-tabs-header"},s.a.createElement("div",{className:"code-tabs"},s.a.createElement("button",{className:"code-tab ".concat("curl"===i?"active":""),onClick:function(){return e.switchTab("curl")}},"cURL"),s.a.createElement("button",{className:"code-tab ".concat("python"===i?"active":""),onClick:function(){return e.switchTab("python")}},"Python"),s.a.createElement("button",{className:"code-tab ".concat("node"===i?"active":""),onClick:function(){return e.switchTab("node")}},"Node.js"),s.a.createElement("button",{className:"code-tab ".concat("php"===i?"active":""),onClick:function(){return e.switchTab("php")}},"PHP")),s.a.createElement("button",{className:"code-copy-btn ".concat(o?"copied":""),onClick:this.copyCode},o?s.a.createElement(s.a.Fragment,null,s.a.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("polyline",{points:"20 6 9 17 4 12"})),"Copied!"):s.a.createElement(s.a.Fragment,null,s.a.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),s.a.createElement("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})),"Copy"))),s.a.createElement("div",{className:"code-content"},"curl"===i&&s.a.createElement("pre",{className:"code-block"},s.a.createElement("code",null,s.a.createElement("span",{className:"code-comment"},"# Get location data for any IP"),"\n",s.a.createElement("span",{className:"code-function"},"curl")," ",s.a.createElement("span",{className:"code-string"},'"',d,'/8.8.8.8"'),l&&s.a.createElement(s.a.Fragment,null,"\n","\n",s.a.createElement("span",{className:"code-comment"},"# Response"),"\n","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"success"'),": ",s.a.createElement("span",{className:"code-keyword"},"true"),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"connection"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"ip"'),": ",s.a.createElement("span",{className:"code-string"},'"8.8.8.8"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"ip_version"'),": ",s.a.createElement("span",{className:"code-string"},'"4"'),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"location"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"country"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"name"'),": ",s.a.createElement("span",{className:"code-string"},'"United States"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"alpha_2"'),": ",s.a.createElement("span",{className:"code-string"},'"US"'),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"city"'),": ",s.a.createElement("span",{className:"code-string"},'"Mountain View"'),"\n"," ","}","\n","}"))),"python"===i&&s.a.createElement("pre",{className:"code-block"},s.a.createElement("code",null,s.a.createElement("span",{className:"code-keyword"},"import")," requests","\n","\n","response = requests.",s.a.createElement("span",{className:"code-function"},"get"),"(","\n"," ",s.a.createElement("span",{className:"code-string"},'"',d,'/8.8.8.8"'),"\n",")","\n","\n","data = response.",s.a.createElement("span",{className:"code-function"},"json"),"()","\n",s.a.createElement("span",{className:"code-function"},"print"),"(",s.a.createElement("span",{className:"code-string"},'f"Country: ',"{","data['location']['country']['name']","}",'"'),")","\n",s.a.createElement("span",{className:"code-function"},"print"),"(",s.a.createElement("span",{className:"code-string"},'f"City: ',"{","data['location']['city']","}",'"'),")")),"node"===i&&s.a.createElement("pre",{className:"code-block"},s.a.createElement("code",null,s.a.createElement("span",{className:"code-keyword"},"const")," response = ",s.a.createElement("span",{className:"code-keyword"},"await")," ",s.a.createElement("span",{className:"code-function"},"fetch"),"(","\n"," ",s.a.createElement("span",{className:"code-string"},'"',d,'/8.8.8.8"'),"\n",");","\n","\n",s.a.createElement("span",{className:"code-keyword"},"const")," data = ",s.a.createElement("span",{className:"code-keyword"},"await")," response.",s.a.createElement("span",{className:"code-function"},"json"),"();","\n","\n","console.",s.a.createElement("span",{className:"code-function"},"log"),"(",s.a.createElement("span",{className:"code-string"},"`Country: $","{","data.location.country.name","}","`"),");","\n","console.",s.a.createElement("span",{className:"code-function"},"log"),"(",s.a.createElement("span",{className:"code-string"},"`City: $","{","data.location.city","}","`"),");")),"php"===i&&s.a.createElement("pre",{className:"code-block"},s.a.createElement("code",null,s.a.createElement("span",{className:"code-keyword"},"location->country->name;","\n",s.a.createElement("span",{className:"code-keyword"},"echo")," ",s.a.createElement("span",{className:"code-string"},'"City: "')," . ",s.a.createElement("span",{className:"code-variable"},"$data"),"->location->city;"))))}}]),a}(n.Component),we=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).freeContingent=t.freeContingent.bind(Object(y.a)(t)),t.fetchApiKey=t.fetchApiKey.bind(Object(y.a)(t)),t.state={freeContingent:"Ready to Save Time and Money?",apiKey:"YOUR_API_KEY",baseWebUrl:"https://ip2loc.com",baseApiUrl:"https://api.ip2loc.com"},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this.state.baseWebUrl+"/user/apiKey";this.fetchApiKey(e)}},{key:"fetchApiKey",value:function(e){var a=this;fetch(e).then((function(e){return e.json()})).then((function(e){e.success&&e.apiKey&&a.setState({apiKey:e.apiKey})})).catch((function(e){return console.error(e)}))}},{key:"freeContingent",value:function(){window.location.href="/dashboard"}},{key:"render",value:function(){var e=((new Date).getUTCMonth()+1)%2===1,a=e?"Start Free - 1,000/day \u2192":"Start Free - 30 Day Trial \u2192",t=e?"Join thousands of developers using our IP Geolocation API. Start with 1,000 free requests per day.":"Join thousands of developers using our IP Geolocation API. Start with a free 30-day trial.",n=e?"1,000 free requests/day":"30-day free trial";return s.a.createElement("div",null,s.a.createElement(z,null),s.a.createElement("div",{className:"head-color nav-padding"},s.a.createElement("div",{className:"nav-padding"},s.a.createElement("div",{className:"container"},s.a.createElement("div",{className:"row align-items-center hero-row"},s.a.createElement("div",{className:"col-lg-6 col-md-12 hero-headline hero-headline-v2"},s.a.createElement("div",{className:"uptime-badge"},s.a.createElement("span",{className:"uptime-dot"}),"99.9% Uptime SLA"),s.a.createElement("h1",{className:"heading"},"A modern",s.a.createElement("br",null)," IP Location API",s.a.createElement("span",{className:"accent"},"built for speed, accuracy and scale.")),s.a.createElement("div",{className:"subheading"},"No bloated dashboards. No complicated setup. Just a clean API delivering geo data in milliseconds \u2014 from hobby projects to billions of calls."),s.a.createElement("div",{className:"hero-cta"},s.a.createElement(v.a,{className:"btn-hero-primary",color:"primary",href:"/dashboard"},a),s.a.createElement(v.a,{className:"btn-hero-secondary",outline:!0,color:"dark",href:"/documentation"},"View Documentation")),s.a.createElement("div",{className:"hero-stats"},s.a.createElement("div",{className:"hero-stat"},s.a.createElement("div",{className:"hero-stat-value"},"<50ms"),s.a.createElement("div",{className:"hero-stat-label"},"Response Time")),s.a.createElement("div",{className:"hero-stat"},s.a.createElement("div",{className:"hero-stat-value"},"99.8%"),s.a.createElement("div",{className:"hero-stat-label"},"Accuracy")),s.a.createElement("div",{className:"hero-stat"},s.a.createElement("div",{className:"hero-stat-value"},"1B+"),s.a.createElement("div",{className:"hero-stat-label"},"API Calls Served")))),s.a.createElement("div",{className:"col-lg-6 col-md-12 hero-console"},s.a.createElement(Ne,null))))),s.a.createElement("div",{className:"head-curve"},s.a.createElement("br",null),s.a.createElement("br",null))),s.a.createElement("div",{className:"code-snippets-section"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"section-header text-center"},s.a.createElement("span",{className:"section-label"},"Quick Start"),s.a.createElement("h2",{className:"section-title"},"One API Call. All the Data."),s.a.createElement("p",{className:"section-subtitle"},"Integrate in minutes with any language. No SDK required.")),s.a.createElement(Ie,{apiKey:this.state.apiKey,baseApiUrl:this.state.baseApiUrl}))),s.a.createElement("div",{id:"features"},s.a.createElement(ye,null)),s.a.createElement("div",{id:"use-cases"},s.a.createElement(be,null)),s.a.createElement("div",{className:"database-cta-section"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"database-cta-content"},s.a.createElement("span",{className:"database-cta-label"},"Database Access"),s.a.createElement("h2",{className:"database-cta-title"},"Need the database instead of the API?"),s.a.createElement("p",{className:"database-cta-subtitle"},"We also provide licensed IP geolocation database dumps in MMDB, CSV, Parquet, and JSONL formats for local processing, bulk enrichment, and offline deployment."),s.a.createElement("a",{href:"/database",className:"database-cta-button"},"Request Database Access",s.a.createElement("span",{className:"arrow"},"\u2192"))))),!1,!1,"",s.a.createElement("div",{className:"cta-section-v2"},s.a.createElement("div",{className:"cta-content-v2"},s.a.createElement("span",{className:"cta-label"},"Get Started Today"),s.a.createElement("h2",{className:"cta-title-v2"},"Ready to Build Something Amazing?"),s.a.createElement("p",{className:"cta-subtitle-v2"},t),s.a.createElement("button",{className:"cta-button-v2",onClick:this.freeContingent},"Get Your Free API Key",s.a.createElement("span",{className:"arrow"},"\u2192")),s.a.createElement("div",{className:"cta-features"},s.a.createElement("div",{className:"cta-feature"},s.a.createElement(b.a,{icon:"check-circle"}),s.a.createElement("span",null,"No credit card required")),s.a.createElement("div",{className:"cta-feature"},s.a.createElement(b.a,{icon:"check-circle"}),s.a.createElement("span",null,n)),s.a.createElement("div",{className:"cta-feature"},s.a.createElement(b.a,{icon:"check-circle"}),s.a.createElement("span",null,"Cancel anytime"))))),s.a.createElement(Te,null))}}]),a}(n.Component),Re=[{icon:"phone",label:"Dialing Prefixes",desc:"International calling codes"},{icon:"map-signs",label:"Capital City",desc:"Nation's capital"},{icon:"atlas",label:"Continental Region",desc:"Geographic continent data"},{icon:"flag",label:"Nation Code",desc:"ISO standard codes"},{icon:"flag-usa",label:"Flag Symbol",desc:"National flag emoji"},{icon:"globe-europe",label:"EU Status",desc:"Union membership check"},{icon:"coins",label:"Local Currency",desc:"Monetary unit codes"},{icon:"ethernet",label:"Protocol Version",desc:"IPv4 or IPv6 detection"},{icon:"globe",label:"Geo Coordinates",desc:"Precise lat/long position"},{icon:"map",label:"Administrative Area",desc:"State & province data"},{icon:"clock",label:"Time Region",desc:"Local timezone info"},{icon:"route",label:"Area Code",desc:"Postal & ZIP codes"},{icon:"shield-alt",label:"Anonymizer Detection",desc:"VPN & proxy identification"},{icon:"user-secret",label:"Tor Identification",desc:"Exit node verification"},{icon:"building",label:"Organization",desc:"ISP & company data"}],je=function(e){function a(){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).apply(this,arguments))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement("div",{className:"ipwhere-features-section"},s.a.createElement("div",{className:"section-header text-center"},s.a.createElement("span",{className:"section-label"},"Complete Data"),s.a.createElement("h2",{className:"section-title"},"15+ Intelligence Points Per Query"),s.a.createElement("p",{className:"section-subtitle"},"Comprehensive insights from any IP address")),s.a.createElement("div",{className:"features-grid"},Re.map((function(e,a){return s.a.createElement("div",{className:"feature-card",key:a},s.a.createElement("div",{className:"feature-icon"},s.a.createElement(b.a,{icon:e.icon})),s.a.createElement("div",{className:"feature-info"},s.a.createElement("div",{className:"feature-label"},e.label),s.a.createElement("div",{className:"feature-desc"},e.desc)))}))))}}]),a}(n.Component),xe=Object(p.g)(je),Me=[{slug:"compliance-screening",icon:"gavel",title:"Compliance & Sanctions",desc:"Verify user locations against sanctioned regions and enforce geographic access policies in real time.",code:[{key:"country",value:"IR",type:"string"},{key:"country_name",value:"Iran",type:"string"},{key:"is_proxy",value:"true",type:"boolean"}]},{slug:"geo-fencing",icon:"map-marked-alt",title:"Geo-Fencing & Access Control",desc:"Restrict or grant access to content, services, or pricing based on precise visitor geography.",code:[{key:"country",value:"US",type:"string"},{key:"region",value:"California",type:"string"},{key:"postal_code",value:"94043",type:"string"}]},{slug:"bot-detection",icon:"robot",title:"Bot & Proxy Detection",desc:"Identify automated traffic, VPNs, and Tor exit nodes to protect your platform from abuse.",code:[{key:"is_proxy",value:"true",type:"boolean"},{key:"is_tor",value:"false",type:"boolean"},{key:"organization",value:"DataCenter LLC",type:"string"}]},{slug:"dynamic-pricing",icon:"tags",title:"Dynamic Pricing & Tax",desc:"Adapt pricing, currency display, and tax rules automatically based on buyer location.",code:[{key:"currency",value:"GBP",type:"string"},{key:"eu_member",value:"false",type:"boolean"},{key:"timezone",value:"Europe/London",type:"string"}]}],Ue=function(e){function a(){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).apply(this,arguments))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"renderCodeLine",value:function(e){var a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=a?"":",";return"boolean"===e.type||"number"===e.type?s.a.createElement("div",{key:e.key},s.a.createElement("span",{className:"code-key"},'"',e.key,'"'),": ",s.a.createElement("span",{className:"code-boolean"},e.value),t):s.a.createElement("div",{key:e.key},s.a.createElement("span",{className:"code-key"},'"',e.key,'"'),": ",s.a.createElement("span",{className:"code-string"},'"',e.value,'"'),t)}},{key:"render",value:function(){var e=this,a=!1!==this.props.showHeader;return s.a.createElement("div",{className:"ipwhere-use-cases-section"},a&&s.a.createElement("div",{className:"section-header"},s.a.createElement("span",{className:"section-label"},"Use Cases"),s.a.createElement("h2",{className:"section-title"},"Built for Critical Infrastructure"),s.a.createElement("p",{className:"section-subtitle"},"From compliance enforcement to fraud mitigation \u2014 IP intelligence where it matters most")),s.a.createElement("div",{className:"use-cases-grid"},Me.map((function(a,t){return s.a.createElement("a",{className:"use-case-card use-case-card-link",href:"/use-cases/".concat(a.slug),key:t,"aria-label":"Use case: ".concat(a.title)},s.a.createElement("div",{className:"use-case-icon"},s.a.createElement(b.a,{icon:a.icon})),s.a.createElement("div",{className:"use-case-title"},a.title),s.a.createElement("div",{className:"use-case-desc"},a.desc),s.a.createElement("div",{className:"use-case-code"},s.a.createElement("code",null,"{",a.code.map((function(t,n){return e.renderCodeLine(t,n===a.code.length-1)})),"}")))}))))}}]),a}(n.Component),Le=Object(p.g)(Ue),De=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).state={address:"66.249.90.77",result:null,baseApiUrl:"https://api.ip2loc.com"},t.input=s.a.createRef(),t.updateIp=t.updateIp.bind(Object(y.a)(t)),t.handleSubmit=t.handleSubmit.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this.state.baseApiUrl+"/v1/ip/me";this.fetch(e)}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var t=this;fetch(e).then((function(e){return e.json()})).then((function(e){if(e.ok){var n=a.responseToState(e);t.setState({result:n}),t.setState({address:n.ip}),t.props.onLocationUpdate&&t.props.onLocationUpdate(n.latitude,n.longitude,n.city,n.country_name,n.country)}})).catch((function(e){console.error(e)})).finally((function(){t.setState({loading:!1})}))}))},{key:"updateIp",value:function(e){this.setState({address:e.target.value})}},{key:"handleSubmit",value:function(){var e=this,t=this.state.baseApiUrl+"/v1/ip/"+encodeURIComponent(this.state.address);fetch(t,{method:"get",headers:{Accept:"application/json"}}).then((function(e){return e.json()})).then((function(t){if(t.ok){var n=a.responseToState(t);e.setState({address:n.ip}),e.setState({result:n}),e.props.onLocationUpdate&&e.props.onLocationUpdate(n.latitude,n.longitude,n.city,n.country_name,n.country)}})).catch((function(e){console.error(e)})).finally((function(){e.setState({loading:!1})}))}},{key:"renderJsonLine",value:function(e,a){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t?"":",";return"boolean"===typeof a?s.a.createElement("div",{className:"json-line",key:e},s.a.createElement("span",{className:"json-key"},'"',e,'"'),s.a.createElement("span",{className:"json-colon"},": "),s.a.createElement("span",{className:a?"json-true":"json-false"},a.toString()),n):"number"===typeof a?s.a.createElement("div",{className:"json-line",key:e},s.a.createElement("span",{className:"json-key"},'"',e,'"'),s.a.createElement("span",{className:"json-colon"},": "),s.a.createElement("span",{className:"json-number"},a),n):s.a.createElement("div",{className:"json-line",key:e},s.a.createElement("span",{className:"json-key"},'"',e,'"'),s.a.createElement("span",{className:"json-colon"},": "),s.a.createElement("span",{className:"json-string"},'"',a,'"'),n)}},{key:"render",value:function(){var e=this,a=this.state.result,t=a?Object.keys(a):[];return s.a.createElement("div",{className:"ipwhere-console"},s.a.createElement("div",{className:"console-header"},s.a.createElement("div",{className:"console-status"},s.a.createElement("span",{className:"status-indicator"}),s.a.createElement("span",{className:"status-text"},"LIVE")),s.a.createElement("div",{className:"console-title"},"API Response"),s.a.createElement("div",{className:"console-badge"},"JSON")),s.a.createElement("div",{className:"console-search"},s.a.createElement(se.a,{className:"console-input-group"},s.a.createElement(re.a,{type:"text",onChange:this.updateIp,onKeyPress:function(a){"Enter"===a.key&&e.handleSubmit()},id:"ipSearchIpwhere",ref:this.input,placeholder:"Enter IP address...",value:this.state.address,className:"console-input"}),s.a.createElement(v.a,{onClick:this.handleSubmit,className:"console-lookup-btn"},"Analyze"))),s.a.createElement("div",{className:"console-response"},s.a.createElement("pre",{className:"json-output"},s.a.createElement("code",null,"{",a&&t.map((function(n,s){return e.renderJsonLine(n,a[n],s===t.length-1)})),"}"))))}}],[{key:"responseToState",value:function(e){var a=e.geo||{},t=a.country||{},n=a.location||{},s=a.city||{},r=e.security||{};return{ip:e.ip&&e.ip.address?e.ip.address:"",country:t.code||"",country_name:t.name||"",city:s.name||"",latitude:n.latitude,longitude:n.longitude,timezone:n.time_zone||"",is_proxy:!!r.is_proxy,is_tor:!!r.is_tor}}}]),a}(n.Component),He=Object(n.lazy)((function(){return Promise.all([t.e(155),t.e(156)]).then(t.bind(null,552))})),We=(n.Component,function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),console.log("--\x3e");var n=E.a.parse(t.props.location.search);return console.log(n.plan),t.state={gtmId:"GTM-PNZNW4R"},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="ip2loc"}}]),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement(we,null)}}]),a}(n.Component)),qe=(t(486),t(254)),Fe=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).state={loading:!0,status:"loading",message:"Activating your account...",baseWebUrl:"https://ip2loc.com"},g(),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this;document.title="Account Activation";var a=E.a.parse(this.props.location.search),t=this.state.baseWebUrl+"/auth/email/activate";fetch(t,{method:"post",headers:{Accept:"application/json"},body:JSON.stringify({token:a.token})}).then((function(e){return e.json()})).then((function(a){if(a.success)e.setState({loading:!1,status:"success",message:"Your account has been activated successfully!"}),setTimeout((function(){e.props.history.push(a.plan?"/dashboard":"/plans")}),2500);else switch(a.error){case 208:e.setState({loading:!1,status:"warning",message:"This account has already been activated."});break;case 404:e.setState({loading:!1,status:"error",message:"Invalid or expired activation token."});break;default:e.setState({loading:!1,status:"error",message:"An unexpected error occurred. Please try again."})}})).catch((function(a){console.error(a),e.setState({loading:!1,status:"error",message:"Could not connect to the server. Please try again later."})}))}},{key:"getIcon",value:function(){switch(this.state.status){case"loading":return s.a.createElement(b.a,{icon:"spinner",spin:!0});case"success":return s.a.createElement(b.a,{icon:"check-circle"});case"warning":return s.a.createElement(b.a,{icon:"exclamation-circle"});case"error":return s.a.createElement(b.a,{icon:"times-circle"});default:return s.a.createElement(b.a,{icon:"spinner",spin:!0})}}},{key:"getIconClass",value:function(){switch(this.state.status){case"loading":return"activation-icon loading";case"success":return"activation-icon success";case"warning":return"activation-icon warning";case"error":return"activation-icon error";default:return"activation-icon"}}},{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill"},s.a.createElement("div",{className:"success-page"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"success-card"},s.a.createElement("div",{className:this.getIconClass()},this.getIcon()),s.a.createElement("h1",null,"Account Activation"),s.a.createElement("p",{className:"success-message"},this.state.message),"success"===this.state.status&&s.a.createElement("p",{className:"redirect-notice"},"Redirecting you automatically..."),("warning"===this.state.status||"error"===this.state.status)&&s.a.createElement("div",{className:"success-actions"},s.a.createElement("a",{href:"/signin",className:"btn-primary-custom"},s.a.createElement(b.a,{icon:"sign-in-alt",className:"mr-2"}),"Go to Sign In")))))),s.a.createElement(Te,null))}}]),a}(n.Component),Be=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={loading:!0,status:"loading",message:"Signing you in...",baseWebUrl:"https://ip2loc.com"},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this;document.title="Sign In";var a=E.a.parse(this.props.location.search),t=this.state.baseWebUrl+"/auth/email/signin";fetch(t,{method:"post",headers:{Accept:"application/json"},body:JSON.stringify({token:a.token})}).then((function(e){return e.json()})).then((function(a){if(a.success)e.setState({loading:!1,status:"success",message:"Sign in successful!"}),setTimeout((function(){e.props.history.push(a.plan?"/dashboard":"/plans")}),2e3);else switch(a.error){case 208:e.setState({loading:!1,status:"warning",message:"This account has already been activated."});break;case 498:e.setState({loading:!1,status:"error",message:"Token is no longer valid. Please request a new sign-in link."});break;default:e.setState({loading:!1,status:"error",message:"An unexpected error occurred. Please try again."})}})).catch((function(a){console.error(a),e.setState({loading:!1,status:"error",message:"Could not connect to the server. Please try again later."})}))}},{key:"getIcon",value:function(){switch(this.state.status){case"loading":return s.a.createElement(b.a,{icon:"spinner",spin:!0});case"success":return s.a.createElement(b.a,{icon:"check-circle"});case"warning":return s.a.createElement(b.a,{icon:"exclamation-circle"});case"error":return s.a.createElement(b.a,{icon:"times-circle"});default:return s.a.createElement(b.a,{icon:"spinner",spin:!0})}}},{key:"getIconClass",value:function(){switch(this.state.status){case"loading":return"activation-icon loading";case"success":return"activation-icon success";case"warning":return"activation-icon warning";case"error":return"activation-icon error";default:return"activation-icon"}}},{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill"},s.a.createElement("div",{className:"success-page"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"success-card"},s.a.createElement("div",{className:this.getIconClass()},this.getIcon()),s.a.createElement("h1",null,"Sign In"),s.a.createElement("p",{className:"success-message"},this.state.message),"success"===this.state.status&&s.a.createElement("p",{className:"redirect-notice"},"Redirecting you to your dashboard..."),("warning"===this.state.status||"error"===this.state.status)&&s.a.createElement("div",{className:"success-actions"},s.a.createElement("a",{href:"/login",className:"btn-primary-custom"},s.a.createElement(b.a,{icon:"sign-in-alt",className:"mr-2"}),"Request New Link")))))),s.a.createElement(Te,null))}}]),a}(n.Component),Ke=(t(487),t(164)),Ge=(n.Component,t(230)),ze={height:"14px"},Ye=(n.Component,function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={apiKey:"YOUR_API_KEY",baseWebUrl:"https://ip2loc.com",baseApiUrl:"https://api.ip2loc.com",copiedEndpoint:null},t.copyToClipboard=t.copyToClipboard.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="API Documentation - ip2loc";var e=this.state.baseWebUrl+"/user/apiKey";this.fetchApiKey(e)}},{key:"fetchApiKey",value:function(e){var a=this;fetch(e).then((function(e){return e.json()})).then((function(e){e.success&&e.apiKey&&a.setState({apiKey:e.apiKey})})).catch((function(e){return console.error(e)}))}},{key:"copyToClipboard",value:function(e,a){var t=this;navigator.clipboard.writeText(e).then((function(){t.setState({copiedEndpoint:a}),setTimeout((function(){return t.setState({copiedEndpoint:null})}),2e3)}))}},{key:"render",value:function(){var e=this,a=this.state,t=a.apiKey,n=a.baseApiUrl,r=a.copiedEndpoint,l="YOUR_API_KEY"!==t,c=function(){var e=Number.parseInt("0",10);return Number.isFinite(e)&&e>0}(),i=l?t:"YOUR_API_KEY",o=!l&&c?"".concat(n,"/detect"):"".concat(n,"/").concat(i,"/detect"),m=!l&&c?"".concat(n,"/8.8.8.8"):"".concat(n,"/").concat(i,"/8.8.8.8"),u=!l&&c?"".concat(n,"/detect?include=city,country_name"):"".concat(n,"/").concat(i,"/detect?include=city,country_name");return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"docs-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"docs-hero-content"},s.a.createElement("span",{className:"docs-badge"},"Documentation"),s.a.createElement("h1",{className:"docs-title"},"API Reference"),s.a.createElement("p",{className:"docs-subtitle"},"Everything you need to integrate IP geolocation into your application. Get started in minutes with our simple REST API."),l&&s.a.createElement("div",{className:"docs-api-key-banner"},s.a.createElement("span",{className:"api-key-label"},"Your API Key:"),s.a.createElement("code",{className:"api-key-value"},t),s.a.createElement("button",{className:"api-key-copy ".concat("apikey"===r?"copied":""),onClick:function(){return e.copyToClipboard(t,"apikey")}},"apikey"===r?"Copied!":"Copy"))))),s.a.createElement("div",{className:"docs-nav-section"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"docs-nav-cards"},s.a.createElement("a",{href:"#quickstart",className:"docs-nav-card"},s.a.createElement("div",{className:"docs-nav-icon"},"\ud83d\ude80"),s.a.createElement("div",{className:"docs-nav-text"},s.a.createElement("h4",null,"Quick Start"),s.a.createElement("p",null,"Get up and running in 2 minutes"))),s.a.createElement("a",{href:"#endpoints",className:"docs-nav-card"},s.a.createElement("div",{className:"docs-nav-icon"},"\ud83d\udd17"),s.a.createElement("div",{className:"docs-nav-text"},s.a.createElement("h4",null,"Endpoints"),s.a.createElement("p",null,"API endpoints reference"))),s.a.createElement("a",{href:"#parameters",className:"docs-nav-card"},s.a.createElement("div",{className:"docs-nav-icon"},"\u2699\ufe0f"),s.a.createElement("div",{className:"docs-nav-text"},s.a.createElement("h4",null,"Parameters"),s.a.createElement("p",null,"Available data fields"))),s.a.createElement("a",{href:"#examples",className:"docs-nav-card"},s.a.createElement("div",{className:"docs-nav-icon"},"\ud83d\udcbb"),s.a.createElement("div",{className:"docs-nav-text"},s.a.createElement("h4",null,"Code Examples"),s.a.createElement("p",null,"Ready-to-use snippets")))))),s.a.createElement("div",{className:"docs-section",id:"quickstart"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"docs-section-header"},s.a.createElement("h2",null,"Quick Start"),s.a.createElement("p",null,"Make your first API call in seconds. Our REST API returns JSON responses and requires only your API key for authentication.")),s.a.createElement("div",{className:"docs-step"},s.a.createElement("div",{className:"docs-step-number"},"1"),s.a.createElement("div",{className:"docs-step-content"},s.a.createElement("h3",null,"Get Your API Key"),s.a.createElement("p",null,l?s.a.createElement(s.a.Fragment,null,"Your API key is shown above. Use it in all your requests."):s.a.createElement(s.a.Fragment,null,s.a.createElement("a",{href:"/login"},"Sign up for free")," to get your API key.")))),s.a.createElement("div",{className:"docs-step"},s.a.createElement("div",{className:"docs-step-number"},"2"),s.a.createElement("div",{className:"docs-step-content"},s.a.createElement("h3",null,"Make Your First Request"),s.a.createElement("p",null,"Use any HTTP client to call our API. Here's a simple example:"),s.a.createElement(Ie,{apiKey:t,baseApiUrl:n,showResponse:!0,curlCopyCommandOnly:!0}))),s.a.createElement("div",{className:"docs-step"},s.a.createElement("div",{className:"docs-step-number"},"3"),s.a.createElement("div",{className:"docs-step-content"},s.a.createElement("h3",null,"Checking your usage"),s.a.createElement("p",null,"You can see your current usage, remaining requests, and plan details in your dashboard at"," ",s.a.createElement("a",{href:"/dashboard"},"/dashboard"),"."),s.a.createElement("p",null,"Each API response includes these rate limit headers:"),s.a.createElement("ul",null,s.a.createElement("li",null,s.a.createElement("code",null,"x-ratelimit-limit"),": your maximum requests in the current period"),s.a.createElement("li",null,s.a.createElement("code",null,"x-ratelimit-remaining"),": requests left in the current period"),s.a.createElement("li",null,s.a.createElement("code",null,"x-ratelimit-reset"),": unix timestamp (seconds) when the period resets")))))),s.a.createElement("div",{className:"docs-section docs-section-alt",id:"endpoints"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"docs-section-header"},s.a.createElement("h2",null,"API Endpoints"),s.a.createElement("p",null,"All endpoints return JSON responses. For quick testing you can call the API without an API key (limited). With an API key, include it in the URL.")),s.a.createElement("div",{className:"docs-endpoint-card"},s.a.createElement("div",{className:"endpoint-header"},s.a.createElement("span",{className:"endpoint-method"},"GET"),s.a.createElement("span",{className:"endpoint-label"},"Detect Current IP")),s.a.createElement("div",{className:"endpoint-url-row"},s.a.createElement("code",{className:"endpoint-url"},o),s.a.createElement("button",{className:"endpoint-copy ".concat("detect"===r?"copied":""),onClick:function(){return e.copyToClipboard(o,"detect")}},"detect"===r?"\u2713":"Copy")),s.a.createElement("p",{className:"endpoint-desc"},"Automatically detects and returns location data for the requesting IP address.")),s.a.createElement("div",{className:"docs-endpoint-card"},s.a.createElement("div",{className:"endpoint-header"},s.a.createElement("span",{className:"endpoint-method"},"GET"),s.a.createElement("span",{className:"endpoint-label"},"Lookup Specific IP")),s.a.createElement("div",{className:"endpoint-url-row"},s.a.createElement("code",{className:"endpoint-url"},m),s.a.createElement("button",{className:"endpoint-copy ".concat("lookup"===r?"copied":""),onClick:function(){return e.copyToClipboard(m,"lookup")}},"lookup"===r?"\u2713":"Copy")),s.a.createElement("p",{className:"endpoint-desc"},"Returns location data for a specific IPv4 or IPv6 address.")),s.a.createElement("div",{className:"docs-endpoint-card"},s.a.createElement("div",{className:"endpoint-header"},s.a.createElement("span",{className:"endpoint-method"},"GET"),s.a.createElement("span",{className:"endpoint-label"},"With Include Parameter")),s.a.createElement("div",{className:"endpoint-url-row"},s.a.createElement("code",{className:"endpoint-url"},u),s.a.createElement("button",{className:"endpoint-copy ".concat("include"===r?"copied":""),onClick:function(){return e.copyToClipboard(u,"include")}},"include"===r?"\u2713":"Copy")),s.a.createElement("p",{className:"endpoint-desc"},"Use the ",s.a.createElement("code",null,"include")," parameter to request only specific fields and reduce response size.")))),s.a.createElement("div",{className:"docs-section",id:"parameters"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"docs-section-header"},s.a.createElement("h2",null,"Available Parameters"),s.a.createElement("p",null,"Use the ",s.a.createElement("code",null,"include")," query parameter to select which fields to return. Separate multiple fields with commas.")),s.a.createElement("div",{className:"docs-params-grid"},s.a.createElement("div",{className:"docs-param-category"},s.a.createElement("h4",null,"Location Data"),s.a.createElement("div",{className:"docs-param-list"},s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"city"),s.a.createElement("span",null,'"Brooklyn"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"capital"),s.a.createElement("span",null,'"Washington D.C."')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_name"),s.a.createElement("span",null,'"United States"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_alpha_2"),s.a.createElement("span",null,'"US"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_alpha_3"),s.a.createElement("span",null,'"USA"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_emoji"),s.a.createElement("span",null,'"\ud83c\uddfa\ud83c\uddf8"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_subdivision"),s.a.createElement("span",null,'"New York"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_subdivision_id"),s.a.createElement("span",null,'"NY"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_zip_code"),s.a.createElement("span",null,'"11205"')))),s.a.createElement("div",{className:"docs-param-category"},s.a.createElement("h4",null,"Geographic Data"),s.a.createElement("div",{className:"docs-param-list"},s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"continent_code"),s.a.createElement("span",null,'"NA"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"continent_name"),s.a.createElement("span",null,'"North America"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"location_latitude"),s.a.createElement("span",null,"40.6955")),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"location_longitude"),s.a.createElement("span",null,"-73.9667")),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"time_zone"),s.a.createElement("span",null,'"America/New_York"')))),s.a.createElement("div",{className:"docs-param-category"},s.a.createElement("h4",null,"Additional Data"),s.a.createElement("div",{className:"docs-param-list"},s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"ip"),s.a.createElement("span",null,'"161.185.160.93"')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"ip_version"),s.a.createElement("span",null,"4")),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_eu_member"),s.a.createElement("span",null,"false")),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"country_dialing_code"),s.a.createElement("span",null,'["1"]')),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"currency_code"),s.a.createElement("span",null,'["USD"]')))),s.a.createElement("div",{className:"docs-param-category"},s.a.createElement("h4",null,"Security Data"),s.a.createElement("div",{className:"docs-param-list"},s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"is_proxy"),s.a.createElement("span",null,"false")),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"is_tor"),s.a.createElement("span",null,"false")),s.a.createElement("div",{className:"docs-param"},s.a.createElement("code",null,"proxy_type"),s.a.createElement("span",null,"null"))))))),s.a.createElement("div",{className:"docs-section docs-section-alt",id:"response"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"docs-section-header"},s.a.createElement("h2",null,"Full Response Example"),s.a.createElement("p",null,"Here's a complete API response with all available fields.")),s.a.createElement("div",{className:"docs-response-example"},s.a.createElement("div",{className:"response-header"},s.a.createElement("span",null,"JSON Response"),s.a.createElement("button",{className:"endpoint-copy ".concat("response"===r?"copied":""),onClick:function(){return e.copyToClipboard(JSON.stringify({success:!0,connection:{ip:"161.185.160.93",ip_version:"4"},location:{capital:"Washington D.C.",city:"New York",continent:{code:"NA",name:"North America"},country:{alpha_2:"US",alpha_3:"USA",dialing_code:["1"],emoji:"\ud83c\uddfa\ud83c\uddf8",eu_member:!1,name:"United States",subdivision:"New York",subdivision_id:"NY",zip_code:"10003"},latitude:40.7359,longitude:-73.9904},security:{is_proxy:!1,is_tor:!1,proxy_type:null},time:{zone:"America/New_York"},currency:{code:["USD","USN","USS"]}},null,2),"response")}},"response"===r?"\u2713 Copied":"Copy")),s.a.createElement("pre",{className:"response-body"},"{","\n"," ",s.a.createElement("span",{className:"code-key"},'"success"'),": ",s.a.createElement("span",{className:"code-boolean"},"true"),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"connection"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"ip"'),": ",s.a.createElement("span",{className:"code-string"},'"161.185.160.93"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"ip_version"'),": ",s.a.createElement("span",{className:"code-string"},'"4"'),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"location"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"capital"'),": ",s.a.createElement("span",{className:"code-string"},'"Washington D.C."'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"city"'),": ",s.a.createElement("span",{className:"code-string"},'"New York"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"continent"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"code"'),": ",s.a.createElement("span",{className:"code-string"},'"NA"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"name"'),": ",s.a.createElement("span",{className:"code-string"},'"North America"'),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"country"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"alpha_2"'),": ",s.a.createElement("span",{className:"code-string"},'"US"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"alpha_3"'),": ",s.a.createElement("span",{className:"code-string"},'"USA"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"dialing_code"'),": [",s.a.createElement("span",{className:"code-string"},'"1"'),"],","\n"," ",s.a.createElement("span",{className:"code-key"},'"emoji"'),": ",s.a.createElement("span",{className:"code-string"},'"\ud83c\uddfa\ud83c\uddf8"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"eu_member"'),": ",s.a.createElement("span",{className:"code-boolean"},"false"),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"name"'),": ",s.a.createElement("span",{className:"code-string"},'"United States"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"subdivision"'),": ",s.a.createElement("span",{className:"code-string"},'"New York"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"subdivision_id"'),": ",s.a.createElement("span",{className:"code-string"},'"NY"'),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"zip_code"'),": ",s.a.createElement("span",{className:"code-string"},'"10003"'),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"latitude"'),": ",s.a.createElement("span",{className:"code-number"},"40.7359"),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"longitude"'),": ",s.a.createElement("span",{className:"code-number"},"-73.9904"),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"security"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"is_proxy"'),": ",s.a.createElement("span",{className:"code-boolean"},"false"),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"is_tor"'),": ",s.a.createElement("span",{className:"code-boolean"},"false"),",","\n"," ",s.a.createElement("span",{className:"code-key"},'"proxy_type"'),": ",s.a.createElement("span",{className:"code-null"},"null"),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"time"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"zone"'),": ",s.a.createElement("span",{className:"code-string"},'"America/New_York"'),"\n"," ","}",",","\n"," ",s.a.createElement("span",{className:"code-key"},'"currency"'),": ","{","\n"," ",s.a.createElement("span",{className:"code-key"},'"code"'),": [",s.a.createElement("span",{className:"code-string"},'"USD"'),", ",s.a.createElement("span",{className:"code-string"},'"USN"'),", ",s.a.createElement("span",{className:"code-string"},'"USS"'),"]","\n"," ","}","\n","}")))),s.a.createElement("div",{className:"docs-section",id:"examples"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"docs-section-header"},s.a.createElement("h2",null,"Code Examples"),s.a.createElement("p",null,"Copy and paste these examples to get started quickly in your preferred language.")),s.a.createElement(Ie,{apiKey:t,baseApiUrl:n,showResponse:!1,curlCopyCommandOnly:!0}),s.a.createElement("div",{className:"docs-cta-box"},s.a.createElement("h3",null,"Ready to get started?"),s.a.createElement(s.a.Fragment,null,s.a.createElement("p",null,"Create your free account and start your 30-day free trial."),s.a.createElement("a",{href:"/login",className:"docs-cta-btn"},"Get Your API Key \u2192"))),s.a.createElement("div",{className:"docs-database-cta"},s.a.createElement("h4",null,"Need database dumps for offline or bulk processing?"),s.a.createElement("p",null,"We provide licensed IP geolocation databases in MMDB, CSV, Parquet, and JSONL formats."),s.a.createElement("a",{href:"/database",className:"docs-database-btn"},"Request Database Access \u2192"))))),s.a.createElement(Te,null))}}]),a}(n.Component)),Ve=t(258),Je=function(e){function a(){var e,t;Object(c.a)(this,a);for(var n=arguments.length,s=new Array(n),r=0;r response.json())\n .then(response => {\n if (response.success) {\n if (response.country_eu_member) {\n showGdpr()\n }\n }\n });',exampleAjax1:'$.getJSON("',exampleAjax2:'/detect?include=country_eu_member,ip", function(result){\n if(result.country_eu_member){\n $("div").append(result.ip);\n }\n});',examplePhp1:"$ch = curl_init('",examplePhp2:"/detect?include=country_eu_member');\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n$result = curl_exec($ch);\ncurl_close($ch);\n$response = json_decode($result, true);\necho $response['country_eu_member'];",exampleCurl1:"curl ",exampleCurl2:"/detect?include=country_eu_member",exampleSelected:'{\n country_emoji: "\ud83c\uddfa\ud83c\uddf8",\n country_eu_member: true,\n}',exampleResponse:'{\n connection: {\n ip: "161.185.160.93",\n ip_version: "4"\n },\n currency: {\n code: [\n "USD",\n "USN",\n "USS"\n ]\n },\n location: {\n capital: "Washington D.C.",\n city: "New York",\n continent: {\n code: "NA",\n name: "North America"\n },\n country: {\n alpha_2: "US",\n alpha_3: "USA",\n dialing_code: [\n "1"\n ],\n emoji: "\ud83c\uddfa\ud83c\uddf8",\n eu_member: false,\n name: "United States",\n subdivision: "New York",\n subdivision_id: "NY",\n zip_code: "10003"\n },\n latitude: 40.7359,\n longitude: -73.9904\n },\n security: {\n is_proxy: false,\n is_tor: false,\n proxy_type: null\n },\n success: true,\n time: {\n zone: "America/New_York"\n }\n}'},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Documentation";var e=this.state.baseWebUrl+"/user/apiKey";this.fetch(e)}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var a=this;this.setState({loading:!0}),fetch(e).then((function(e){return e.json()})).then((function(e){e.success&&(console.log("apiKey: "+e.apiKey),a.setState({apiKey:e.apiKey}))})).catch((function(e){console.error(e)})).finally((function(){return a.setState({loading:!1})}))}))},{key:"render",value:function(){return s.a.createElement(Ye,null)}}]),a}(n.Component),Qe=Object(p.g)(Ze),$e=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={loading:!0,status:"loading",message:"Checking status...",baseWebUrl:"https://ip2loc.com"},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this;document.title="Status";var a=E.a.parse(this.props.location.search),t=this.state.baseWebUrl+"/auth/email/signin";fetch(t,{method:"post",headers:{Accept:"application/json"},body:JSON.stringify({token:a.token})}).then((function(e){return e.json()})).then((function(a){if(a.success)e.setState({loading:!1,status:"success",message:"Sign in successful!"});else switch(a.error){case 208:e.setState({loading:!1,status:"warning",message:"Already activated"});break;case 498:e.setState({loading:!1,status:"error",message:"Token not valid, please request a new one."});break;default:e.setState({loading:!1,status:"error",message:"Unknown Error: "+a.error})}})).catch((function(a){console.error(a),e.setState({loading:!1,status:"error",message:"Could not connect to the server."})}))}},{key:"getIcon",value:function(){switch(this.state.status){case"loading":return s.a.createElement(b.a,{icon:"spinner",spin:!0});case"success":return s.a.createElement(b.a,{icon:"check-circle"});case"warning":return s.a.createElement(b.a,{icon:"exclamation-circle"});case"error":return s.a.createElement(b.a,{icon:"times-circle"});default:return s.a.createElement(b.a,{icon:"spinner",spin:!0})}}},{key:"getIconClass",value:function(){switch(this.state.status){case"loading":return"activation-icon loading";case"success":return"activation-icon success";case"warning":return"activation-icon warning";case"error":return"activation-icon error";default:return"activation-icon"}}},{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill"},s.a.createElement("div",{className:"success-page"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"success-card"},s.a.createElement("div",{className:this.getIconClass()},this.getIcon()),s.a.createElement("h1",null,"Status"),s.a.createElement("p",{className:"success-message"},this.state.message))))),s.a.createElement(Te,null))}}]),a}(n.Component),Xe=t(93),ea=Ce(function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="System Status - ip2loc",this.props.publicStatus&&"function"===typeof this.props.publicStatus.requestUptimeHistory&&this.props.publicStatus.requestUptimeHistory(!0)}},{key:"componentWillUnmount",value:function(){this.props.publicStatus&&"function"===typeof this.props.publicStatus.requestUptimeHistory&&this.props.publicStatus.requestUptimeHistory(!1)}},{key:"createFallbackUptimeHistory",value:function(){for(var e=new Date,a=[],t=89;t>=0;t--){var n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()));n.setUTCDate(n.getUTCDate()-t),a.push({date:n.toISOString().slice(0,10),status:"operational"})}var s={period_days:90,uptime_percentage:99.99,days:a};return{api:s,website:s,dashboard:s}}},{key:"mapStatusToServices",value:function(e){var a={api:{name:"API Service",description:"IP Geolocation API endpoints"},website:{name:"Website",description:"Public website"},dashboard:{name:"Dashboard",description:"User dashboard & authentication"}};return Object.entries(e).map((function(e){var t=Object(Xe.a)(e,2),n=t[0],s=t[1],r=a[n];return{key:n,name:r?r.name:n,status:s,description:r?r.description:""}}))}},{key:"getUptimeClass",value:function(e){switch(e){case"operational":return"operational";case"degraded":return"degraded";case"down":return"major";default:return"operational"}}},{key:"formatUptimePercentage",value:function(e){var a="number"===typeof e?e:Number(e);return Number.isFinite(a)?"".concat(a.toFixed(2),"%"):"\u2014"}},{key:"getStatusBadge",value:function(e){switch(e){case"operational":return s.a.createElement("span",{className:"status-item-badge operational"},"Operational");case"degraded":return s.a.createElement("span",{className:"status-item-badge degraded"},"Degraded Performance");case"down":return s.a.createElement("span",{className:"status-item-badge major"},"Major Outage");default:return s.a.createElement("span",{className:"status-item-badge operational"},"Operational")}}},{key:"getAllOperational",value:function(e,a){return e?"operational"===e:(a||[]).every((function(e){return"operational"===e.status}))}},{key:"render",value:function(){var e=this,a=this.props.publicStatus||{},t=a.overall||"operational",n=["operational","degraded","down"].includes(t)?t:"operational",r=a.status||{api:"operational",website:"operational",dashboard:"operational"},l=this.mapStatusToServices(r),c=a.uptimeHistory||this.createFallbackUptimeHistory(),i=a.updatedAt?new Date(a.updatedAt).toLocaleString("de-DE"):(new Date).toLocaleString("de-DE"),o=!0===a.loading&&!a.status,m=this.getAllOperational(n,l);return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"status-hero ".concat(m?"all-operational":"has-issues")},s.a.createElement(f.a,null,s.a.createElement("div",{className:"status-hero-content"},s.a.createElement("div",{className:"status-badge ".concat(m?"operational":"issues")},m?s.a.createElement(s.a.Fragment,null,s.a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor"},s.a.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})),"All Systems Operational"):s.a.createElement(s.a.Fragment,null,s.a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor"},s.a.createElement("path",{fillRule:"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",clipRule:"evenodd"})),"Some Systems Have Issues")),s.a.createElement("h1",{className:"status-title"},"System Status"),s.a.createElement("p",{className:"status-subtitle"},"Current status of all ","ip2loc"," services")))),s.a.createElement("div",{className:"status-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"status-card"},s.a.createElement("div",{className:"status-card-header"},s.a.createElement("h2",null,"Services"),i&&s.a.createElement("span",{className:"status-updated"},"Last updated: ",i)),o?s.a.createElement("div",{className:"status-loading"},s.a.createElement("div",{className:"status-spinner"}),s.a.createElement("span",null,"Checking status...")):s.a.createElement("div",{className:"status-list"},l.map((function(a,t){return s.a.createElement("div",{key:t,className:"status-item"},s.a.createElement("div",{className:"status-item-info"},s.a.createElement("h3",{className:"status-item-name"},a.name),s.a.createElement("p",{className:"status-item-description"},a.description)),e.getStatusBadge(a.status))})))),s.a.createElement("div",{className:"status-card"},s.a.createElement("div",{className:"status-card-header"},s.a.createElement("h2",null,"Uptime History")),s.a.createElement("div",{className:"uptime-bars"},(l||[]).map((function(a){var t=c&&a.key?c[a.key]:null;return t&&Array.isArray(t.days)?s.a.createElement("div",{key:a.key,className:"uptime-row"},s.a.createElement("span",{className:"uptime-label"},a.name),s.a.createElement("div",{className:"uptime-bar-container"},t.days.map((function(a,t){return s.a.createElement("div",{key:t,className:"uptime-day ".concat(e.getUptimeClass(a.status)),title:"".concat(a.date,": ").concat(a.status)})}))),s.a.createElement("span",{className:"uptime-percentage"},e.formatUptimePercentage(t.uptime_percentage))):null}))),s.a.createElement("p",{className:"uptime-legend"},s.a.createElement("span",{className:"legend-item"},s.a.createElement("span",{className:"legend-color operational"})," Operational"),s.a.createElement("span",{className:"legend-item"},s.a.createElement("span",{className:"legend-color degraded"})," Degraded"),s.a.createElement("span",{className:"legend-item"},s.a.createElement("span",{className:"legend-color major"})," Outage"))),s.a.createElement("div",{className:"status-subscribe"},s.a.createElement("h3",null,"Stay Updated"),s.a.createElement("p",null,"Bookmark this page for real-time status updates."))))),s.a.createElement(Te,null))}}]),a}(n.Component)),aa=t(55),ta=t.n(aa),na=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=void 0!==e.cookies.get("session");return t.state={loading:!1,success:!1,error:null,name:"",email:"",company:"",employees:"",monthly_requests:"",message:"",turnstileToken:null,baseWebUrl:"https://ip2loc.com",captchaSiteKey:"0x4AAAAAABuWWtOfbf_-dsn0",isLoggedIn:n},t.handleSubmit=t.handleSubmit.bind(Object(y.a)(t)),t.handleInputChange=t.handleInputChange.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Enterprise Solutions - ip2loc"}},{key:"handleInputChange",value:function(e){var a=e.target,t=a.name,n=a.value;this.setState(Object(Pe.a)({},t,n))}},{key:"handleSubmit",value:function(e){var a=this;if(e.preventDefault(),this.state.isLoggedIn||this.state.turnstileToken){this.setState({loading:!0,error:null});var t={fullName:this.state.name,email:this.state.email,companyName:this.state.company,companySize:this.state.employees,apiRequests:this.state.monthly_requests,message:this.state.message};this.state.isLoggedIn||(t.turnstile=this.state.turnstileToken),fetch(this.state.baseWebUrl+"/user/enterprise",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(t)}).then((function(e){return e.json()})).then((function(e){e.success?a.setState({success:!0}):a.setState({error:e.error||"An error occurred. Please try again."})})).catch((function(e){console.error(e),a.setState({error:"An error occurred. Please try again."})})).finally((function(){return a.setState({loading:!1})}))}else this.setState({error:"Please complete the security check"})}},{key:"render",value:function(){var e=this;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"enterprise-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"enterprise-hero-content"},s.a.createElement("span",{className:"enterprise-badge"},"Enterprise"),s.a.createElement("h1",{className:"enterprise-title"},"Tailored Solutions for",s.a.createElement("br",null),s.a.createElement("span",{className:"gradient-text"},"Enterprise Scale")),s.a.createElement("p",{className:"enterprise-subtitle"},"Custom pricing, dedicated support, and SLA guarantees for organizations processing millions of requests.")))),s.a.createElement("div",{className:"enterprise-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"enterprise-grid"},s.a.createElement("div",{className:"enterprise-benefits"},s.a.createElement("h2",null,"Enterprise Benefits"),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"99.99% SLA Guarantee"),s.a.createElement("p",null,"Enterprise-grade reliability with contractual uptime guarantees and priority incident response."))),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),s.a.createElement("circle",{cx:"9",cy:"7",r:"4"}),s.a.createElement("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),s.a.createElement("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"Dedicated Support"),s.a.createElement("p",null,"Direct access to our engineering team with priority support channels and dedicated account manager."))),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"}),s.a.createElement("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),s.a.createElement("line",{x1:"9",y1:"21",x2:"9",y2:"9"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"Custom Volume Pricing"),s.a.createElement("p",null,"Flexible pricing models designed for high-volume usage with significant cost savings at scale."))),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}),s.a.createElement("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),s.a.createElement("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"Global Infrastructure"),s.a.createElement("p",null,"Multi-region deployment with automatic failover ensures lowest latency worldwide."))),s.a.createElement("div",{className:"enterprise-stats"},s.a.createElement("div",{className:"stat"},s.a.createElement("span",{className:"stat-value"},"<50ms"),s.a.createElement("span",{className:"stat-label"},"Avg Response")),s.a.createElement("div",{className:"stat"},s.a.createElement("span",{className:"stat-value"},"99.99%"),s.a.createElement("span",{className:"stat-label"},"Uptime")),s.a.createElement("div",{className:"stat"},s.a.createElement("span",{className:"stat-value"},"Global"),s.a.createElement("span",{className:"stat-label"},"Coverage")))),s.a.createElement("div",{className:"enterprise-form-container"},this.state.success?s.a.createElement("div",{className:"enterprise-success"},s.a.createElement("div",{className:"success-icon"},s.a.createElement("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),s.a.createElement("polyline",{points:"22 4 12 14.01 9 11.01"}))),s.a.createElement("h3",null,"Thank You!"),s.a.createElement("p",null,"Our enterprise team will contact you within 24 hours to discuss your requirements.")):s.a.createElement("form",{className:"enterprise-form",onSubmit:this.handleSubmit},s.a.createElement("h2",null,"Contact Our Sales Team"),s.a.createElement("p",{className:"form-subtitle"},"Tell us about your needs and we'll create a custom solution."),this.state.error&&s.a.createElement("div",{className:"form-error"},this.state.error),s.a.createElement("div",{className:"form-row"},s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"name"},"Full Name *"),s.a.createElement("input",{type:"text",id:"name",name:"name",value:this.state.name,onChange:this.handleInputChange,required:!0,placeholder:"John Smith"})),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"email"},"Work Email *"),s.a.createElement("input",{type:"email",id:"email",name:"email",value:this.state.email,onChange:this.handleInputChange,required:!0,placeholder:"john@company.com"}))),s.a.createElement("div",{className:"form-row"},s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"company"},"Company Name *"),s.a.createElement("input",{type:"text",id:"company",name:"company",value:this.state.company,onChange:this.handleInputChange,required:!0,placeholder:"Acme Corporation"})),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"employees"},"Company Size"),s.a.createElement("select",{id:"employees",name:"employees",value:this.state.employees,onChange:this.handleInputChange},s.a.createElement("option",{value:""},"Select..."),s.a.createElement("option",{value:"50-200"},"50-200 employees"),s.a.createElement("option",{value:"200-500"},"200-500 employees"),s.a.createElement("option",{value:"500-1000"},"500-1,000 employees"),s.a.createElement("option",{value:"1000-5000"},"1,000-5,000 employees"),s.a.createElement("option",{value:"5000+"},"5,000+ employees")))),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"monthly_requests"},"Estimated Monthly API Requests"),s.a.createElement("select",{id:"monthly_requests",name:"monthly_requests",value:this.state.monthly_requests,onChange:this.handleInputChange},s.a.createElement("option",{value:""},"Select..."),s.a.createElement("option",{value:"3-10M"},"3-10 Million"),s.a.createElement("option",{value:"10-50M"},"10-50 Million"),s.a.createElement("option",{value:"50-100M"},"50-100 Million"),s.a.createElement("option",{value:"100M+"},"100+ Million"))),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"message"},"How can we help? *"),s.a.createElement("textarea",{id:"message",name:"message",value:this.state.message,onChange:this.handleInputChange,required:!0,rows:"4",placeholder:"Tell us about your use case, technical requirements, or any questions..."})),!this.state.isLoggedIn&&s.a.createElement("div",{style:{display:"flex",justifyContent:"center",margin:"16px 0"}},s.a.createElement(ta.a,{sitekey:this.state.captchaSiteKey,onVerify:function(a){return e.setState({turnstileToken:a})},onExpire:function(){return e.setState({turnstileToken:null})},onError:function(){return e.setState({turnstileToken:null})},options:{appearance:"interaction-only",theme:"auto",size:"compact",retry:"auto",refreshExpired:"auto",action:"enterprise"}})),s.a.createElement("button",{type:"submit",className:"btn-enterprise-submit",disabled:this.state.loading},this.state.loading?s.a.createElement(s.a.Fragment,null,s.a.createElement("span",{className:"spinner"}),"Sending..."):s.a.createElement(s.a.Fragment,null,"Contact Sales",s.a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),s.a.createElement("polyline",{points:"12 5 19 12 12 19"})))),s.a.createElement("p",{className:"form-privacy"},"By submitting, you agree to our ",s.a.createElement("a",{href:"/dataprotection"},"Privacy Policy"),"."))))))),s.a.createElement(Te,null))}}]),a}(n.Component),sa=Object(K.b)(na),ra=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=void 0!==e.cookies.get("session");return t.state={loading:!1,success:!1,error:null,name:"",email:"",company:"",desiredFormat:"",intendedUseCase:"",updateFrequency:"",estimatedVolume:"",message:"",turnstileToken:null,baseWebUrl:"https://ip2loc.com",captchaSiteKey:"0x4AAAAAABuWWtOfbf_-dsn0",isLoggedIn:n},t.handleSubmit=t.handleSubmit.bind(Object(y.a)(t)),t.handleInputChange=t.handleInputChange.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="IP Geolocation Database - ip2loc"}},{key:"handleInputChange",value:function(e){var a=e.target,t=a.name,n=a.value;this.setState(Object(Pe.a)({},t,n))}},{key:"handleSubmit",value:function(e){var a=this;if(e.preventDefault(),this.state.isLoggedIn||this.state.turnstileToken){this.setState({loading:!0,error:null});var t={fullName:this.state.name,email:this.state.email,companyName:this.state.company,leadType:"database",requestedFormat:this.state.desiredFormat,intendedUseCase:this.state.intendedUseCase,updateFrequency:this.state.updateFrequency,estimatedVolume:this.state.estimatedVolume,message:this.state.message};this.state.isLoggedIn||(t.turnstile=this.state.turnstileToken),fetch(this.state.baseWebUrl+"/user/enterprise",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(t)}).then((function(e){return e.json()})).then((function(e){e.success?a.setState({success:!0}):a.setState({error:e.error||"An error occurred. Please try again."})})).catch((function(e){console.error(e),a.setState({error:"An error occurred. Please try again."})})).finally((function(){return a.setState({loading:!1})}))}else this.setState({error:"Please complete the security check"})}},{key:"render",value:function(){var e=this;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"enterprise-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"enterprise-hero-content"},s.a.createElement("span",{className:"enterprise-badge"},"Database"),s.a.createElement("h1",{className:"enterprise-title"},"IP Geolocation",s.a.createElement("br",null),s.a.createElement("span",{className:"gradient-text"},"Database Dumps")),s.a.createElement("p",{className:"enterprise-subtitle"},"Licensed database access for teams that need local processing, batch enrichment, or offline deployment. Available in multiple formats via direct contact.")))),s.a.createElement("div",{className:"enterprise-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"enterprise-grid"},s.a.createElement("div",{className:"enterprise-benefits"},s.a.createElement("h2",null,"Why Database Dumps?"),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("rect",{x:"2",y:"2",width:"20",height:"8",rx:"2",ry:"2"}),s.a.createElement("rect",{x:"2",y:"14",width:"20",height:"8",rx:"2",ry:"2"}),s.a.createElement("line",{x1:"6",y1:"6",x2:"6.01",y2:"6"}),s.a.createElement("line",{x1:"6",y1:"18",x2:"6.01",y2:"18"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"Offline & Air-Gapped Processing"),s.a.createElement("p",null,"Process IP data in secure, disconnected environments without API calls. Ideal for compliance-sensitive infrastructure."))),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}),s.a.createElement("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),s.a.createElement("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"Bulk Data Enrichment"),s.a.createElement("p",null,"Enrich large datasets in your data warehouse or analytics platform with IP geolocation data, without API rate limits."))),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"Internal Analytics"),s.a.createElement("p",null,"Power your internal BI tools and dashboards with IP geolocation context, stored locally within your infrastructure."))),s.a.createElement("div",{className:"benefit-card"},s.a.createElement("div",{className:"benefit-icon"},s.a.createElement("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("circle",{cx:"12",cy:"12",r:"10"}),s.a.createElement("polyline",{points:"12 6 12 12 16 14"}))),s.a.createElement("div",{className:"benefit-text"},s.a.createElement("h3",null,"Edge & On-Prem Deployment"),s.a.createElement("p",null,"Deploy geolocation data at the edge or on-premises for latency-critical applications where API round-trips aren't viable."))),s.a.createElement("div",{className:"enterprise-stats"},s.a.createElement("div",{className:"stat"},s.a.createElement("span",{className:"stat-value"},"MMDB"),s.a.createElement("span",{className:"stat-label"},"Binary Database Format")),s.a.createElement("div",{className:"stat"},s.a.createElement("span",{className:"stat-value"},"CSV"),s.a.createElement("span",{className:"stat-label"},"CSV Export")),s.a.createElement("div",{className:"stat"},s.a.createElement("span",{className:"stat-value"},"JSONL"),s.a.createElement("span",{className:"stat-label"},"JSON Lines Export")),s.a.createElement("div",{className:"stat"},s.a.createElement("span",{className:"stat-value"},"Parquet"),s.a.createElement("span",{className:"stat-label"},"Columnar Format")))),s.a.createElement("div",{className:"enterprise-form-container"},this.state.success?s.a.createElement("div",{className:"enterprise-success"},s.a.createElement("div",{className:"success-icon"},s.a.createElement("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}),s.a.createElement("polyline",{points:"22 4 12 14.01 9 11.01"}))),s.a.createElement("h3",null,"Thank You!"),s.a.createElement("p",null,"Our team will contact you within 24 hours to discuss format options, update cadence, and licensing details.")):s.a.createElement("form",{className:"enterprise-form",onSubmit:this.handleSubmit},s.a.createElement("h2",null,"Request Database Access"),s.a.createElement("p",{className:"form-subtitle"},"Tell us about your requirements and we'll create a tailored licensing offer."),this.state.error&&s.a.createElement("div",{className:"form-error"},this.state.error),s.a.createElement("div",{className:"form-row"},s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"name"},"Full Name *"),s.a.createElement("input",{type:"text",id:"name",name:"name",value:this.state.name,onChange:this.handleInputChange,required:!0,placeholder:"John Smith"})),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"email"},"Work Email *"),s.a.createElement("input",{type:"email",id:"email",name:"email",value:this.state.email,onChange:this.handleInputChange,required:!0,placeholder:"john@company.com"}))),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"company"},"Company Name *"),s.a.createElement("input",{type:"text",id:"company",name:"company",value:this.state.company,onChange:this.handleInputChange,required:!0,placeholder:"Acme Corporation"})),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"desiredFormat"},"Desired Format"),s.a.createElement("select",{id:"desiredFormat",name:"desiredFormat",value:this.state.desiredFormat,onChange:this.handleInputChange},s.a.createElement("option",{value:""},"Select format..."),s.a.createElement("option",{value:"mmdb"},"MMDB"),s.a.createElement("option",{value:"csv"},"CSV"),s.a.createElement("option",{value:"jsonl"},"JSONL"),s.a.createElement("option",{value:"parquet"},"Parquet"),s.a.createElement("option",{value:"custom"},"Custom format"))),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"intendedUseCase"},"Intended Use Case *"),s.a.createElement("select",{id:"intendedUseCase",name:"intendedUseCase",value:this.state.intendedUseCase,onChange:this.handleInputChange,required:!0},s.a.createElement("option",{value:""},"Select use case..."),s.a.createElement("option",{value:"offline-processing"},"Offline / Air-gapped processing"),s.a.createElement("option",{value:"bulk-enrichment"},"Bulk data enrichment"),s.a.createElement("option",{value:"data-warehouse"},"Data warehouse / Analytics"),s.a.createElement("option",{value:"internal-analytics"},"Internal analytics"),s.a.createElement("option",{value:"edge-deployment"},"Edge / On-prem deployment"),s.a.createElement("option",{value:"other"},"Other"))),s.a.createElement("div",{className:"form-row"},s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"updateFrequency"},"Update Frequency"),s.a.createElement("select",{id:"updateFrequency",name:"updateFrequency",value:this.state.updateFrequency,onChange:this.handleInputChange},s.a.createElement("option",{value:""},"Select..."),s.a.createElement("option",{value:"hourly"},"Hourly"),s.a.createElement("option",{value:"daily"},"Daily"),s.a.createElement("option",{value:"weekly"},"Weekly"),s.a.createElement("option",{value:"monthly"},"Monthly"),s.a.createElement("option",{value:"quarterly"},"Quarterly"),s.a.createElement("option",{value:"on-demand"},"On-demand / Static"))),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"estimatedVolume"},"Estimated Record Volume"),s.a.createElement("select",{id:"estimatedVolume",name:"estimatedVolume",value:this.state.estimatedVolume,onChange:this.handleInputChange},s.a.createElement("option",{value:""},"Select..."),s.a.createElement("option",{value:"small"},"Under 1M records"),s.a.createElement("option",{value:"medium"},"1M - 10M records"),s.a.createElement("option",{value:"large"},"10M - 100M records"),s.a.createElement("option",{value:"enterprise"},"100M+ records")))),s.a.createElement("div",{className:"form-group-enterprise"},s.a.createElement("label",{htmlFor:"message"},"Additional Requirements *"),s.a.createElement("textarea",{id:"message",name:"message",value:this.state.message,onChange:this.handleInputChange,required:!0,rows:"4",placeholder:"Describe your technical requirements, deployment environment, or any specific needs..."})),!this.state.isLoggedIn&&s.a.createElement("div",{style:{display:"flex",justifyContent:"center",margin:"16px 0"}},s.a.createElement(ta.a,{sitekey:this.state.captchaSiteKey,onVerify:function(a){return e.setState({turnstileToken:a})},onExpire:function(){return e.setState({turnstileToken:null})},onError:function(){return e.setState({turnstileToken:null})},options:{appearance:"interaction-only",theme:"auto",size:"compact",retry:"auto",refreshExpired:"auto",action:"database"}})),s.a.createElement("button",{type:"submit",className:"btn-enterprise-submit",disabled:this.state.loading},this.state.loading?s.a.createElement(s.a.Fragment,null,s.a.createElement("span",{className:"spinner"}),"Sending..."):s.a.createElement(s.a.Fragment,null,"Request Database Access",s.a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),s.a.createElement("polyline",{points:"12 5 19 12 12 19"})))),s.a.createElement("p",{className:"form-privacy"},"By submitting, you agree to our ",s.a.createElement("a",{href:"/dataprotection"},"Privacy Policy"),"."))))))),s.a.createElement(Te,null))}}]),a}(n.Component),la=Object(K.b)(ra);function ca(e,a){return console.log("getTargetSite:",e.type?e.type:"empty",a||"empty"),a?"/changeplan?plan="+e.key:(e.amount,"/changeplan?plan="+e.key)}var ia=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=e.cookies;return t.state={baseWebUrl:"https://ip2loc.com",plans:[],current_plan:"",session:void 0!==n.get("session")},t.handleEnterpriseClick=t.handleEnterpriseClick.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){this.fetchPlans()}},{key:"fetchPlans",value:function(){var e=this;console.log("--fetch--"+this.state.baseWebUrl+"/plans"),fetch(this.state.baseWebUrl+"/plans",{method:"POST"}).then((function(e){return e.json()})).then((function(a){a.success?(e.setState({plans:a.plans}),e.setState({current_plan:a.current_plan})):console.log("--error--")}))}}]),Object(m.a)(a,[{key:"handleEnterpriseClick",value:function(){this.props.history.push("/enterprise")}},{key:"getFeatures",value:function(e,a){var t=["All data points included","HTTPS encryption","JSON & XML response"];return[].concat(t,0===a?["Email support"]:1===a?["Priority support"]:2===a?["Priority support"]:["Dedicated support"])}},{key:"getButtonText",value:function(e){return"0"===e.amount?"Start Free":(e.trial,"Get Started")}},{key:"getPricePeriodShort",value:function(e){var a=(e||"").toLowerCase();return"month"===a?"mo":"year"===a?"yr":"day"===a?"day":a||"mo"}},{key:"render",value:function(){var e=this;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,{loggedInOnly:this.props.loggedInOnly}),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"pricing-section-v2"},s.a.createElement("div",{className:"container"},s.a.createElement("div",{className:"pricing-header-v2"},this.props.loggedInOnly&&s.a.createElement("h1",null,"Select Plan"),s.a.createElement("span",{className:"pricing-label"},"Pricing"),s.a.createElement("h2",{className:"pricing-title-v2"},"Simple, Transparent Pricing"),s.a.createElement("p",{className:"pricing-subtitle-v2"},"Start free and scale as you grow. No hidden fees.")),s.a.createElement("div",{className:"pricing-grid-v2"},this.state.plans.map((function(a,t){return s.a.createElement("div",{className:"pricing-card-v2 ".concat(2===t?"popular":""),key:a.key||t},2===t&&s.a.createElement("div",{className:"popular-badge"},"Most Popular"),s.a.createElement("div",{className:"plan-name"},a.title),s.a.createElement("div",{className:"plan-price"},s.a.createElement("span",{className:"price-currency"},a.symbol),s.a.createElement("span",{className:"price-amount"},e.props.loggedInOnly||"0"===a.trial?a.amount:0),s.a.createElement("span",{className:"price-period"},"/",e.getPricePeriodShort(a.time))),s.a.createElement("div",{className:"plan-then-price"},e.props.loggedInOnly||"0"===a.trial||"0"===a.amount?s.a.createElement(s.a.Fragment,null,"\xa0"):s.a.createElement(s.a.Fragment,null,"then ",a.symbol,a.amount,"/",e.getPricePeriodShort(a.time))),s.a.createElement("div",{className:"plan-requests"},a.description),s.a.createElement("ul",{className:"plan-features"},e.getFeatures(a,t).map((function(e,a){return s.a.createElement("li",{key:a},s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,e))}))),s.a.createElement("a",{href:ca(a,e.props.current_plan),id:"plan-"+a.key,className:"plan-button ".concat(2===t?"primary":"secondary")},e.getButtonText(a)))})),s.a.createElement("div",{className:"pricing-card-v2 enterprise"},s.a.createElement("div",{className:"enterprise-badge-card"},"Enterprise"),s.a.createElement("div",{className:"plan-name"},"Enterprise"),s.a.createElement("div",{className:"plan-price enterprise-price"},s.a.createElement("span",{className:"price-custom"},"Custom")),s.a.createElement("div",{className:"plan-then-price"},"\xa0"),s.a.createElement("div",{className:"plan-requests"},"API volume or database access"),s.a.createElement("ul",{className:"plan-features"},s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"All data points included")),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"99.99% SLA guarantee")),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"Dedicated account manager")),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"Custom volume pricing")),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"Priority support 24/7")),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"Database licensing available"))),s.a.createElement("button",{onClick:this.handleEnterpriseClick,className:"plan-button enterprise-button"},"Contact us")))))),s.a.createElement(Te,null))}}]),a}(n.Component),oa=Object(p.g)(Object(K.b)(ia)),ma=function(e){function a(){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).apply(this,arguments))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Pricing"}},{key:"render",value:function(){return s.a.createElement(oa,{loggedInOnly:!1})}}]),a}(n.Component),ua=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={url:"https://ip2loc.com"},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Terms and Conditions - ip2loc"}},{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Legal"),s.a.createElement("h1",{className:"page-title"},"Terms and Conditions"),s.a.createElement("p",{className:"page-subtitle"},"Please read these terms carefully before using our services.")))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-content-card"},s.a.createElement("p",null,"These terms and conditions outline the rules and regulations for the use of ","ip2loc","'s Website and API Services."),s.a.createElement("p",null,"By accessing this website we assume you accept these terms and conditions in full. Do not continue to use ","ip2loc","'s website if you do not accept all of the terms and conditions stated on this page."),s.a.createElement("h2",null,"Definitions"),s.a.createElement("p",null,'The following terminology applies to these Terms and Conditions, Privacy Statement and Disclaimer Notice and any or all Agreements: "Client", "You" and "Your" refers to you, the person accessing this website and accepting the Company\'s terms and conditions. "The Company", "Ourselves", "We", "Our" and "Us", refers to our Company. "Party", "Parties", or "Us", refers to both the Client and ourselves.'),s.a.createElement("h2",null,"Cookies"),s.a.createElement("p",null,"We employ the use of cookies. By using ","ip2loc","'s website you consent to the use of cookies in accordance with ","ip2loc","'s privacy policy."),s.a.createElement("p",null,"Most modern interactive websites use cookies to retrieve user details for each visit. Cookies are used in some areas of our site to enable the functionality of this area and ease of use for visitors."),s.a.createElement("h2",null,"License"),s.a.createElement("p",null,"Unless otherwise stated, ","ip2loc"," and/or its licensors own the intellectual property rights for all material on ","ip2loc",". All intellectual property rights are reserved."),s.a.createElement("p",null,"You must not:"),s.a.createElement("ul",null,s.a.createElement("li",null,"Republish material from ","ip2loc"),s.a.createElement("li",null,"Sell, rent or sub-license material from ","ip2loc"),s.a.createElement("li",null,"Reproduce, duplicate or copy material from ","ip2loc"),s.a.createElement("li",null,"Redistribute content from ","ip2loc"," (unless content is specifically made for redistribution)")),s.a.createElement("h2",null,"API Usage"),s.a.createElement("p",null,"Use of our API is subject to rate limits and fair use policies. Excessive use or abuse of the API may result in temporary or permanent suspension of access."),s.a.createElement("ul",null,s.a.createElement("li",null,"API keys are for your use only and should not be shared"),s.a.createElement("li",null,"You are responsible for all activity under your API key"),s.a.createElement("li",null,"We reserve the right to modify API functionality with reasonable notice")),s.a.createElement("h2",null,"Hyperlinking to our Content"),s.a.createElement("p",null,"The following organizations may link to our website without prior written approval:"),s.a.createElement("ul",null,s.a.createElement("li",null,"Government agencies"),s.a.createElement("li",null,"Search engines"),s.a.createElement("li",null,"News organizations"),s.a.createElement("li",null,"Online directory distributors")),s.a.createElement("h2",null,"Reservation of Rights"),s.a.createElement("p",null,"We reserve the right at any time and in its sole discretion to request that you remove all links or any particular link to our website. You agree to immediately remove all links to our website upon such request."),s.a.createElement("h2",null,"Content Liability"),s.a.createElement("p",null,"We shall have no responsibility or liability for any content appearing on your website. You agree to indemnify and defend us against all claims arising out of or based upon your website."),s.a.createElement("h2",null,"Disclaimer"),s.a.createElement("p",null,"To the maximum extent permitted by applicable law, we exclude all representations, warranties and conditions relating to our website and the use of this website."),s.a.createElement("p",null,"Nothing in this disclaimer will:"),s.a.createElement("ul",null,s.a.createElement("li",null,"Limit or exclude our or your liability for death or personal injury resulting from negligence"),s.a.createElement("li",null,"Limit or exclude our or your liability for fraud or fraudulent misrepresentation"),s.a.createElement("li",null,"Limit any of our or your liabilities in any way that is not permitted under applicable law")),s.a.createElement("p",null,"To the extent that the website and the information and services on the website are provided free of charge, we will not be liable for any loss or damage of any nature."))))),s.a.createElement(Te,null))}}]),a}(n.Component),da=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="FAQ - ip2loc"}}]),Object(m.a)(a,[{key:"render",value:function(){var e=[{q:"What happens if my volume is exceeded?",a:"An email will be sent to alert you when you reach 75% of your limit and when you reach 100%. You can upgrade your plan at any time to get more requests."},{q:"How many API requests can ip2loc handle?",a:"We scale based on demand. If you expect higher volume, contact us and we\u2019ll help you validate fit and choose an appropriate plan."},{q:"Can I cancel anytime?",a:"Yes. You can upgrade, downgrade, or cancel your subscription at any time. There are no long-term contracts or cancellation fees."},{q:"What can I do if I require a larger volume?",a:"Contact our support team and we will assist you in finding a suitable enterprise plan tailored to your needs."},{q:"Where can I see uptime and recent history?",a:s.a.createElement(s.a.Fragment,null,"We publish live uptime and recent history on our ",s.a.createElement("a",{href:"/system-status"},"System Status")," page.")},{q:"How often is your database updated?",a:s.a.createElement(s.a.Fragment,null,"Update frequency depends on the data field and its upstream source: some inputs can refresh multiple times per day, others daily, and some change less frequently. For performance, certain lookups may be cached with a TTL, so changes may take some time to propagate. See also ",s.a.createElement("a",{href:"/company"},"Company"),".")},{q:"Where does your data come from?",a:s.a.createElement(s.a.Fragment,null,"We combine multiple sources (depending on field), including public registries and other upstream datasets, and reconcile them to improve coverage and consistency. See ",s.a.createElement("a",{href:"/company"},"Company")," for a high-level overview.")}],a=[{q:"Do you offer database dumps?",a:s.a.createElement(s.a.Fragment,null,"Yes. We provide licensed IP geolocation database access in MMDB, CSV, Parquet, and JSONL formats via direct contact and assisted onboarding. Reach out via our ",s.a.createElement("a",{href:"/database"},"database page")," or ",s.a.createElement("a",{href:"/enterprise"},"enterprise contact")," to discuss formats, update cadence, and licensing.")},{q:"How does IP geolocation technology work?",a:"IP geolocation works by mapping IP addresses to geographic locations using a combination of data sources including regional internet registries, ISP data, and user-contributed information."},{q:"How accurate is the geolocation data?",a:"Accuracy varies by country, region, and IP type (e.g. mobile, VPNs, proxies). Country-level tends to be more reliable than city-level. For critical workflows, we recommend testing with your traffic."},{q:"How can businesses use geolocation for targeted advertising?",a:"Businesses can use geolocation to target advertising to specific geographic regions, personalize content based on location, and deliver region-specific offers and promotions."},{q:"What is geotargeting?",a:"Geotargeting involves delivering different content or advertisements to users based on their geographic location, enabling personalized experiences and localized marketing campaigns."},{q:"How can geolocation be used for fraud prevention?",a:"By comparing the location of a user's IP address with their billing address or usual login locations, businesses can detect suspicious activity and prevent fraudulent transactions."},{q:"What data points are available in the API response?",a:"Depending on plan and availability, responses can include country, city/region, latitude/longitude, timezone, currency, and network context (e.g. ASN/ISP). Some security-related signals may be available depending on the dataset."}];return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Support"),s.a.createElement("h1",{className:"page-title"},"Frequently Asked Questions"),s.a.createElement("p",{className:"page-subtitle"},"Find answers to common questions about our API, billing, and technical implementation.")))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"faq-list"},e.map((function(e,a){return s.a.createElement("div",{className:"faq-item",key:"general-".concat(a)},s.a.createElement("div",{className:"faq-question"},s.a.createElement("div",{className:"faq-icon"},"Q"),s.a.createElement("h3",null,e.q)),s.a.createElement("div",{className:"faq-answer"},s.a.createElement("p",null,e.a)))})),a.map((function(e,a){return s.a.createElement("div",{className:"faq-item",key:"geocoder-".concat(a)},s.a.createElement("div",{className:"faq-question"},s.a.createElement("div",{className:"faq-icon"},"Q"),s.a.createElement("h3",null,e.q)),s.a.createElement("div",{className:"faq-answer"},s.a.createElement("p",null,e.a)))}))),s.a.createElement("div",{className:"docs-cta-box",style:{marginTop:"48px"}},s.a.createElement("h3",null,"Still have questions?"),s.a.createElement("p",null,"Our support team is here to help you with any questions."),s.a.createElement("a",{href:"/contact",className:"docs-cta-btn"},"Contact Support \u2192"))))),s.a.createElement(Te,null))}}]),a}(n.Component),pa=t(82),ha=t(75),Ea=t.n(ha),ga=t(116),ya=function(e){function a(e){var t;return Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).state={baseApiUrl:"https://ip2loc.com",errorMessage:"",loading:!1,redirect:!1},t.submit=t.submit.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"submit",value:function(){var e=Object(ga.a)(Ea.a.mark((function e(a){var t,n,s=this;return Ea.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.setState({errorMessage:""}),e.next=3,this.props.stripe.createToken({name:"Name"});case 3:if(t=e.sent,null==(n=t.token)){e.next=9;break}return this.setState({loading:!0}),e.next=9,fetch(this.state.baseApiUrl+"/user/charge",{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify({token:n.id,paymentId:this.props.paymentId})}).then((function(e){return e.json()})).then((function(e){e.success?(console.log("success: "+e.success),console.log("redirect_to_url: "+e.redirect_to_url),e.redirect_to_url?(s.setState({redirect:!0}),window.location.href=e.redirect_to_url):e.plan_changed?s.props.history.push("/planchangedsuccess?plan="+e.planKey):s.props.history.push("/registrationsuccess?plan="+e.planKey+"&activate=true")):s.setState({errorMessage:e.detail})})).catch((function(e){return console.error(e)})).finally((function(){s.setState({loading:s.state.redirect})}));case 9:case"end":return e.stop()}}),e,this)})));return function(a){return e.apply(this,arguments)}}()},{key:"render",value:function(){return s.a.createElement("div",{className:"checkout"},s.a.createElement(pa.CardElement,{id:"cardElement",style:{base:{fontSize:"18px"}},className:te()("cardCss.StripeElement")}),this.state.errorMessage?s.a.createElement(D.a,{color:"danger"},this.state.errorMessage):"",s.a.createElement(v.a,{color:"primary",block:!0,className:"float-lg-left float-left",disabled:this.state.loading,id:"buttonSubmit",onClick:this.submit},s.a.createElement("span",null,this.state.loading?s.a.createElement(b.a,{icon:"spinner",spin:!0}):"Continue \xbb")))}}]),a}(n.Component),fa=Object(p.g)(Object(pa.injectStripe)(ya)),va=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={baseApiUrl:"https://api.ip2loc.com",baseWebUrl:"https://ip2loc.com",apiKey:"pk_live_2JJ2KOurc4CFf56BUcc5pdDl00eDMqRrm4",tax:0,amountTax:0,amountTotal:0,processing:!1,errorMessage:""},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement("div",{className:"checkout-card"},s.a.createElement("div",{className:"checkout-card-body"},s.a.createElement(pa.StripeProvider,{apiKey:this.state.apiKey},s.a.createElement("div",{className:"addCardDetails"},s.a.createElement("h2",{id:"addCardDetails"},void 0===this.state.signupWithPlanSelected?"Update":"Add"," Your Card Details"),s.a.createElement("small",null,"We use Stripe's secure and encrypted platform for all transactions."),s.a.createElement("br",null),s.a.createElement("br",null),s.a.createElement("img",{src:"../img/powered_by_stripe.svg",alt:"Logo",align:"left"}),s.a.createElement("br",null),s.a.createElement(pa.Elements,null,s.a.createElement(fa,{paymentId:this.props.paymentId})))),s.a.createElement("br",null),s.a.createElement("div",{className:"text-center"},s.a.createElement("small",null,"This ordering process is carried out by our payment service provider Stripe.")),s.a.createElement("div",{className:"text-center additional"},s.a.createElement("a",{href:"https://stripe.com/legal/ssa",target:"_blank",rel:"noopener noreferrer"},s.a.createElement("small",null,"Services Agreement")),s.a.createElement("span",null," | "),s.a.createElement("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer"},s.a.createElement("small",null,"Privacy Policy")))))}}]),a}(n.Component),ba=t(229),Na=[["Afghanistan","AF"],["\xc5land Islands","AX"],["Albania","AL"],["Algeria","DZ"],["American Samoa","AS"],["Andorra","AD"],["Angola","AO"],["Anguilla","AI"],["Antarctica","AQ"],["Antigua and Barbuda","AG"],["Argentina","AR"],["Armenia","AM"],["Aruba","AW"],["Australia","AU"],["Austria","AT"],["Azerbaijan","AZ"],["Bahamas","BS"],["Bahrain","BH"],["Bangladesh","BD"],["Barbados","BB"],["Belarus","BY"],["Belgium","BE"],["Belize","BZ"],["Benin","BJ"],["Bermuda","BM"],["Bhutan","BT"],["Bolivia, Plurinational State of","BO"],["Bonaire, Sint Eustatius and Saba","BQ"],["Bosnia and Herzegovina","BA"],["Botswana","BW"],["Bouvet Island","BV"],["Brazil","BR"],["British Indian Ocean Territory","IO"],["Brunei Darussalam","BN"],["Bulgaria","BG"],["Burkina Faso","BF"],["Burundi","BI"],["Cambodia","KH"],["Cameroon","CM"],["Canada","CA"],["Cape Verde","CV"],["Cayman Islands","KY"],["Central African Republic","CF"],["Chad","TD"],["Chile","CL"],["China","CN"],["Christmas Island","CX"],["Cocos (Keeling) Islands","CC"],["Colombia","CO"],["Comoros","KM"],["Congo","CG"],["Congo, the Democratic Republic of the","CD"],["Cook Islands","CK"],["Costa Rica","CR"],["C\xf4te d'Ivoire","CI"],["Croatia","HR"],["Cuba","CU"],["Cura\xe7ao","CW"],["Cyprus","CY"],["Czech Republic","CZ"],["Denmark","DK"],["Djibouti","DJ"],["Dominica","DM"],["Dominican Republic","DO"],["Ecuador","EC"],["Egypt","EG"],["El Salvador","SV"],["Equatorial Guinea","GQ"],["Eritrea","ER"],["Estonia","EE"],["Ethiopia","ET"],["Falkland Islands (Malvinas)","FK"],["Faroe Islands","FO"],["Fiji","FJ"],["Finland","FI"],["France","FR"],["French Guiana","GF"],["French Polynesia","PF"],["French Southern Territories","TF"],["Gabon","GA"],["Gambia","GM"],["Georgia","GE"],["Germany","DE"],["Ghana","GH"],["Gibraltar","GI"],["Greece","GR"],["Greenland","GL"],["Grenada","GD"],["Guadeloupe","GP"],["Guam","GU"],["Guatemala","GT"],["Guernsey","GG"],["Guinea","GN"],["Guinea-Bissau","GW"],["Guyana","GY"],["Haiti","HT"],["Heard Island and McDonald Islands","HM"],["Holy See (Vatican City State)","VA"],["Honduras","HN"],["Hong Kong","HK"],["Hungary","HU"],["Iceland","IS"],["India","IN"],["Indonesia","ID"],["Iran, Islamic Republic of","IR"],["Iraq","IQ"],["Ireland","IE"],["Isle of Man","IM"],["Israel","IL"],["Italy","IT"],["Jamaica","JM"],["Japan","JP"],["Jersey","JE"],["Jordan","JO"],["Kazakhstan","KZ"],["Kenya","KE"],["Kiribati","KI"],["Korea, Democratic People's Republic of","KP"],["Korea, Republic of","KR"],["Kuwait","KW"],["Kyrgyzstan","KG"],["Lao People's Democratic Republic","LA"],["Latvia","LV"],["Lebanon","LB"],["Lesotho","LS"],["Liberia","LR"],["Libya","LY"],["Liechtenstein","LI"],["Lithuania","LT"],["Luxembourg","LU"],["Macao","MO"],["Macedonia, the Former Yugoslav Republic of","MK"],["Madagascar","MG"],["Malawi","MW"],["Malaysia","MY"],["Maldives","MV"],["Mali","ML"],["Malta","MT"],["Marshall Islands","MH"],["Martinique","MQ"],["Mauritania","MR"],["Mauritius","MU"],["Mayotte","YT"],["Mexico","MX"],["Micronesia, Federated States of","FM"],["Moldova, Republic of","MD"],["Monaco","MC"],["Mongolia","MN"],["Montenegro","ME"],["Montserrat","MS"],["Morocco","MA"],["Mozambique","MZ"],["Myanmar","MM"],["Namibia","NA"],["Nauru","NR"],["Nepal","NP"],["Netherlands","NL"],["New Caledonia","NC"],["New Zealand","NZ"],["Nicaragua","NI"],["Niger","NE"],["Nigeria","NG"],["Niue","NU"],["Norfolk Island","NF"],["Northern Mariana Islands","MP"],["Norway","NO"],["Oman","OM"],["Pakistan","PK"],["Palau","PW"],["Palestine, State of","PS"],["Panama","PA"],["Papua New Guinea","PG"],["Paraguay","PY"],["Peru","PE"],["Philippines","PH"],["Pitcairn","PN"],["Poland","PL"],["Portugal","PT"],["Puerto Rico","PR"],["Qatar","QA"],["R\xe9union","RE"],["Romania","RO"],["Russian Federation","RU"],["Rwanda","RW"],["Saint Barth\xe9lemy","BL"],["Saint Helena, Ascension and Tristan da Cunha","SH"],["Saint Kitts and Nevis","KN"],["Saint Lucia","LC"],["Saint Martin (French part)","MF"],["Saint Pierre and Miquelon","PM"],["Saint Vincent and the Grenadines","VC"],["Samoa","WS"],["San Marino","SM"],["Sao Tome and Principe","ST"],["Saudi Arabia","SA"],["Senegal","SN"],["Serbia","RS"],["Seychelles","SC"],["Sierra Leone","SL"],["Singapore","SG"],["Sint Maarten (Dutch part)","SX"],["Slovakia","SK"],["Slovenia","SI"],["Solomon Islands","SB"],["Somalia","SO"],["South Africa","ZA"],["South Georgia and the South Sandwich Islands","GS"],["South Sudan","SS"],["Spain","ES"],["Sri Lanka","LK"],["Sudan","SD"],["Suriname","SR"],["Svalbard and Jan Mayen","SJ"],["Swaziland","SZ"],["Sweden","SE"],["Switzerland","CH"],["Syrian Arab Republic","SY"],["Taiwan, Province of China","TW"],["Tajikistan","TJ"],["Tanzania, United Republic of","TZ"],["Thailand","TH"],["Timor-Leste","TL"],["Togo","TG"],["Tokelau","TK"],["Tonga","TO"],["Trinidad and Tobago","TT"],["Tunisia","TN"],["Turkey","TR"],["Turkmenistan","TM"],["Turks and Caicos Islands","TC"],["Tuvalu","TV"],["Uganda","UG"],["Ukraine","UA"],["United Arab Emirates","AE"],["United Kingdom","GB"],["United States","US"],["United States Minor Outlying Islands","UM"],["Uruguay","UY"],["Uzbekistan","UZ"],["Vanuatu","VU"],["Venezuela, Bolivarian Republic of","VE"],["Viet Nam","VN"],["Virgin Islands, British","VG"],["Virgin Islands, U.S.","VI"],["Wallis and Futuna","WF"],["Western Sahara","EH"],["Yemen","YE"],["Zambia","ZM"],["Zimbabwe","ZW"]],Pa=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={baseApiUrl:"https://api.ip2loc.com",baseWebUrl:"https://ip2loc.com",tax:0,amountTax:0,amountTotal:0,processing:!1,errorMessage:"",countries:Na,countryPreSelected:""},t.handleValidSubmit=t.handleValidSubmit.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Choose Plan";var e=this.state.baseApiUrl+"/t8wiiODrLK9j0nYkAQWIgr7pvRMWFf3L/detect";this.fetchCountry(e)}},{key:"fetchCountry",value:function(e){var a=this;fetch(e).then((function(e){return e.json()})).then((function(e){e.success&&e.location&&e.location.country&&e.location.country.alpha_2&&(console.log("response.country: "+e.location.country.alpha_2),a.setState({countryPreSelected:e.location.country.alpha_2}))})).catch((function(e){return console.error(e)}))}},{key:"handleCheckout",value:function(){console.log("handleCheckout: "+this.state.baseWebUrl),this.setState({processing:!0}),this.form.submit()}}]),Object(m.a)(a,[{key:"handleValidSubmit",value:function(e,a){var t=this;console.log("handleValidSubmit:CVSPL"),console.log("event = "+JSON.stringify(e,null,2)),console.log("values = "+JSON.stringify(a,null,2)),console.log("Your plan is: "+this.props.planSelected),console.log("Your input email is: "+this.props.email);var n=this.state.baseWebUrl+"/user/createPaymentLink";console.log("baseWebUrl: "+n),this.setState({loading:!0}),this.setState({errorMessage:""}),fetch(n,{method:"post",headers:{Accept:"application/json"},body:JSON.stringify(a,null,2)}).then((function(e){return e.json()})).then((function(e){if(console.log("response success = "+e.success+", error = "+e.error),e.success)console.log("success: "+e.success),console.log("redirect_to_url: "+e.redirect_to_url),e.redirect_to_url&&(t.setState({redirect:!0}),window.location.href=e.redirect_to_url);else switch(console.log("success: false"+e.error),t.setState({recaptcha:""}),e.error){case 422:console.log("422: "+e.field+" / "+e.detail),console.log("422: touchedInputs:"+JSON.stringify(t.form.state.touchedInputs,null,2)),t.form.state.invalidInputs[e.field]=e.detail,t.setState({errorMessage:e.detail});break;case 500:t.setState({errorMessage:e.detail});break;case 429:t.setState({errorMessage:"Too many requests, try again later."});break;default:t.setState({errorMessage:"Server Error: "+e.error})}})).catch((function(e){console.error(e),console.log("success: false catch!"),t.setState({errorMessage:"can't reach server"})})).finally((function(){t.setState({loading:!1})}))}},{key:"render",value:function(){var e=this;return s.a.createElement("div",{className:"checkout-form-wrapper"},s.a.createElement(W.AvForm,{ref:function(a){return e.form=a},onValidSubmit:this.handleValidSubmit,onInvalidSubmit:this.handleInvalidSubmit},s.a.createElement(W.AvField,{type:"hidden",name:"plan",value:this.props.planSelected}),s.a.createElement(M.a,{form:!0},s.a.createElement(U.a,{md:12},s.a.createElement("div",{className:"checkout-progress"},"Step 1 of 2"),s.a.createElement("h2",null,"Start Your Free Trial"),s.a.createElement("small",null,"No credit card charged today. Cancel anytime."))),s.a.createElement(M.a,{form:!0},s.a.createElement(U.a,{md:12},s.a.createElement(L.a,null,s.a.createElement(W.AvField,{onChange:this.updateSignupEmail,name:"email",label:"Email Address",type:"email",id:"useremail",required:!0,value:this.props.email,readOnly:!0})))),s.a.createElement(M.a,{form:!0},s.a.createElement(U.a,{md:12},s.a.createElement(W.AvField,{value:this.state.countryPreSelected,type:"select",name:"countryIso2",label:this.state.paymentRequired?"Select your Country *":"Select your Country",required:this.state.paymentRequired},s.a.createElement("option",{value:"",disabled:!0,selected:!0},"Select your Country"),this.state.countries.map((function(e){return s.a.createElement("option",{value:e[1]},e[0])}))))),s.a.createElement(M.a,{form:!0},s.a.createElement(U.a,{md:12},s.a.createElement(W.AvGroup,{check:!0},s.a.createElement(W.AvInput,{type:"checkbox",name:"updatesCheckbox"}),s.a.createElement(ba.a,{check:!0,for:"updatesCheckbox"},"Keep me updated on new features")),s.a.createElement("br",null),s.a.createElement(v.a,{color:"primary",block:!0,id:"checkout",disabled:this.state.loading&&this.state.processing},this.state.loading&&this.state.processing?s.a.createElement("span",null,s.a.createElement(b.a,{icon:"spinner",spin:!0})," "):s.a.createElement("span",null,"Continue to Stripe")))),this.state.isSignup?s.a.createElement(W.AvGroup,{check:!0},s.a.createElement("small",null,"By signing up, you agree to our terms of service and privacy policy.")):"",this.state.errorMessage?s.a.createElement(D.a,{color:"danger"},this.state.errorMessage):""),s.a.createElement("div",{className:"checkout-trust-signals"},s.a.createElement("div",{className:"trust-item"},s.a.createElement(b.a,{icon:"lock"}),s.a.createElement("span",null,"256-bit SSL encrypted")),s.a.createElement("div",{className:"trust-item"},s.a.createElement(b.a,{icon:"shield-alt"}),s.a.createElement("span",null,"Secure payment by Stripe"))),s.a.createElement("div",{className:"checkout-testimonial"},s.a.createElement("p",null,'"Fast integration, reliable API. Exactly what we needed."'),s.a.createElement("span",{className:"testimonial-author"},"\u2014 Backend Developer, San Francisco")),s.a.createElement("div",{className:"text-center additional"},s.a.createElement("a",{href:"https://stripe.com/legal/ssa",target:"_blank",rel:"noopener noreferrer"},s.a.createElement("small",null,"Services Agreement")),s.a.createElement("span",null," | "),s.a.createElement("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer"},s.a.createElement("small",null,"Privacy Policy"))))}}]),a}(n.Component),_a=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=E.a.parse(t.props.location.search),s=n.paymentId;return t.state={baseApiUrl:"https://api.ip2loc.com",baseWebUrl:"https://ip2loc.com",paymentId:s,signupWithPlanSelected:n.plan,plan:[],email:"",tax:0,amountTax:0,amountTotal:0,processing:!1,errorMessage:"",gtmId:"GTM-PNZNW4R",validationPayment:!1},t.checkPaymentIntent=t.checkPaymentIntent.bind(Object(y.a)(t)),console.log(s),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Checkout",this.fetchPlan()}},{key:"fetchPlan",value:function(){var e=this,a=E.a.parse(this.props.location.search);if(void 0!==a.plan){var t=this.state.baseWebUrl+"/user/plans/"+a.plan+"?paymentId="+a.paymentId;console.log("--fetch--"+t),fetch(t,{method:"POST"}).then((function(e){return e.json()})).then((function(a){a.success?(console.log("--ok-- "+a.plan.title),e.setState({plan:a.plan,tax:a.tax,amountTax:a.amountTax,amountTotal:a.amountTotal,email:a.email})):console.log("--error--")}))}}}]),Object(m.a)(a,[{key:"checkPaymentIntent",value:function(e,a){var t=this;null!=e&&null!=a&&(console.log("paymentIntent: "+e),console.log("paymentId: "+a),console.log("baseApiUrl: "+this.state.baseApiUrl),console.log("validationPayment: "+this.state.validationPayment),this.setState({loading:!0}),fetch(this.state.baseWebUrl+"/user/paymentIntent",{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify({paymentId:a,paymentIntent:e})}).then((function(e){return e.json()})).then((function(e){console.log("response success"+e.success),e.success?(console.log("strong payment success: "+e.success+" plan: "+e.plan),t.props.history.push("/registrationsuccess?plan="+e.planKey+"&activate=true")):t.setState({errorMessage:e.detail})})).catch((function(e){return console.error(e)})).finally((function(){t.setState({loading:t.state.redirect})})))}},{key:"checkSetupIntent",value:function(e,a){var t=this;null!=e&&null!=a&&(console.log("paymentIntent: "+e),console.log("paymentId: "+a),console.log("baseApiUrl: "+this.state.baseApiUrl),console.log("validationPayment: "+this.state.validationPayment),this.setState({loading:!0}),fetch(this.state.baseWebUrl+"/user/setupIntent",{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify({paymentId:a,setupIntent:e})}).then((function(e){return e.json()})).then((function(e){console.log("response success"+e.success),e.success?(console.log("strong payment success: "+e.success+" plan: "+e.plan),t.props.history.push("/registrationsuccess?plan="+e.planKey+"&activate=true")):t.setState({errorMessage:e.detail})})).catch((function(e){return console.error(e)})).finally((function(){t.setState({loading:t.state.redirect})})))}},{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,{loggedInOnly:!0}),s.a.createElement("main",{className:"flex-fill checkout-main"},s.a.createElement("div",{className:"checkout-header"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"checkout-header-content"},s.a.createElement("h1",null,"Checkout"),s.a.createElement("p",null,"Complete your subscription purchase securely.")))),this.state.validationPayment?s.a.createElement(f.a,{className:"checkout-container"},s.a.createElement(M.a,{className:"justify-content-center"},s.a.createElement(U.a,{lg:"6",md:"8"},s.a.createElement("div",{className:"checkout-card"},s.a.createElement("div",{className:"checkout-card-body text-center"},this.state.errorMessage?s.a.createElement(D.a,{color:"danger"},"Error: ",this.state.errorMessage):s.a.createElement("div",{className:"checkout-processing"},s.a.createElement("div",{className:"processing-spinner"},s.a.createElement(b.a,{icon:"spinner",spin:!0})),s.a.createElement("p",null,"Validating payment..."))))))):s.a.createElement(f.a,{className:"checkout-container"},s.a.createElement(M.a,{className:"justify-content-center align-items-center"},void 0!==this.state.signupWithPlanSelected&&s.a.createElement(U.a,{lg:"4",md:"12",className:"mb-4 mb-lg-0"},this.PlanDetails()),s.a.createElement(U.a,{lg:(this.state.signupWithPlanSelected,"8"),md:"12"},this.CheckoutBasedOnType(this.state.plan.type))))),s.a.createElement(Te,null))}},{key:"PlanDetails",value:function(){return s.a.createElement("div",{className:"checkout-card plan-details-card"},s.a.createElement("div",{className:"checkout-card-header"},s.a.createElement("div",{className:"card-icon"},s.a.createElement(b.a,{icon:"shopping-cart"})),s.a.createElement("h3",null,"Order Summary")),s.a.createElement("div",{className:"checkout-card-body"},s.a.createElement("div",{className:"plan-summary"},s.a.createElement("h2",{id:"planTitle",className:"plan-name"},this.state.plan.title," Plan"),"0"!==this.state.plan.trial&&s.a.createElement("div",{className:"trial-badge"},s.a.createElement(b.a,{icon:"gift"}),this.state.plan.trial,"-Day Free Trial"),s.a.createElement("p",{className:"plan-description"},this.state.plan.quantity<1e5?"For beginners and small projects.":this.state.plan.quantity<1e6?"Our most popular plan for medium projects.":"Extensive API usage for large projects.")),s.a.createElement("ul",{className:"plan-features-checkout"},s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,this.state.plan.description,"/",this.state.plan.time)),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"HTTPS Encryption")),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"All Data Points")),s.a.createElement("li",null,s.a.createElement(b.a,{icon:"check",className:"feature-check"}),s.a.createElement("span",null,"Cancel Anytime"))),s.a.createElement("div",{className:"price-breakdown"},s.a.createElement("div",{className:"price-row"},s.a.createElement("span",null,"Subtotal"),s.a.createElement("span",null,"0"===this.state.plan.trial?"".concat(this.state.plan.symbol).concat(this.state.plan.amount):"$0.00")),s.a.createElement("div",{className:"price-row"},s.a.createElement("span",null,"Tax"),s.a.createElement("span",null,"0"===this.state.plan.trial?"".concat(this.state.plan.symbol).concat(this.state.amountTax):"$0.00")),"v2"===this.state.plan.type&&s.a.createElement("div",{className:"price-note"},"Buying as a business? On the Stripe checkout page, enable \u201cI\u2019m purchasing as a business\u201d."),s.a.createElement("div",{className:"price-row total"},s.a.createElement("span",null,"Total"),s.a.createElement("span",null,"0"===this.state.plan.trial?"".concat(this.state.plan.symbol).concat(this.state.amountTotal):"$0.00")),s.a.createElement("div",{className:"price-note"},"Then ",this.state.plan.symbol,"0"===this.state.plan.trial?this.state.amountTotal:this.state.plan.amount," per ",this.state.plan.time,"."))))}},{key:"CheckoutBasedOnType",value:function(e){return"v1"===e?s.a.createElement(va,{paymentId:this.state.paymentId,plan:this.state}):"v2"===e?s.a.createElement(Pa,{email:this.state.email,plan:this.state.plan,planSelected:this.state.signupWithPlanSelected}):void 0}}]),a}(n.Component),Aa=function(e){function a(){return Object(c.a)(this,a),Object(i.a)(this,Object(o.a)(a).apply(this,arguments))}return Object(u.a)(a,e),Object(m.a)(a,[{key:"render",value:function(){var e=this;return s.a.createElement("div",{className:"dashboard-sidebar"},s.a.createElement("div",{className:"sidebar-card"},s.a.createElement("nav",{className:"sidebar-nav"},[{key:"dashboard",label:"Dashboard",icon:"th-large",href:"/dashboard"},{key:"subscription",label:"Subscription",icon:"layer-group",href:"/subscription"},{key:"payment",label:"Payment",icon:"credit-card",href:"/payment"}].map((function(a){return s.a.createElement("a",{key:a.key,href:a.href,className:"sidebar-nav-item ".concat(e.props.selected===a.key?"active":"")},s.a.createElement("div",{className:"sidebar-nav-icon"},s.a.createElement(b.a,{icon:a.icon})),s.a.createElement("span",{className:"sidebar-nav-label"},a.label),e.props.selected===a.key&&s.a.createElement("div",{className:"sidebar-nav-indicator"}))})))))}}]),a}(n.Component),Sa=t(247),ka=function(e){if(null===e||void 0===e)return"0";var a=e/1e6;if(a>=1)return"".concat(a%1===0?a:a.toFixed(1),"M");var t=e/1e3;return"".concat(Math.round(t),"K")},Ca=function(e){if(!e)return null;if("string"===typeof e){var a=new Date(e);return isNaN(a.getTime())?null:a}return"number"===typeof e?new Date(1e3*e):null},Oa=function(e){var a=Ca(e);return a?a.toLocaleDateString("en-US",{day:"numeric",month:"long",year:"numeric"}):""},Ta=function(e){var a=Ca(e);return a?a.toLocaleDateString("en-US",{day:"numeric",month:"short",year:"numeric"}):""},Ia="current",wa="covered",Ra="tight",ja="insufficient",xa="scheduled",Ma="upgrade",Ua="downgrade",La="current",Da="scheduled",Ha=function(e){return Array.isArray(e)?Object(Sa.a)(e).sort((function(e,a){return(parseInt(e.quantity)||0)-(parseInt(a.quantity)||0)})):[]},Wa=function(e,a){return Array.isArray(e)&&a?e.findIndex((function(e){return e.key===a})):-1},qa=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=e.cookies;return t.state={gtmId:"GTM-PNZNW4R",loading:!1,name:"",apiKey:"",planKey:"",planTitle:"",usage:"1/2",email:"",period:"",invoices:null,planInfo:null,baseWebUrl:"https://ip2loc.com",baseApiUrl:"https://api.ip2loc.com",session:void 0!==n.get("session"),apiKeyCopied:!1},t.state.session||t.props.history.push("/"),t.copyApiKey=t.copyApiKey.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Dashboard";var e=this.state.baseWebUrl+"/user/dashboard";this.fetch(e)}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var a=this;console.log("Fetching URL:",e),this.setState({loading:!0}),fetch(e).then((function(e){return console.log("Response received"),e.json()})).then((function(e){console.log("Processed JSON response"),e.success?(console.log("Response is successful"),!0===e.planSelectionRequired&&a.props.history.push("/plans"),a.setState({apiKey:e.apiKey}),a.setState({name:e.name}),a.setState({planKey:e.planKey}),a.setState({planTitle:e.planTitle}),a.setState({usage:e.usage}),a.setState({email:e.email}),a.setState({period:e.period}),a.setState({invoices:e.invoices}),e.planInfo&&a.setState({planInfo:e.planInfo}),console.log("planInfo: ",e.planInfo)):console.log("Response is not successful")})).catch((function(e){console.error(e)})).finally((function(){return a.setState({loading:!1})}))}))}]),Object(m.a)(a,[{key:"copyApiKey",value:function(){var e=this;navigator.clipboard.writeText(this.state.apiKey),this.setState({apiKeyCopied:!0}),setTimeout((function(){return e.setState({apiKeyCopied:!1})}),2e3)}},{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,{loggedInOnly:!0}),s.a.createElement("main",{className:"flex-fill dashboard-main"},s.a.createElement("div",{className:"dashboard-header"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"dashboard-header-content"},s.a.createElement("div",{className:"dashboard-welcome"},s.a.createElement("h1",null,"Welcome back",this.state.name?", ".concat(this.state.name):""),s.a.createElement("p",null,"Manage your API keys, subscription, and account settings."))))),s.a.createElement(f.a,{className:"dashboard-container"},s.a.createElement(M.a,null,s.a.createElement(U.a,{lg:"3",md:"4",className:"mb-4"},s.a.createElement(Aa,{selected:"dashboard"})),s.a.createElement(U.a,{lg:"9",md:"8"},s.a.createElement("div",{className:"dashboard-card api-key-card"},s.a.createElement("div",{className:"dashboard-card-header"},s.a.createElement("div",{className:"card-icon"},s.a.createElement(b.a,{icon:"key"})),s.a.createElement("h3",null,"Your API Key")),s.a.createElement("div",{className:"dashboard-card-body"},s.a.createElement("div",{className:"api-key-display"},s.a.createElement("code",{id:"apiKey",className:"api-key-value"},this.state.apiKey||"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"),s.a.createElement("button",{className:"copy-btn",onClick:this.copyApiKey,title:"Copy to clipboard"},s.a.createElement(b.a,{icon:this.state.apiKeyCopied?"check":"copy"}),this.state.apiKeyCopied?"Copied!":"Copy")),s.a.createElement("p",{className:"api-key-hint"},"Use this key in your API requests. Keep it secret!"))),s.a.createElement("div",{className:"dashboard-stats-grid"},s.a.createElement("div",{className:"dashboard-card stat-card"},s.a.createElement("div",{className:"stat-icon plan-icon"},s.a.createElement(b.a,{icon:"layer-group"})),s.a.createElement("div",{className:"stat-content"},s.a.createElement("span",{className:"stat-label"},"Current Plan"),s.a.createElement("span",{id:"planTitle",className:"stat-value"},this.state.planTitle||"Loading..."),this.state.planInfo&&this.state.planInfo.scheduled&&s.a.createElement("div",{className:"stat-scheduled-info"},s.a.createElement(b.a,{icon:"clock",className:"clock-icon"}),"cancel"===this.state.planInfo.scheduled.type?s.a.createElement("span",null,"Ends on ",Ta(this.state.planInfo.scheduled.effectiveDate)):s.a.createElement("span",null,"Changing to ",this.state.planInfo.scheduled.newPlan.title," on ",Ta(this.state.planInfo.scheduled.effectiveDate))))),s.a.createElement("div",{className:"dashboard-card stat-card"},s.a.createElement("div",{className:"stat-icon usage-icon"},s.a.createElement(b.a,{icon:"chart-bar"})),s.a.createElement("div",{className:"stat-content"},s.a.createElement("span",{className:"stat-label"},"API Usage"),s.a.createElement("span",{className:"stat-value"},this.state.usage||"0/0"))),s.a.createElement("div",{className:"dashboard-card stat-card"},s.a.createElement("div",{className:"stat-icon period-icon"},s.a.createElement(b.a,{icon:"calendar-alt"})),s.a.createElement("div",{className:"stat-content"},s.a.createElement("span",{className:"stat-label"},"Billing Period"),s.a.createElement("span",{className:"stat-value"},this.state.period||"N/A")))),s.a.createElement("div",{className:"dashboard-card"},s.a.createElement("div",{className:"dashboard-card-header"},s.a.createElement("div",{className:"card-icon"},s.a.createElement(b.a,{icon:"user"})),s.a.createElement("h3",null,"Account Information")),s.a.createElement("div",{className:"dashboard-card-body"},s.a.createElement("div",{className:"info-grid"},s.a.createElement("div",{className:"info-item"},s.a.createElement("span",{className:"info-label"},"Email"),s.a.createElement("span",{className:"info-value"},this.state.email||"-")),s.a.createElement("div",{className:"info-item"},s.a.createElement("span",{className:"info-label"},"Name"),s.a.createElement("span",{className:"info-value"},this.state.name||"-"))))),this.state.invoices&&this.state.invoices.length>0&&s.a.createElement("div",{className:"dashboard-card"},s.a.createElement("div",{className:"dashboard-card-header"},s.a.createElement("div",{className:"card-icon"},s.a.createElement(b.a,{icon:"file-invoice"})),s.a.createElement("h3",null,"Recent Invoices")),s.a.createElement("div",{className:"dashboard-card-body"},s.a.createElement("div",{className:"invoices-list"},this.state.invoices.map((function(e,a){return s.a.createElement("a",{key:a,href:e.link,className:"invoice-item",target:"_blank",rel:"noopener noreferrer"},s.a.createElement(b.a,{icon:"file-pdf",className:"invoice-icon"}),s.a.createElement("span",null,e.name),s.a.createElement(b.a,{icon:"external-link-alt",className:"link-icon"}))}))))))))),s.a.createElement(Te,null))}}]),a}(n.Component),Fa=Object(p.g)(Object(K.b)(qa)),Ba=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=E.a.parse(t.props.location.search);return console.log(n.sessionId),t.state={},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Checkout Success"}}]),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill"},s.a.createElement("div",{className:"success-page"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"success-card"},s.a.createElement("div",{className:"success-icon"},s.a.createElement(b.a,{icon:"check-circle"})),s.a.createElement("h1",null,"Checkout Successful"),s.a.createElement("p",{className:"success-message"},"Thank you for your purchase! Your subscription is now active."),s.a.createElement("div",{className:"success-actions"},s.a.createElement("a",{href:"/dashboard",className:"btn-primary-custom"},s.a.createElement(b.a,{icon:"tachometer-alt",className:"mr-2"}),"Go to Dashboard")))))),s.a.createElement(Te,null))}}]),a}(n.Component),Ka=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=E.a.parse(t.props.location.search);return console.log(n.sessionId),t.state={},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Checkout Cancelled"}}]),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill"},s.a.createElement("div",{className:"success-page"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"success-card"},s.a.createElement("div",{className:"activation-icon warning"},s.a.createElement(b.a,{icon:"times-circle"})),s.a.createElement("h1",null,"Checkout Cancelled"),s.a.createElement("p",{className:"success-message"},"Your checkout was cancelled. No charges have been made."),s.a.createElement("div",{className:"success-actions"},s.a.createElement("a",{href:"/pricing",className:"btn-primary-custom"},s.a.createElement(b.a,{icon:"arrow-left",className:"mr-2"}),"Back to Pricing")))))),s.a.createElement(Te,null))}}]),a}(n.Component),Ga=function(e){function a(e){var t;Object(c.a)(this,a),(t=Object(i.a)(this,Object(o.a)(a).call(this,e))).setReCaptchaToken=function(e){t.setState({recaptcha:e})},g();var n=void 0!==e.cookies.get("session");return t.state={subjects:[[1,"General Inquiry"],[2,"Billing Inquiry"],[3,"Technical Inquiry"],[4,"Other"]],subject:"General Inquiry",email:"",message:"",baseWebUrl:"https://ip2loc.com",captchaSiteKey:"0x4AAAAAABuWWtOfbf_-dsn0",recaptcha:"",loading:!1,success:!1,errorMessage:"",isLoggedIn:n},t.handleOnChange=t.handleOnChange.bind(Object(y.a)(t)),t.setReCaptchaToken=t.setReCaptchaToken.bind(Object(y.a)(t)),t.handleSubmit=t.handleSubmit.bind(Object(y.a)(t)),t.turnstileRef=s.a.createRef(),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Contact - ip2loc"}}]),Object(m.a)(a,[{key:"handleOnChange",value:function(e){this.setState(Object(Pe.a)({},e.target.name,e.target.value))}},{key:"handleSubmit",value:function(e){var a=this;if(e.preventDefault(),this.state.email&&this.state.message){var t={subject:this.state.subject,email:this.state.email,message:this.state.message};this.state.isLoggedIn||(t.recaptcha=this.state.recaptcha);var n=this.state.baseWebUrl+"/user/contact";this.setState({loading:!0,errorMessage:""}),fetch(n,{method:"post",headers:{Accept:"application/json","Content-Type":"application/json"},credentials:"include",body:JSON.stringify(t)}).then((function(e){return e.json()})).then((function(e){if(e.success)a.setState({errorMessage:"",success:!0});else switch(a.setState({recaptcha:""}),e.error){case 422:a.setState({errorMessage:e.detail||"Validation error"});break;case 429:a.setState({errorMessage:"Too many requests, try again later."});break;default:a.setState({errorMessage:e.detail||"Server Error"})}})).catch((function(e){console.error(e),a.setState({errorMessage:"Can't reach server. Please try again."})})).finally((function(){a.setState({loading:!1})}))}else this.setState({errorMessage:"Please fill in all required fields."})}},{key:"render",value:function(){var e=this;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Support"),s.a.createElement("h1",{className:"page-title"},"Contact Us"),s.a.createElement("p",{className:"page-subtitle"},"Have a question or need help? We're here for you. Our team typically responds within 24 hours.")))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"contact-grid"},s.a.createElement("div",{className:"contact-info"},s.a.createElement("h3",null,"Get in Touch"),s.a.createElement("div",{className:"contact-info-item"},s.a.createElement("div",{className:"contact-info-icon"},s.a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("circle",{cx:"12",cy:"12",r:"10"}),s.a.createElement("polyline",{points:"12 6 12 12 16 14"}))),s.a.createElement("div",{className:"contact-info-text"},s.a.createElement("h4",null,"Response Time"),s.a.createElement("p",null,"Within 24 hours"))),s.a.createElement("div",{className:"contact-info-item"},s.a.createElement("div",{className:"contact-info-icon"},s.a.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},s.a.createElement("path",{d:"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"}),s.a.createElement("circle",{cx:"12",cy:"10",r:"3"}))),s.a.createElement("div",{className:"contact-info-text"},s.a.createElement("h4",null,"Location"),s.a.createElement("p",null,"Austria")))),s.a.createElement("div",{className:"contact-form-card"},this.state.success?s.a.createElement("div",null,s.a.createElement(D.a,{color:"success"},s.a.createElement("strong",null,"Message sent successfully!"),s.a.createElement("br",null),"We will get back to you as soon as possible.")):s.a.createElement("form",{onSubmit:this.handleSubmit},s.a.createElement("h3",null,"Send us a Message"),s.a.createElement("div",{className:"form-group-modern"},s.a.createElement("label",{htmlFor:"subject"},"Subject"),s.a.createElement("select",{id:"subject",name:"subject",value:this.state.subject,onChange:this.handleOnChange},this.state.subjects.map((function(e){return s.a.createElement("option",{key:e[0],value:e[1]},e[1])})))),s.a.createElement("div",{className:"form-group-modern"},s.a.createElement("label",{htmlFor:"email"},"Email Address *"),s.a.createElement("input",{type:"email",id:"email",name:"email",value:this.state.email,onChange:this.handleOnChange,placeholder:"your@email.com",required:!0})),s.a.createElement("div",{className:"form-group-modern"},s.a.createElement("label",{htmlFor:"message"},"Message * (Max. 2000 characters)"),s.a.createElement("textarea",{id:"message",name:"message",value:this.state.message,onChange:this.handleOnChange,placeholder:"How can we help you?",maxLength:"2000",required:!0})),this.state.errorMessage&&s.a.createElement(D.a,{color:"danger"},this.state.errorMessage),!this.state.isLoggedIn&&s.a.createElement("div",{style:{display:"flex",justifyContent:"center",margin:"16px 0"}},s.a.createElement(ta.a,{sitekey:this.state.captchaSiteKey,ref:this.turnstileRef,onVerify:this.setReCaptchaToken,onSuccess:this.setReCaptchaToken,onExpire:function(){return e.setState({recaptcha:""})},onError:function(){return e.setState({recaptcha:""})},options:{appearance:"interaction-only",theme:"auto",size:"compact",retry:"auto",refreshExpired:"auto",action:"contact"}})),s.a.createElement("button",{type:"submit",className:"btn-submit-modern",disabled:this.state.loading},this.state.loading?s.a.createElement("span",null,s.a.createElement(b.a,{icon:"spinner",spin:!0})," Sending..."):s.a.createElement("span",null,"Send Message")))))))),s.a.createElement(Te,null))}}]),a}(n.Component),za=Object(K.b)(Ga),Ya=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Imprint - ip2loc"}},{key:"render",value:function(){var e=Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_FLAVOR:"geocoder",REACT_APP_TITLE:"ip2loc",REACT_APP_HOME_TITLE:"IP 2 Location API, detect Language, Currency and more from IP Address",REACT_APP_HOME_TITLE_2_LINE:"Ready to Save Time and Money?",REACT_APP_HOME_TITLE_3_LINE:"",REACT_APP_HOME_H1:"[ACCENT]IP 2 Location API[/ACCENT], detect Language, Currency and more from IP Address",REACT_APP_HOME_H2:"",REACT_APP_HOME_HERO_SHOT_H2:"[ACCENT]Benefit[/ACCENT] from ip2loc's [ACCENT]reliable[/ACCENT] and [ACCENT]developer-friendly[/ACCENT] tools.",REACT_APP_HOME_HERO_WHY_0:"The Power of Geolocation: Use it for Targeted Advertising, Fraud Prevention, Website Localization, Content Personalization, Geotargeting and much more.",REACT_APP_HOME_HERO_WHY_1:"Targeted Advertising: Tailoring ads based on geographic location of website visitors.",REACT_APP_HOME_HERO_WHY_2:"Fraud Prevention: Detecting fraudulent activities by comparing IP location with user's billing or shipping address.",REACT_APP_HOME_HERO_WHY_3:"Website Localization: Automatically presenting website in appropriate language and currency based on visitor's location.",REACT_APP_HOME_HERO_WHY_4:"Content Personalization: Personalizing website content based on visitor's location.",REACT_APP_HOME_HERO_WHY_5:"Targeting regions or countries with marketing campaigns.",REACT_APP_HOME_TITLE_FREE:"Free contingent: 15.000 Requests per month!",REACT_APP_HOME_TEST_IT:"Geolocation is a powerful tool that businesses can use to target their advertising, prevent fraud, localize their website, personalize content, and target specific locations for their products or services. IP 2 Location API is a popular geolocation service that can detect a user's location, language, currency, and other details from their IP address.",REACT_APP_KEYWORDS:"ip api, ip to location api, geoip api, ip to country api",REACT_APP_DESCRIPTION:"IP to location REST API using JSON, XML and Yaml supporting PHP, JavaScript, Node, Java, and more.",REACT_APP_HOME_CALL2ACTION:"Get your [LIGHT]API Key[/LIGHT] now",REACT_APP_DEV_BASE_WEB_URL:"http://localhost:8080",REACT_APP_DEV_BASE_API_URL:"http://0.0.0.0:8080",REACT_APP_BASE_WEB_URL:"https://ip2loc.com",REACT_APP_BASE_API_URL:"https://api.ip2loc.com",REACT_APP_NO_KEY_DAILY_LIMIT_PER_IP:"0",REACT_APP_COLOR:"#355691",REACT_APP_BACKGROUND_COLOR:"#00a8ff",REACT_APP_BACKGROUND_IMAGE:"/img/world.svg"}).REACT_APP_IMPRINT_EMAIL,a=Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_FLAVOR:"geocoder",REACT_APP_TITLE:"ip2loc",REACT_APP_HOME_TITLE:"IP 2 Location API, detect Language, Currency and more from IP Address",REACT_APP_HOME_TITLE_2_LINE:"Ready to Save Time and Money?",REACT_APP_HOME_TITLE_3_LINE:"",REACT_APP_HOME_H1:"[ACCENT]IP 2 Location API[/ACCENT], detect Language, Currency and more from IP Address",REACT_APP_HOME_H2:"",REACT_APP_HOME_HERO_SHOT_H2:"[ACCENT]Benefit[/ACCENT] from ip2loc's [ACCENT]reliable[/ACCENT] and [ACCENT]developer-friendly[/ACCENT] tools.",REACT_APP_HOME_HERO_WHY_0:"The Power of Geolocation: Use it for Targeted Advertising, Fraud Prevention, Website Localization, Content Personalization, Geotargeting and much more.",REACT_APP_HOME_HERO_WHY_1:"Targeted Advertising: Tailoring ads based on geographic location of website visitors.",REACT_APP_HOME_HERO_WHY_2:"Fraud Prevention: Detecting fraudulent activities by comparing IP location with user's billing or shipping address.",REACT_APP_HOME_HERO_WHY_3:"Website Localization: Automatically presenting website in appropriate language and currency based on visitor's location.",REACT_APP_HOME_HERO_WHY_4:"Content Personalization: Personalizing website content based on visitor's location.",REACT_APP_HOME_HERO_WHY_5:"Targeting regions or countries with marketing campaigns.",REACT_APP_HOME_TITLE_FREE:"Free contingent: 15.000 Requests per month!",REACT_APP_HOME_TEST_IT:"Geolocation is a powerful tool that businesses can use to target their advertising, prevent fraud, localize their website, personalize content, and target specific locations for their products or services. IP 2 Location API is a popular geolocation service that can detect a user's location, language, currency, and other details from their IP address.",REACT_APP_KEYWORDS:"ip api, ip to location api, geoip api, ip to country api",REACT_APP_DESCRIPTION:"IP to location REST API using JSON, XML and Yaml supporting PHP, JavaScript, Node, Java, and more.",REACT_APP_HOME_CALL2ACTION:"Get your [LIGHT]API Key[/LIGHT] now",REACT_APP_DEV_BASE_WEB_URL:"http://localhost:8080",REACT_APP_DEV_BASE_API_URL:"http://0.0.0.0:8080",REACT_APP_BASE_WEB_URL:"https://ip2loc.com",REACT_APP_BASE_API_URL:"https://api.ip2loc.com",REACT_APP_NO_KEY_DAILY_LIMIT_PER_IP:"0",REACT_APP_COLOR:"#355691",REACT_APP_BACKGROUND_COLOR:"#00a8ff",REACT_APP_BACKGROUND_IMAGE:"/img/world.svg"}).REACT_APP_IMPRINT_PHONE,t=Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_FLAVOR:"geocoder",REACT_APP_TITLE:"ip2loc",REACT_APP_HOME_TITLE:"IP 2 Location API, detect Language, Currency and more from IP Address",REACT_APP_HOME_TITLE_2_LINE:"Ready to Save Time and Money?",REACT_APP_HOME_TITLE_3_LINE:"",REACT_APP_HOME_H1:"[ACCENT]IP 2 Location API[/ACCENT], detect Language, Currency and more from IP Address",REACT_APP_HOME_H2:"",REACT_APP_HOME_HERO_SHOT_H2:"[ACCENT]Benefit[/ACCENT] from ip2loc's [ACCENT]reliable[/ACCENT] and [ACCENT]developer-friendly[/ACCENT] tools.",REACT_APP_HOME_HERO_WHY_0:"The Power of Geolocation: Use it for Targeted Advertising, Fraud Prevention, Website Localization, Content Personalization, Geotargeting and much more.",REACT_APP_HOME_HERO_WHY_1:"Targeted Advertising: Tailoring ads based on geographic location of website visitors.",REACT_APP_HOME_HERO_WHY_2:"Fraud Prevention: Detecting fraudulent activities by comparing IP location with user's billing or shipping address.",REACT_APP_HOME_HERO_WHY_3:"Website Localization: Automatically presenting website in appropriate language and currency based on visitor's location.",REACT_APP_HOME_HERO_WHY_4:"Content Personalization: Personalizing website content based on visitor's location.",REACT_APP_HOME_HERO_WHY_5:"Targeting regions or countries with marketing campaigns.",REACT_APP_HOME_TITLE_FREE:"Free contingent: 15.000 Requests per month!",REACT_APP_HOME_TEST_IT:"Geolocation is a powerful tool that businesses can use to target their advertising, prevent fraud, localize their website, personalize content, and target specific locations for their products or services. IP 2 Location API is a popular geolocation service that can detect a user's location, language, currency, and other details from their IP address.",REACT_APP_KEYWORDS:"ip api, ip to location api, geoip api, ip to country api",REACT_APP_DESCRIPTION:"IP to location REST API using JSON, XML and Yaml supporting PHP, JavaScript, Node, Java, and more.",REACT_APP_HOME_CALL2ACTION:"Get your [LIGHT]API Key[/LIGHT] now",REACT_APP_DEV_BASE_WEB_URL:"http://localhost:8080",REACT_APP_DEV_BASE_API_URL:"http://0.0.0.0:8080",REACT_APP_BASE_WEB_URL:"https://ip2loc.com",REACT_APP_BASE_API_URL:"https://api.ip2loc.com",REACT_APP_NO_KEY_DAILY_LIMIT_PER_IP:"0",REACT_APP_COLOR:"#355691",REACT_APP_BACKGROUND_COLOR:"#00a8ff",REACT_APP_BACKGROUND_IMAGE:"/img/world.svg"}).REACT_APP_IMPRINT_VAT_ID,n=Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_FLAVOR:"geocoder",REACT_APP_TITLE:"ip2loc",REACT_APP_HOME_TITLE:"IP 2 Location API, detect Language, Currency and more from IP Address",REACT_APP_HOME_TITLE_2_LINE:"Ready to Save Time and Money?",REACT_APP_HOME_TITLE_3_LINE:"",REACT_APP_HOME_H1:"[ACCENT]IP 2 Location API[/ACCENT], detect Language, Currency and more from IP Address",REACT_APP_HOME_H2:"",REACT_APP_HOME_HERO_SHOT_H2:"[ACCENT]Benefit[/ACCENT] from ip2loc's [ACCENT]reliable[/ACCENT] and [ACCENT]developer-friendly[/ACCENT] tools.",REACT_APP_HOME_HERO_WHY_0:"The Power of Geolocation: Use it for Targeted Advertising, Fraud Prevention, Website Localization, Content Personalization, Geotargeting and much more.",REACT_APP_HOME_HERO_WHY_1:"Targeted Advertising: Tailoring ads based on geographic location of website visitors.",REACT_APP_HOME_HERO_WHY_2:"Fraud Prevention: Detecting fraudulent activities by comparing IP location with user's billing or shipping address.",REACT_APP_HOME_HERO_WHY_3:"Website Localization: Automatically presenting website in appropriate language and currency based on visitor's location.",REACT_APP_HOME_HERO_WHY_4:"Content Personalization: Personalizing website content based on visitor's location.",REACT_APP_HOME_HERO_WHY_5:"Targeting regions or countries with marketing campaigns.",REACT_APP_HOME_TITLE_FREE:"Free contingent: 15.000 Requests per month!",REACT_APP_HOME_TEST_IT:"Geolocation is a powerful tool that businesses can use to target their advertising, prevent fraud, localize their website, personalize content, and target specific locations for their products or services. IP 2 Location API is a popular geolocation service that can detect a user's location, language, currency, and other details from their IP address.",REACT_APP_KEYWORDS:"ip api, ip to location api, geoip api, ip to country api",REACT_APP_DESCRIPTION:"IP to location REST API using JSON, XML and Yaml supporting PHP, JavaScript, Node, Java, and more.",REACT_APP_HOME_CALL2ACTION:"Get your [LIGHT]API Key[/LIGHT] now",REACT_APP_DEV_BASE_WEB_URL:"http://localhost:8080",REACT_APP_DEV_BASE_API_URL:"http://0.0.0.0:8080",REACT_APP_BASE_WEB_URL:"https://ip2loc.com",REACT_APP_BASE_API_URL:"https://api.ip2loc.com",REACT_APP_NO_KEY_DAILY_LIMIT_PER_IP:"0",REACT_APP_COLOR:"#355691",REACT_APP_BACKGROUND_COLOR:"#00a8ff",REACT_APP_BACKGROUND_IMAGE:"/img/world.svg"}).REACT_APP_IMPRINT_COMPANY_REGISTER,r=Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_FLAVOR:"geocoder",REACT_APP_TITLE:"ip2loc",REACT_APP_HOME_TITLE:"IP 2 Location API, detect Language, Currency and more from IP Address",REACT_APP_HOME_TITLE_2_LINE:"Ready to Save Time and Money?",REACT_APP_HOME_TITLE_3_LINE:"",REACT_APP_HOME_H1:"[ACCENT]IP 2 Location API[/ACCENT], detect Language, Currency and more from IP Address",REACT_APP_HOME_H2:"",REACT_APP_HOME_HERO_SHOT_H2:"[ACCENT]Benefit[/ACCENT] from ip2loc's [ACCENT]reliable[/ACCENT] and [ACCENT]developer-friendly[/ACCENT] tools.",REACT_APP_HOME_HERO_WHY_0:"The Power of Geolocation: Use it for Targeted Advertising, Fraud Prevention, Website Localization, Content Personalization, Geotargeting and much more.",REACT_APP_HOME_HERO_WHY_1:"Targeted Advertising: Tailoring ads based on geographic location of website visitors.",REACT_APP_HOME_HERO_WHY_2:"Fraud Prevention: Detecting fraudulent activities by comparing IP location with user's billing or shipping address.",REACT_APP_HOME_HERO_WHY_3:"Website Localization: Automatically presenting website in appropriate language and currency based on visitor's location.",REACT_APP_HOME_HERO_WHY_4:"Content Personalization: Personalizing website content based on visitor's location.",REACT_APP_HOME_HERO_WHY_5:"Targeting regions or countries with marketing campaigns.",REACT_APP_HOME_TITLE_FREE:"Free contingent: 15.000 Requests per month!",REACT_APP_HOME_TEST_IT:"Geolocation is a powerful tool that businesses can use to target their advertising, prevent fraud, localize their website, personalize content, and target specific locations for their products or services. IP 2 Location API is a popular geolocation service that can detect a user's location, language, currency, and other details from their IP address.",REACT_APP_KEYWORDS:"ip api, ip to location api, geoip api, ip to country api",REACT_APP_DESCRIPTION:"IP to location REST API using JSON, XML and Yaml supporting PHP, JavaScript, Node, Java, and more.",REACT_APP_HOME_CALL2ACTION:"Get your [LIGHT]API Key[/LIGHT] now",REACT_APP_DEV_BASE_WEB_URL:"http://localhost:8080",REACT_APP_DEV_BASE_API_URL:"http://0.0.0.0:8080",REACT_APP_BASE_WEB_URL:"https://ip2loc.com",REACT_APP_BASE_API_URL:"https://api.ip2loc.com",REACT_APP_NO_KEY_DAILY_LIMIT_PER_IP:"0",REACT_APP_COLOR:"#355691",REACT_APP_BACKGROUND_COLOR:"#00a8ff",REACT_APP_BACKGROUND_IMAGE:"/img/world.svg"}).REACT_APP_IMPRINT_SUPERVISORY_AUTHORITY;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Legal"),s.a.createElement("h1",{className:"page-title"},"Imprint"),s.a.createElement("p",{className:"page-subtitle"},"Legal information and company details according to applicable regulations.")))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-content-card"},s.a.createElement("div",{className:"page-meta"},"Last updated: ","2025-12-22"),s.a.createElement("p",null,"Information obligation according to \xa75 E-Commerce Law, \xa714 Corporate Code, \xa763 Trade Regulations and Disclosure Obligation according to \xa725 Media Act."),s.a.createElement("div",{className:"imprint-info"},s.a.createElement("h3",null,"ip2loc"),s.a.createElement("address",null,"Roman Hochst\xf6ger",s.a.createElement("br",null),"Gartenstra\xdfe 21",s.a.createElement("br",null),"3300 Amstetten",s.a.createElement("br",null),"Austria")),s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"Contact:"),s.a.createElement("span",{className:"imprint-value"},s.a.createElement("a",{href:"/contact"},"Contact Form"))),e&&s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"Email:"),s.a.createElement("span",{className:"imprint-value"},s.a.createElement("a",{href:"mailto:".concat(e)},e))),a&&s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"Phone:"),s.a.createElement("span",{className:"imprint-value"},a)),s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"Member of:"),s.a.createElement("span",{className:"imprint-value"},"WKO, UBIT")),t&&s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"VAT ID:"),s.a.createElement("span",{className:"imprint-value"},t)),n&&s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"Register:"),s.a.createElement("span",{className:"imprint-value"},n)),r&&s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"Authority:"),s.a.createElement("span",{className:"imprint-value"},r)),s.a.createElement("div",{className:"imprint-row"},s.a.createElement("span",{className:"imprint-label"},"Professional Law:"),s.a.createElement("span",{className:"imprint-value"},"Trade Regulations: ",s.a.createElement("a",{href:"https://www.ris.bka.gv.at",target:"_blank",rel:"noopener noreferrer"},"www.ris.bka.gv.at"))),s.a.createElement("h2",null,"Company"),s.a.createElement("p",null,"Learn more about how we operate and how our dataset is sourced on our ",s.a.createElement("a",{href:"/company"},"Company")," page."),s.a.createElement("h2",null,"Disclaimer"),s.a.createElement("p",null,"We are constantly developing the contents of this website and strive to provide correct and up-to-date information."),s.a.createElement("p",null,"Unfortunately, we cannot assume any liability for the correctness of all content on this website, especially for those provided by third parties."),s.a.createElement("p",null,"If you notice any problematic or illegal content, please contact us immediately. You will find the contact details above."))))),s.a.createElement(Te,null))}}]),a}(n.Component),Va=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Privacy Policy - ip2loc"}},{key:"render",value:function(){var e=Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_FLAVOR:"geocoder",REACT_APP_TITLE:"ip2loc",REACT_APP_HOME_TITLE:"IP 2 Location API, detect Language, Currency and more from IP Address",REACT_APP_HOME_TITLE_2_LINE:"Ready to Save Time and Money?",REACT_APP_HOME_TITLE_3_LINE:"",REACT_APP_HOME_H1:"[ACCENT]IP 2 Location API[/ACCENT], detect Language, Currency and more from IP Address",REACT_APP_HOME_H2:"",REACT_APP_HOME_HERO_SHOT_H2:"[ACCENT]Benefit[/ACCENT] from ip2loc's [ACCENT]reliable[/ACCENT] and [ACCENT]developer-friendly[/ACCENT] tools.",REACT_APP_HOME_HERO_WHY_0:"The Power of Geolocation: Use it for Targeted Advertising, Fraud Prevention, Website Localization, Content Personalization, Geotargeting and much more.",REACT_APP_HOME_HERO_WHY_1:"Targeted Advertising: Tailoring ads based on geographic location of website visitors.",REACT_APP_HOME_HERO_WHY_2:"Fraud Prevention: Detecting fraudulent activities by comparing IP location with user's billing or shipping address.",REACT_APP_HOME_HERO_WHY_3:"Website Localization: Automatically presenting website in appropriate language and currency based on visitor's location.",REACT_APP_HOME_HERO_WHY_4:"Content Personalization: Personalizing website content based on visitor's location.",REACT_APP_HOME_HERO_WHY_5:"Targeting regions or countries with marketing campaigns.",REACT_APP_HOME_TITLE_FREE:"Free contingent: 15.000 Requests per month!",REACT_APP_HOME_TEST_IT:"Geolocation is a powerful tool that businesses can use to target their advertising, prevent fraud, localize their website, personalize content, and target specific locations for their products or services. IP 2 Location API is a popular geolocation service that can detect a user's location, language, currency, and other details from their IP address.",REACT_APP_KEYWORDS:"ip api, ip to location api, geoip api, ip to country api",REACT_APP_DESCRIPTION:"IP to location REST API using JSON, XML and Yaml supporting PHP, JavaScript, Node, Java, and more.",REACT_APP_HOME_CALL2ACTION:"Get your [LIGHT]API Key[/LIGHT] now",REACT_APP_DEV_BASE_WEB_URL:"http://localhost:8080",REACT_APP_DEV_BASE_API_URL:"http://0.0.0.0:8080",REACT_APP_BASE_WEB_URL:"https://ip2loc.com",REACT_APP_BASE_API_URL:"https://api.ip2loc.com",REACT_APP_NO_KEY_DAILY_LIMIT_PER_IP:"0",REACT_APP_COLOR:"#355691",REACT_APP_BACKGROUND_COLOR:"#00a8ff",REACT_APP_BACKGROUND_IMAGE:"/img/world.svg"}).REACT_APP_IMPRINT_EMAIL;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Legal"),s.a.createElement("h1",{className:"page-title"},"Privacy Policy"),s.a.createElement("p",{className:"page-subtitle"},"How we collect, use, and protect your personal information.")))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-content-card"},s.a.createElement("div",{className:"page-meta"},"Last updated: ","2025-12-19"),s.a.createElement("p",null,"The protection of your personal data is important to us. This privacy policy describes, at a high level, how we process personal data when you visit our website and use our services."),s.a.createElement("h2",null,"Controller & Contact"),s.a.createElement("p",null,"Controller information is available in our ",s.a.createElement("a",{href:"/imprint"},"Imprint"),". For privacy-related questions, contact us via the ",s.a.createElement("a",{href:"/contact"},"contact form"),e?s.a.createElement(s.a.Fragment,null," or at ",s.a.createElement("a",{href:"mailto:".concat(e)},e)):"","."),s.a.createElement("h2",null,"What We Process"),s.a.createElement("p",null,"Depending on how you use our services, we may process:"),s.a.createElement("ul",null,s.a.createElement("li",null,"Account and contact data (e.g. email address) when you create an account or contact us"),s.a.createElement("li",null,"Technical data (e.g. IP address, device/browser information) required to deliver and secure the website"),s.a.createElement("li",null,"Usage and security signals to prevent abuse and ensure reliability"),s.a.createElement("li",null,"Billing-related data when you subscribe to a paid plan")),s.a.createElement("p",null,"We aim to minimize data and retain it only as long as needed for the respective purpose or as required by law."),s.a.createElement("h2",null,"Cookies & Consent"),s.a.createElement("p",null,"We use cookies and similar technologies for essential functionality (e.g. authentication/session), and\u2014depending on your choice\u2014for analytics and marketing."),s.a.createElement("p",null,"Your consent choice is stored so we can remember your preferences on subsequent visits."),s.a.createElement("p",null,"You can change or revoke consent in your browser settings (e.g. by deleting stored consent data) and by adjusting cookie settings. Disabling certain cookies may limit functionality."),s.a.createElement("h2",null,"Tag Management & Analytics"),s.a.createElement("p",null,"We may use Google Tag Manager to manage website tags. Analytics measurement is performed only if you consent to analytics cookies (depending on our current tag configuration)."),s.a.createElement("p",null,"Where possible, we configure analytics to reduce personal data and avoid collecting unnecessary identifiers."),s.a.createElement("h2",null,"Payments"),s.a.createElement("p",null,"For payments we use Stripe as a payment service provider. Stripe processes payment information to complete transactions. Refer to Stripe\u2019s privacy policy for details:"," ",s.a.createElement("a",{href:"https://stripe.com/privacy",target:"_blank",rel:"noopener noreferrer"},"stripe.com/privacy"),"."),s.a.createElement("h2",null,"Abuse Prevention"),s.a.createElement("p",null,"To protect our forms and services against abuse, we may use automated abuse-prevention mechanisms (e.g. CAPTCHA-like services) which process technical signals to distinguish humans from bots."),s.a.createElement("h2",null,"Your Rights"),s.a.createElement("p",null,"In principle, you have the following rights regarding your stored data:"),s.a.createElement("ul",null,s.a.createElement("li",null,"Right to information"),s.a.createElement("li",null,"Right to correction"),s.a.createElement("li",null,"Right to deletion"),s.a.createElement("li",null,"Right to restriction"),s.a.createElement("li",null,"Right to data portability"),s.a.createElement("li",null,"Right to revocation and objection")),s.a.createElement("p",null,"If you believe that the processing of your data violates data protection law, you can contact us via ",s.a.createElement("a",{href:"/contact"},"contact")," and/or lodge a complaint with your competent supervisory authority."),s.a.createElement("h2",null,"More Transparency"),s.a.createElement("p",null,"For live uptime and historical availability, see ",s.a.createElement("a",{href:"/system-status"},"System Status"),". For information about data sourcing and update cadence, see ",s.a.createElement("a",{href:"/company"},"Company"),"."))))),s.a.createElement(Te,null))}}]),a}(n.Component),Ja=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Company - ip2loc"}},{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Company"),s.a.createElement("h1",{className:"page-title"},"About ","ip2loc"),s.a.createElement("p",{className:"page-subtitle"},"Transparency about how we operate, where our data comes from, and how updates work.")))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-content-card"},s.a.createElement("div",{className:"page-meta"},"Last updated: ","2025-12-22"),s.a.createElement("h2",null,"At a Glance"),s.a.createElement("ul",null,s.a.createElement("li",null,"Operator details: see our ",s.a.createElement("a",{href:"/imprint"},"Imprint")),s.a.createElement("li",null,"Privacy & data processing: see our ",s.a.createElement("a",{href:"/dataprotection"},"Privacy Policy")),s.a.createElement("li",null,"Live uptime & recent history: ",s.a.createElement("a",{href:"/system-status"},"System Status")),s.a.createElement("li",null,"Use case examples: ",s.a.createElement("a",{href:"/#use-cases"},"Homepage section"))),s.a.createElement("h2",null,"What We Do"),s.a.createElement("p",null,"ip2loc"," provides an IP geolocation API that helps developers enrich IP addresses with location and network context (e.g. country, city, timezone, ASN/ISP where available)."),s.a.createElement("p",null,"ip2loc"," is designed as a lightweight, developer-friendly service for IP enrichment and contextual signals, not as a sole source of truth for legal decisions."),s.a.createElement("h2",null,"Service History & Domain"),s.a.createElement("p",null,"We understand that domain history matters for trust and procurement. Here is the short operational timeline of our IP geolocation service:"),s.a.createElement("p",{className:"text-muted"},"This timeline is provided for transparency at a high level, to the best of our knowledge, and is not a contractual commitment. For binding operator information, see our ",s.a.createElement("a",{href:"/imprint"},"Imprint"),"."),s.a.createElement("ul",null,s.a.createElement("li",null,"Technical development history since ",s.a.createElement("strong",null,"1999"),", including use for geo-based access restrictions."),s.a.createElement("li",null,"In ",s.a.createElement("strong",null,"2006"),", used for additional use cases (including geo-based access restrictions for selected web content)."),s.a.createElement("li",null,"Operated as a standalone service since ",s.a.createElement("strong",null,"2013")," (initially without public marketing and made available under other domains)."),s.a.createElement("li",null,"Major redevelopment work started in ",s.a.createElement("strong",null,"2018"),"."),s.a.createElement("li",null,"As part of a website refresh, the domain ",s.a.createElement("strong",null,"ip2loc.com")," was introduced in ",s.a.createElement("strong",null,"2019"),".")),s.a.createElement("h2",null,"Data Sources (High-Level)"),s.a.createElement("p",null,"Our dataset is built from multiple sources. Depending on the data field, we combine and reconcile information from public registries and other upstream sources. We continuously work to improve coverage and consistency."),s.a.createElement("p",null,"The exact composition of upstream sources and field availability can evolve over time."),s.a.createElement("h2",null,"Update Cadence & TTL"),s.a.createElement("p",null,"Update frequency depends on the data type and the underlying source: some inputs change frequently and can be updated multiple times per day, others update daily, and some are naturally more stable. In addition, certain lookups may be cached for performance and protected by a time-to-live (TTL), so changes may take some time to propagate end-to-end."),s.a.createElement("p",null,"If you need field-level details for your specific use case (e.g. compliance, audits, or procurement), contact us via the ",s.a.createElement("a",{href:"/contact"},"contact form"),"."),s.a.createElement("h2",null,"Transparency"),s.a.createElement("p",null,"We publish operational status and uptime history on ",s.a.createElement("a",{href:"/system-status"},"System Status"),". For planned maintenance or incidents, check that page for the latest updates."),s.a.createElement("div",{className:"docs-cta-box",style:{marginTop:"36px"}},s.a.createElement("h3",null,"Questions or enterprise requirements?"),s.a.createElement("p",null,"Tell us what you need (volume, fields, compliance, database licensing) and we will help you evaluate fit."),s.a.createElement("div",{style:{display:"flex",gap:"12px",flexWrap:"wrap",justifyContent:"center"}},s.a.createElement("a",{href:"/enterprise",className:"docs-cta-btn"},"API & Volume"),s.a.createElement("a",{href:"/database",className:"docs-cta-btn"},"Database Access"))))))),s.a.createElement(Te,null))}}]),a}(n.Component);var Za={"fraud-prevention":{title:"Fraud Prevention",subtitle:"Reduce fraud risk by adding IP context as a lightweight signal at login and checkout.",illustration:"/img/usecases/fraud-prevention.svg",icon:"shield-alt",defaultInclude:"ip,country_alpha_2,country_name,city,time_zone,is_proxy,is_tor",what:["Catch suspicious sign-ins (unexpected country/region or unusual timezone)","Add consistency checks (e.g. compare with a user\u2019s typical region and billing country where applicable)","Step up verification when risk is high (2FA, manual review) instead of hard-blocking legitimate users"],steps:["Resolve the user\u2019s IP during login or checkout","Compare results against expected context (profile, billing country, past logins)","Apply simple rules or a risk score (start small, iterate)","Trigger step-up actions and log events for auditability"],fields:["country, region, city","timezone","latitude/longitude (optional, for distance/velocity heuristics)","network context (e.g. ASN/ISP where available)","security indicators (e.g. TOR/VPN/proxy signals where available)"],tips:["Treat geolocation as probabilistic\u2014use it as one signal among many.","Expect lower reliability at city-level for mobile networks, VPNs, and large corporate NATs."],exampleResponse:[{key:"country_alpha_2",value:"DE",type:"string"},{key:"country_name",value:"Germany",type:"string"},{key:"city",value:"Nuremberg",type:"string"},{key:"time_zone",value:"Europe/Berlin",type:"string"},{key:"is_proxy",value:"false",type:"boolean"},{key:"is_tor",value:"false",type:"boolean"}],scenarios:[{title:"Stop risky payments before chargebacks",challenge:"Orders that don\u2019t match expected user context can be higher risk (especially when location and network signals look unusual).",actions:["Compare country/region against billing country (where applicable)","If signals are suspicious, step up verification (3DS, manual review) instead of auto-decline","Log the signals you used so rules can be tuned over time"],include:"country_alpha_2,country_name,city,time_zone,is_proxy,is_tor"},{title:"Secure logins and reduce account takeovers",challenge:"Attackers often test credentials from unfamiliar locations or anonymous networks.",actions:["Detect logins from new country/region or unexpected timezone for the account","Trigger 2FA when signals indicate higher risk","Rate-limit suspicious patterns and monitor repeated attempts"],include:"ip,country_alpha_2,city,time_zone,is_proxy,is_tor"},{title:"Protect signup and checkout forms from abuse",challenge:"Abuse and automation can increase support load and degrade conversion.",actions:["Use IP context to decide when to show CAPTCHA / additional verification","Block obvious TOR/proxy traffic only if your product can tolerate false positives","Keep user experience smooth for low-risk traffic"],include:"country_alpha_2,country_name,is_proxy,is_tor"}],faqs:[{q:"Should I block users based on IP location?",a:"In most cases, treat IP geolocation as a signal. Prefer step-up verification (2FA/CAPTCHA/manual review) over hard-blocking to avoid false positives."},{q:"How reliable is city-level geolocation for fraud decisions?",a:"City-level can be less reliable for mobile networks, VPNs, and large corporate NATs. Country and timezone tend to be more stable signals."},{q:"How do I keep this privacy-friendly?",a:"Store only what you need (prefer aggregated metrics over raw IPs). Document your purpose and align with your privacy policy and consent settings."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"Check live status",href:"/system-status"}]},"content-personalization":{title:"Content Personalization",subtitle:"Reduce friction by setting smart defaults for language, timezone, and regional content.",illustration:"/img/usecases/content-personalization.svg",icon:"sliders-h",defaultInclude:"country_alpha_2,country_name,city,time_zone,currency_code,country_dialing_code",what:["Show region-appropriate defaults from the first visit","Reduce onboarding form fields by auto-filling location context","Improve relevance without relying on persistent personal profiles"],steps:["Resolve the visitor\u2019s IP on first visit or during signup","Set defaults (timezone, region, content variant) and always provide an override","Cache results for performance and refresh when needed (TTL-based)"],fields:["country, region, city","timezone","latitude/longitude (optional, for nearby location experiences)"],tips:["Avoid forced redirects\u2014prefer a suggestion banner or preselected defaults.","Always store the user\u2019s explicit preference when they override defaults."],exampleResponse:[{key:"country_alpha_2",value:"DE",type:"string"},{key:"country_name",value:"Germany",type:"string"},{key:"time_zone",value:"Europe/Berlin",type:"string"},{key:"currency_code",value:"EUR",type:"string"},{key:"country_dialing_code",value:"49",type:"string"}],scenarios:[{title:"Smart forms with fewer fields",challenge:"Long forms increase drop-off. Users abandon when they have to type obvious location details.",actions:["Pre-fill country and dialing code where appropriate","Offer a manual override and remember it once chosen","Use timezone to format dates and scheduling defaults"],include:"country_alpha_2,country_name,country_dialing_code,time_zone,city"},{title:"Local currency and region-aware defaults",challenge:"A one-size-fits-all experience makes international users work harder to understand pricing and content.",actions:["Default currency display and locale settings based on IP context","Personalize content variants (copy, testimonials, docs) by region","Avoid forced redirects\u2014use suggestions instead"],include:"country_alpha_2,country_name,currency_code,time_zone"},{title:"Timezone-aware experiences",challenge:"Scheduling and reporting feels broken when default timezone is wrong.",actions:["Default to local timezone for dashboards and reports","Use timezone to schedule emails and maintenance windows","Let users change timezone and store their preference"],include:"time_zone,country_alpha_2"}],faqs:[{q:"Should I redirect users based on country automatically?",a:"Prefer a suggestion banner or a preselected default. Forced redirects can feel jarring and can be wrong with VPNs or travelers."},{q:"What should I store?",a:"Store the user\u2019s explicit preference (language/currency) when they choose it. Avoid storing raw IPs unless you have a clear need."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"More use cases",href:"/#use-cases"}]},"targeted-advertising":{title:"Targeted Advertising",subtitle:"Localize landing pages and measure outcomes by region (where permitted by law and your policies).",illustration:"/img/usecases/targeted-advertising.svg",icon:"bullseye",defaultInclude:"country_alpha_2,country_name,country_eu_member,continent_code,city,time_zone",what:["Route visitors to region-specific landing pages and offers","Apply geo-based campaign rules only where permitted (and where consent requirements are met)","Measure performance by country/region with aggregated reporting"],steps:["Resolve IP at page load (server-side or edge where possible)","Select a localized variant (copy, currency defaults, compliance banner, etc.)","Store only what you need\u2014prefer aggregated metrics over raw IP storage"],fields:["country, region, city","continent / EU membership (where available)","timezone (optional, for scheduling/analytics segmentation)"],tips:["Use geolocation for localization and segmentation\u2014not for identity or sensitive decisions.","Align with your consent and privacy policies before enabling marketing tags."],exampleResponse:[{key:"country_alpha_2",value:"DE",type:"string"},{key:"country_name",value:"Germany",type:"string"},{key:"country_eu_member",value:"true",type:"boolean"},{key:"continent_code",value:"EU",type:"string"},{key:"time_zone",value:"Europe/Berlin",type:"string"}],scenarios:[{title:"Localized landing pages by region",challenge:"Users convert better when the first page matches their context (language, compliance, region-specific copy).",actions:["Select a localized variant at page load (server-side where possible)","Keep an explicit locale switcher and remember the choice","Use aggregated reporting to compare regions"],include:"country_alpha_2,country_name,continent_code,time_zone"},{title:"Compliance-aware flows",challenge:"Different regions can have different consent/compliance requirements.",actions:["Use EU membership as one signal for showing GDPR-related UI (not as legal advice)","Prefer user consent and explicit settings over assumptions","Keep consent state separate from geolocation logic"],include:"country_eu_member,country_alpha_2,country_name"},{title:"Geo segmentation for marketing analytics",challenge:"You want region-level insights without building a complex pipeline.",actions:["Attach country/region tags to events (aggregated where possible)","Measure conversion by geography to guide campaign budgets","Avoid storing raw IPs for longer than needed"],include:"country_alpha_2,country_name,city"}],faqs:[{q:"Can IP geolocation be wrong for ad targeting?",a:"Yes\u2014VPNs, proxies, and mobile carrier routing can affect results. Use it for segmentation and localization, not as a strict identity signal."},{q:"Do I need consent for geolocation-based personalization?",a:"Requirements depend on what you do with the data and your jurisdiction. Align implementation with your privacy policy and consent settings."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"Privacy policy",href:"/dataprotection"}]},"compliance-screening":{title:"Compliance & Sanctions Screening",subtitle:"Verify user locations against sanctioned regions and enforce geographic access policies in real time.",icon:"gavel",defaultInclude:"ip,country_alpha_2,country_name,is_proxy,is_tor",what:["Screen visitor origins against embargoed or sanctioned jurisdictions","Detect proxy and VPN usage that may indicate location spoofing","Log geographic context for audit trails and regulatory reporting"],steps:["Resolve the user's IP at login, checkout, or account creation","Check country against your sanctions/embargo list","Flag proxy or Tor usage for manual review","Log all decisions with full context for audit purposes"],fields:["country (ISO alpha-2 code)","is_proxy (VPN/proxy detection)","is_tor (Tor exit node detection)","organization / ISP"],tips:["Sanctions lists change frequently \u2014 keep your blocklist updated and version-controlled.","Proxy detection is probabilistic. Combine with other signals before making hard-block decisions."],exampleResponse:[{key:"country_alpha_2",value:"IR",type:"string"},{key:"country_name",value:"Iran",type:"string"},{key:"is_proxy",value:"true",type:"boolean"},{key:"is_tor",value:"false",type:"boolean"}],scenarios:[{title:"Block access from embargoed countries",challenge:"Regulations require you to deny service to users in certain jurisdictions.",actions:["Resolve IP and compare country against your embargo list","Show a clear, non-technical error page explaining the restriction","Log the event for compliance reporting"],include:"country_alpha_2,country_name,is_proxy,is_tor"},{title:"Detect location spoofing via proxy",challenge:"Users may use VPNs or proxies to circumvent geographic restrictions.",actions:["Check is_proxy and is_tor flags alongside country data","Require additional verification when proxy is detected from a sensitive region","Combine IP intelligence with other identity signals for final decision"],include:"country_alpha_2,is_proxy,is_tor"}],faqs:[{q:"How accurate is country-level detection for compliance?",a:"Country-level accuracy is typically above 99%. However, VPN and proxy users may appear from a different country. Always check proxy/Tor flags as additional signals."},{q:"Should I hard-block based on IP alone?",a:"IP geolocation should be one layer in your compliance stack. Combine it with identity verification, billing address checks, and documented procedures."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"Check live status",href:"/system-status"}]},"geo-fencing":{title:"Geo-Fencing & Access Control",subtitle:"Restrict or grant access to content, services, or pricing based on precise visitor geography.",icon:"map-marked-alt",defaultInclude:"ip,country_alpha_2,country_name,region,city,postal_code",what:["Enforce regional licensing and content distribution rights","Serve region-specific pricing or product availability","Gate features or promotions to specific geographic areas"],steps:["Resolve the visitor's IP at the edge or application layer","Match country, region, or postal code against your geo-fence rules","Serve the appropriate content variant or access decision","Cache rules at the edge for sub-millisecond enforcement"],fields:["country, region, city","postal code","latitude/longitude (optional, for radius-based fences)"],tips:["City and postal code accuracy varies \u2014 use country or region for critical decisions.","Provide clear messaging when content is restricted, and offer alternatives where possible."],exampleResponse:[{key:"country_alpha_2",value:"US",type:"string"},{key:"region",value:"California",type:"string"},{key:"city",value:"Mountain View",type:"string"},{key:"postal_code",value:"94043",type:"string"}],scenarios:[{title:"Regional content licensing",challenge:"Media rights often differ by country or region, requiring geographic enforcement.",actions:["Check country against your licensing agreement territories","Serve a localized catalog or show an unavailability notice","Log access attempts for rights holder reporting"],include:"country_alpha_2,country_name,region"},{title:"Location-based promotions",challenge:"You want to offer deals or features only in specific markets.",actions:["Define geo-fence rules by country, region, or postal code","Serve promotional content to matching visitors","Measure conversion by geography to optimize campaigns"],include:"country_alpha_2,region,city,postal_code"}],faqs:[{q:"How precise is postal code detection?",a:"Postal code accuracy varies by country and ISP. It works well in urban areas but may be less reliable for mobile networks. Use it as a suggestion, not a guarantee."},{q:"Can users bypass geo-fencing with a VPN?",a:"Yes. Combine geo-fencing with proxy detection (is_proxy flag) for more robust enforcement."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"More use cases",href:"/#use-cases"}]},"bot-detection":{title:"Bot & Proxy Detection",subtitle:"Identify automated traffic, VPNs, and Tor exit nodes to protect your platform from abuse.",icon:"robot",defaultInclude:"ip,is_proxy,is_tor,organization,country_alpha_2",what:["Detect datacenter IPs and known proxy/VPN ranges","Identify Tor exit nodes used to anonymize malicious activity","Enrich your existing security pipeline with network-level signals"],steps:["Resolve the visitor's IP on every request or at session start","Check is_proxy, is_tor, and organization fields","Apply risk scoring: datacenter + proxy = higher risk","Rate-limit or challenge suspicious traffic instead of hard-blocking"],fields:["is_proxy (VPN/proxy detection)","is_tor (Tor exit node check)","organization / ISP (datacenter vs residential)","country (for geographic anomaly detection)"],tips:["Not all proxy traffic is malicious \u2014 legitimate users use VPNs for privacy.","Combine IP intelligence with behavioral signals (request rate, user agent, session patterns) for better accuracy."],exampleResponse:[{key:"is_proxy",value:"true",type:"boolean"},{key:"is_tor",value:"false",type:"boolean"},{key:"organization",value:"DataCenter LLC",type:"string"},{key:"country_alpha_2",value:"NL",type:"string"}],scenarios:[{title:"Protect signup and login forms",challenge:"Bots create fake accounts and brute-force credentials from datacenter IPs.",actions:["Check is_proxy and organization on signup and login","Show CAPTCHA or rate-limit when datacenter or proxy is detected","Log flagged attempts for security review"],include:"is_proxy,is_tor,organization,country_alpha_2"},{title:"Scraping and API abuse prevention",challenge:"Automated scrapers and abusive API clients often use rotating proxies.",actions:["Enrich rate-limiter decisions with proxy and datacenter detection","Apply stricter limits for traffic from known proxy ranges","Monitor organization field for datacenter-heavy traffic patterns"],include:"ip,is_proxy,organization"}],faqs:[{q:"Will this block legitimate VPN users?",a:"The is_proxy flag detects VPNs but doesn't recommend blocking. Use it as a signal to adjust friction (CAPTCHA, rate limits) rather than hard-blocking."},{q:"How often is the proxy database updated?",a:"Our proxy and Tor detection databases are updated continuously. Check the documentation for current coverage details."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"Check live status",href:"/system-status"}]},"dynamic-pricing":{title:"Dynamic Pricing & Tax",subtitle:"Adapt pricing, currency display, and tax rules automatically based on buyer location.",icon:"tags",defaultInclude:"country_alpha_2,country_name,country_eu_member,currency_code,time_zone",what:["Display prices in local currency from the first page view","Apply correct VAT/tax rules based on buyer jurisdiction","Offer region-specific pricing tiers or promotions"],steps:["Resolve the buyer's IP at page load or checkout","Set currency display and tax rules based on country and EU membership","Allow manual override and persist buyer preferences","Log geographic context for tax reporting"],fields:["country (for tax jurisdiction)","EU membership (for VAT/reverse charge logic)","currency code","timezone (for billing period alignment)"],tips:["Always provide a currency/country switcher \u2014 IP detection is a smart default, not a mandate.","EU membership is useful for VAT logic but verify with your tax advisor for edge cases."],exampleResponse:[{key:"country_alpha_2",value:"GB",type:"string"},{key:"country_name",value:"United Kingdom",type:"string"},{key:"country_eu_member",value:"false",type:"boolean"},{key:"currency_code",value:"GBP",type:"string"},{key:"time_zone",value:"Europe/London",type:"string"}],scenarios:[{title:"Automatic currency and VAT display",challenge:"International buyers see confusing prices when currency and tax don't match their location.",actions:["Default currency display based on IP-detected country","Apply VAT for EU members, exclude for non-EU (with proper override)","Show clear tax breakdown at checkout"],include:"country_alpha_2,country_eu_member,currency_code"},{title:"Region-specific pricing tiers",challenge:"You want to offer purchasing power parity or regional promotions.",actions:["Map countries to pricing tiers in your backend","Use IP country detection to select the default tier","Allow manual country selection for edge cases (VPN users, travelers)"],include:"country_alpha_2,country_name,currency_code"}],faqs:[{q:"Should I rely on IP detection for tax decisions?",a:"Use IP detection as a default signal, but always verify with billing address at checkout. Tax authorities typically require billing address as the primary evidence."},{q:"What about EU reverse charge?",a:"The eu_member flag helps route logic, but reverse charge requires a valid VAT ID. Use IP detection for the initial flow, then validate the VAT ID separately."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"More use cases",href:"/#use-cases"}]},"website-localization":{title:"Website Localization",subtitle:"Offer the right language and currency from the first page view\u2014without asking the user.",illustration:"/img/usecases/website-localization.svg",icon:"globe",defaultInclude:"country_alpha_2,country_name,country_emoji,currency_code,time_zone,city",what:["Set locale and currency defaults automatically","Offer regional domains or content variants where it improves UX","Make international visitors feel \u201cat home\u201d while keeping control in their hands"],steps:["Resolve IP on first visit","Apply non-destructive defaults (language, currency) and show a switcher","Persist the user\u2019s choice once they select a preference"],fields:["country","currency (where available)","timezone","postal code (where available)"],tips:["Prefer a gentle suggestion over forced redirects.","Provide a clear language/currency switcher and remember the selection."],exampleResponse:[{key:"country_alpha_2",value:"DE",type:"string"},{key:"country_name",value:"Germany",type:"string"},{key:"country_emoji",value:"\ud83c\udde9\ud83c\uddea",type:"string"},{key:"currency_code",value:"EUR",type:"string"},{key:"time_zone",value:"Europe/Berlin",type:"string"}],scenarios:[{title:"Language and currency defaults",challenge:"International visitors bounce when content and prices feel unfamiliar.",actions:["Default currency display and locale using IP context","Show a language/currency switcher and remember the user\u2019s selection","Avoid forced redirects; use a gentle suggestion instead"],include:"country_alpha_2,country_name,country_emoji,currency_code,time_zone"},{title:"Region-specific content and docs",challenge:"Different regions may need different messaging, FAQs, and compliance copy.",actions:["Serve region-specific content blocks (shipping, taxes, support hours)","Keep it reversible and user-controlled","Measure impact using aggregated geo metrics"],include:"country_alpha_2,country_name,city,time_zone"}],faqs:[{q:"Is city-level accurate enough for localization?",a:"City-level accuracy varies. For most localization, country + timezone are usually sufficient, with a user-controlled override."},{q:"What\u2019s the safest UX pattern?",a:"Preselect defaults and allow a one-click override. Remember the user\u2019s explicit choice."}],nextLinks:[{label:"Read API docs",href:"/documentation"},{label:"More use cases",href:"/#use-cases"}]}};var Qa=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={copiedId:null},t.copyToClipboard=t.copyToClipboard.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){var e=this.props.match&&this.props.match.params?this.props.match.params.slug:null,a=e?Za[e]:null;document.title=(a&&a.title?a.title:"Use Case")+" - ip2loc"}},{key:"copyToClipboard",value:function(e,a){var t=this;navigator.clipboard&&"function"===typeof navigator.clipboard.writeText&&navigator.clipboard.writeText(e).then((function(){t.setState({copiedId:a}),setTimeout((function(){return t.setState({copiedId:null})}),2e3)}))}},{key:"render",value:function(){var e=this,a=this.props.match&&this.props.match.params?this.props.match.params.slug:null,t=a?Za[a]:null,n=Object.entries(Za).filter((function(e){return Object(Xe.a)(e,1)[0]!==a})).map((function(e){var a=Object(Xe.a)(e,2),t=a[0],n=a[1];return{slug:t,title:n.title,icon:n.icon||"bolt"}}));return t?s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Use Case"),s.a.createElement("h1",{className:"page-title"},t.title),s.a.createElement("p",{className:"page-subtitle"},t.subtitle),s.a.createElement("div",{className:"hero-cta usecase-hero-cta"},s.a.createElement("a",{href:"/login",className:"btn btn-primary btn-hero-primary"},"Get an API key \u2192"),s.a.createElement("a",{href:"/documentation",className:"btn btn-outline-secondary btn-hero-secondary"},"View docs"),s.a.createElement("a",{href:"/system-status",className:"btn btn-outline-secondary btn-hero-secondary"},"Live status")),t.illustration?s.a.createElement("img",{className:"page-hero-illustration",src:t.illustration,alt:"".concat(t.title," illustration"),loading:"lazy"}):null))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-content-card"},s.a.createElement("div",{className:"page-meta"},s.a.createElement("a",{href:"/#use-cases"},"Use cases")," \xb7 ",s.a.createElement("a",{href:"/documentation"},"Documentation")),s.a.createElement("h2",null,"Key Building Blocks"),s.a.createElement("div",{className:"usecase-pill-grid"},(t.fields||[]).map((function(e){return s.a.createElement("div",{className:"usecase-pill",key:e},s.a.createElement(b.a,{icon:"check-circle"}),s.a.createElement("span",null,e))}))),s.a.createElement("h2",null,"How This Helps"),s.a.createElement("ul",null,t.what.map((function(e){return s.a.createElement("li",{key:e},e)}))),Array.isArray(t.scenarios)&&t.scenarios.length>0&&s.a.createElement(s.a.Fragment,null,s.a.createElement("h2",null,"Common Scenarios"),s.a.createElement("div",{className:"usecase-scenarios"},t.scenarios.map((function(n,r){var l="".concat(a,"-scenario-").concat(r),c=n.include||t.defaultInclude,i="".concat("https://api.ip2loc.com","/YOUR_API_KEY/detect?include=").concat(c);return s.a.createElement("div",{className:"docs-endpoint-card usecase-scenario-card",key:l},s.a.createElement("div",{className:"usecase-scenario-head"},s.a.createElement("div",{className:"usecase-scenario-icon"},s.a.createElement(b.a,{icon:t.icon||"bolt"})),s.a.createElement("div",{className:"usecase-scenario-title"},n.title)),n.challenge?s.a.createElement("p",{className:"usecase-muted"},s.a.createElement("span",{className:"usecase-label"},"Challenge:")," ",n.challenge):null,Array.isArray(n.actions)&&n.actions.length>0?s.a.createElement(s.a.Fragment,null,s.a.createElement("div",{className:"usecase-label"},"Approach"),s.a.createElement("ul",{className:"usecase-tight-list"},n.actions.map((function(e){return s.a.createElement("li",{key:e},e)})))):null,s.a.createElement("div",{className:"endpoint-header",style:{marginTop:"16px"}},s.a.createElement("span",{className:"endpoint-method",style:{background:"#0ea5e9"}},"GET"),s.a.createElement("span",{className:"endpoint-label"},"Recommended request")),s.a.createElement("div",{className:"endpoint-url-row"},s.a.createElement("code",{className:"endpoint-url"},i),s.a.createElement("button",{className:"endpoint-copy ".concat(e.state.copiedId===l?"copied":""),onClick:function(){return e.copyToClipboard(i,l)}},e.state.copiedId===l?"\u2713":"Copy")),s.a.createElement("p",{className:"endpoint-desc"},"Tip: use ",s.a.createElement("code",null,"include")," to keep payloads small and fast."))})))),Array.isArray(t.steps)&&t.steps.length>0&&s.a.createElement(s.a.Fragment,null,s.a.createElement("h2",null,"Suggested Implementation"),s.a.createElement("ol",null,t.steps.map((function(e){return s.a.createElement("li",{key:e},e)})))),s.a.createElement("h2",null,"See It in Action"),s.a.createElement("p",null,"Copy a ready-to-run request and test with your own API key. For more examples and responses, see the"," ",s.a.createElement("a",{href:"/documentation#endpoints"},"documentation"),"."),s.a.createElement("div",{className:"docs-endpoint-card"},s.a.createElement("div",{className:"endpoint-header"},s.a.createElement("span",{className:"endpoint-method"},"GET"),s.a.createElement("span",{className:"endpoint-label"},"Detect current IP (selected fields)")),s.a.createElement("div",{className:"endpoint-url-row"},s.a.createElement("code",{className:"endpoint-url"},"".concat("https://api.ip2loc.com","/YOUR_API_KEY/detect?include=").concat(t.defaultInclude)),s.a.createElement("button",{className:"endpoint-copy ".concat(this.state.copiedId==="".concat(a,"-see-it")?"copied":""),onClick:function(){return e.copyToClipboard("".concat("https://api.ip2loc.com","/YOUR_API_KEY/detect?include=").concat(t.defaultInclude),"".concat(a,"-see-it"))}},this.state.copiedId==="".concat(a,"-see-it")?"\u2713":"Copy")),s.a.createElement("p",{className:"endpoint-desc"},"Prefer proof over promises: check ",s.a.createElement("a",{href:"/system-status"},"live uptime")," and recent history.")),s.a.createElement("h2",null,"Example Output (Selected)"),s.a.createElement("div",{className:"use-case-code"},s.a.createElement("code",null,"{",t.exampleResponse.map((function(e,a){return s.a.createElement("div",{key:e.key},s.a.createElement("span",{className:"code-key"},'"',e.key,'"'),": ",function(e){return"boolean"===e.type||"number"===e.type?s.a.createElement("span",{className:"code-boolean"},e.value):s.a.createElement("span",{className:"code-string"},'"',e.value,'"')}(e),a===t.exampleResponse.length-1?"":",")})),"}")),Array.isArray(t.tips)&&t.tips.length>0&&s.a.createElement(s.a.Fragment,null,s.a.createElement("h2",null,"Notes"),s.a.createElement("ul",null,t.tips.map((function(e){return s.a.createElement("li",{key:e},e)})))),Array.isArray(t.faqs)&&t.faqs.length>0&&s.a.createElement(s.a.Fragment,null,s.a.createElement("h2",null,"FAQ"),s.a.createElement("div",{className:"usecase-faq"},t.faqs.map((function(e){return s.a.createElement("details",{className:"usecase-faq-item",key:e.q},s.a.createElement("summary",null,e.q),s.a.createElement("div",{className:"usecase-faq-body"},s.a.createElement("p",null,e.a)))})))),n.length>0&&s.a.createElement(s.a.Fragment,null,s.a.createElement("h2",null,"Related Use Cases"),s.a.createElement("div",{className:"usecase-related"},n.map((function(e){return s.a.createElement("a",{className:"usecase-related-card",href:"/use-cases/".concat(e.slug),key:e.slug},s.a.createElement("div",{className:"usecase-related-icon"},s.a.createElement(b.a,{icon:e.icon})),s.a.createElement("div",{className:"usecase-related-title"},e.title))})))),s.a.createElement("h2",null,"Next Steps"),s.a.createElement("ul",null,t.nextLinks.map((function(e){return s.a.createElement("li",{key:e.href},s.a.createElement("a",{href:e.href},e.label))})),s.a.createElement("li",null,s.a.createElement("a",{href:"/contact"},"Ask about enterprise requirements"))),s.a.createElement("div",{className:"docs-cta-box",style:{marginTop:"36px"}},s.a.createElement("h3",null,"Build and validate in minutes"),s.a.createElement("p",null,"Get an API key, integrate quickly, and validate fit with real requests."),s.a.createElement("a",{href:"/login",className:"docs-cta-btn"},"Get an API Key \u2192"),s.a.createElement("div",{style:{marginTop:"14px"}},s.a.createElement("a",{href:"/system-status",style:{color:"rgba(255,255,255,0.95)",fontWeight:500,textDecoration:"underline"}},"See live status"),s.a.createElement("span",{style:{color:"rgba(255,255,255,0.85)"}}," \xb7 "),s.a.createElement("a",{href:"/enterprise",style:{color:"rgba(255,255,255,0.95)",fontWeight:500,textDecoration:"underline"}},"Talk to sales"))))))),s.a.createElement(Te,null)):s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill nav-padding"},s.a.createElement("div",{className:"page-hero"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-hero-content"},s.a.createElement("span",{className:"page-badge"},"Use Cases"),s.a.createElement("h1",{className:"page-title"},"Use case not found"),s.a.createElement("p",{className:"page-subtitle"},"This page doesn\u2019t exist. See the use cases on the homepage.")))),s.a.createElement("div",{className:"page-content"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"page-content-card"},s.a.createElement("a",{href:"/#use-cases"},"Back to use cases \u2192"))))),s.a.createElement(Te,null))}}]),a}(n.Component),$a=t(94),Xa=function(e){function a(e){var t;return Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),t.state={planTitle:"",isPlanChange:!1,isUpgrade:!1,scheduledDate:null,isPlanActivation:!1,baseWebUrl:"https://ip2loc.com"},t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Registration Success",this.fetchPlan()}},{key:"fetchPlan",value:function(){var e=Object(ga.a)(Ea.a.mark((function e(){var a,t,n,s,r,l,c,i;return Ea.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=E.a.parse(this.props.location.search),t="".concat(this.state.baseWebUrl,"/user/plans/").concat(a.plan),n="true"===a.change,s="true"===a.upgrade,r=a.scheduled||null,l="true"===a.activate,this.setState({isPlanChange:n,isUpgrade:s,scheduledDate:r,isPlanActivation:l}),e.prev=7,e.next=10,fetch(t,{method:"POST",headers:{"Content-Type":"application/json"}});case 10:if((c=e.sent).ok){e.next=13;break}return e.abrupt("return");case 13:return e.next=15,c.json();case 15:(i=e.sent).success&&this.setState({planTitle:i.plan.title}),e.next=22;break;case 19:e.prev=19,e.t0=e.catch(7),console.error("Fetch error:",e.t0);case 22:case"end":return e.stop()}}),e,this,[[7,19]])})));return function(){return e.apply(this,arguments)}}()}]),Object(m.a)(a,[{key:"getTitle",value:function(){var e=this.state,a=e.isPlanChange,t=e.isUpgrade,n=e.scheduledDate;return e.isPlanActivation?"Plan Activated Successfully":a?t?"Plan Upgraded Successfully":n?"Plan Change Scheduled":"Plan Changed Successfully":"Registration Successful"}},{key:"getMessage",value:function(){var e=this.state,a=e.isPlanChange,t=e.isUpgrade,n=e.scheduledDate,r=e.planTitle;return e.isPlanActivation?s.a.createElement(s.a.Fragment,null,"Your ",s.a.createElement("strong",null,r)," plan is now active. Your new limits are available immediately."):a?t?s.a.createElement(s.a.Fragment,null,"Your plan has been upgraded to ",s.a.createElement("strong",null,r),". Your new limits are active immediately."):n?s.a.createElement(s.a.Fragment,null,"Your downgrade to ",s.a.createElement("strong",null,r)," has been scheduled. It will take effect on ",s.a.createElement("strong",null,n),"."):s.a.createElement(s.a.Fragment,null,"Your plan has been changed to ",s.a.createElement("strong",null,r),"."):s.a.createElement(s.a.Fragment,null,"You have successfully signed up for the ",s.a.createElement("strong",null,r)," plan.")}},{key:"render",value:function(){var e=this.state,a=e.isPlanChange,t=e.scheduledDate,n=e.isPlanActivation,r=!a&&!n;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,null),s.a.createElement("main",{className:"flex-fill"},s.a.createElement("div",{className:"success-page"},s.a.createElement(f.a,null,s.a.createElement("div",{id:"registrationSuccess",className:"success-card"},s.a.createElement("div",{className:"success-icon"},s.a.createElement(b.a,{icon:t?"clock":"check-circle"})),s.a.createElement("h1",null,this.getTitle()),s.a.createElement("p",{className:"success-message"},this.getMessage()),r&&s.a.createElement("div",{className:"success-info"},s.a.createElement(b.a,{icon:"envelope",className:"info-icon"}),s.a.createElement("p",null,"Please check your email inbox for an activation link. If you haven't received the email within 5 minutes, please check your spam folder or"," ",s.a.createElement("a",{href:this.state.baseWebUrl+"/contact"},"contact us")," for assistance.")),(a||n)&&s.a.createElement("div",{className:"success-info"},s.a.createElement(b.a,{icon:"envelope",className:"info-icon"}),s.a.createElement("p",null,"A confirmation email has been sent to your inbox with details about this change.")),s.a.createElement("div",{className:"success-actions"},s.a.createElement("a",{href:"/dashboard",className:"btn-primary-custom"},s.a.createElement(b.a,{icon:"tachometer-alt",className:"mr-2"}),"Go to Dashboard")))))),s.a.createElement(Te,null))}}]),a}(n.Component),et=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e));var n=Ha(e.plans||[]),s=Wa(n,e.currentPlanKey);return t.state={sortedPlans:n,selectedIndex:s>=0?s:0},t.handleSliderChange=t.handleSliderChange.bind(Object(y.a)(t)),t.handlePlanAction=t.handlePlanAction.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidUpdate",value:function(e){if(e.plans!==this.props.plans||e.currentPlanKey!==this.props.currentPlanKey){var a=Ha(this.props.plans||[]),t=Wa(a,this.props.currentPlanKey);this.setState({sortedPlans:a,selectedIndex:t>=0?t:0})}}},{key:"handleSliderChange",value:function(e){this.setState({selectedIndex:parseInt(e.target.value,10)})}},{key:"handlePlanAction",value:function(){var e=this.state,a=e.sortedPlans[e.selectedIndex];a&&this.props.onPlanAction&&this.props.onPlanAction(a)}},{key:"render",value:function(){var e=this.props.planInfo,a=this.state,t=a.sortedPlans,n=a.selectedIndex;if(!t||0===t.length)return s.a.createElement("div",{className:"plan-slider-card"},s.a.createElement("p",null,"No plans available."));var r,l=n===t.length,c=l?null:t[n],i=this.props.currentPlanKey,o=t.find((function(e){return e.key===i})),m=e&&e.current&&e.current.quantity||o&&o.quantity||0,u=l?0:parseInt(c.quantity)||0,d=e&&e.usage||null,p=d&&d.used||0,h=d&&d.projectedMonthly||0,E=d&&d.avgRequestsPerDay||0,g=e&&e.current&&e.current.periodEnd||"",y=e&&e.scheduled||null,f=l?{color:"info",label:"Enterprise",tooltip:"Contact us for custom plans"}:function(e,a,t,n,s){var r="number"===typeof t?t:t&&t.used||0,l="number"===typeof t?t:t&&t.projectedMonthly||r,c="number"===typeof t?0:t&&t.avgRequestsPerDay||0;if(n&&n.newPlan&&n.newPlan.key===s)return{type:xa,label:"Scheduled for ".concat(Ta(n.effectiveDate)),color:"info",tooltip:"This plan is already scheduled to take effect at the end of the current period."};if(e===a)return{type:Ia,label:"Current Plan",color:"success",tooltip:"This is your currently active plan."};var i=l;return e>a?e>=i?{type:wa,label:"Covers projected usage",color:"success",tooltip:"Based on your current rate (~".concat(ka(c),"/day), this plan covers your estimated monthly needs.")}:{type:Ra,label:"May not cover full month",color:"warning",tooltip:"Based on your current rate (~".concat(ka(c),"/day), you may need ~").concat(ka(i)," requests/month.")}:e>=i?(e-i)/e*100<20?{type:Ra,label:"Tight fit",color:"warning",tooltip:"Based on your usage (~".concat(ka(c),"/day), this plan is close to your projected needs (~").concat(ka(i),"/month).")}:{type:wa,label:"Covers projected usage",color:"success",tooltip:"Based on your current rate (~".concat(ka(c),"/day), this plan covers your estimated monthly needs.")}:{type:ja,label:"Too small (Need ~".concat(ka(i),"/mo)"),color:"danger",tooltip:"Warning: Based on your usage (~".concat(ka(c),"/day), you need ~").concat(ka(i)," requests/month. This plan would not cover your needs.")}}(u,m,d,y,c.key),v=l?null:function(e,a,t,n){return t&&t.newPlan&&t.newPlan.key===n?Da:e>a?Ma:e0&&v!==La&&s.a.createElement("div",{className:"usage-info-row"},s.a.createElement("span",{className:"usage-info-label"},"Based on your usage (~",ka(E),"/day):"),s.a.createElement("span",{className:"usage-info-value"},"~",ka(h)," requests/month estimated")),s.a.createElement("div",{className:"effectiveness-row"},s.a.createElement("div",{className:"effectiveness-info"},s.a.createElement("span",{className:"effectiveness-label"},l?"CONTACT":P.label),s.a.createElement("span",{className:"effectiveness-value ".concat(l?"enterprise":P.className)},l?"Talk to Sales":P.value)),l?s.a.createElement("a",{href:"/enterprise",className:"plan-action-btn enterprise"},s.a.createElement(b.a,{icon:"building"})," Contact Sales"):s.a.createElement("button",{id:"button".concat(c.key),className:N.className,disabled:N.disabled,onClick:this.handlePlanAction},N.text)),s.a.createElement("div",{className:"plan-features-row"},s.a.createElement("span",{className:"feature-badge"},s.a.createElement(b.a,{icon:"check"}),"HTTPS"),s.a.createElement("span",{className:"feature-separator"},"\xb7"),s.a.createElement("span",{className:"feature-badge"},s.a.createElement(b.a,{icon:"check"}),"All Data Points"),s.a.createElement("span",{className:"feature-separator"},"\xb7"),s.a.createElement("span",{className:"feature-badge"},s.a.createElement(b.a,{icon:"check"}),"24/7 Access")))}}]),a}(n.Component),at=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=e.cookies;return t.state={gtmId:"GTM-PNZNW4R",loading:!1,redirecting:!1,errorMessage:"",name:"",apiKey:"",planKey:"",planTitle:"",quantity:0,period:"",renews_at:"",subscriptions_status:"",baseWebUrl:"https://ip2loc.com",baseApiUrl:"https://api.ip2loc.com",session:void 0!==n.get("session"),plans:[],planInfo:null},t.handleChangePlan=t.handleChangePlan.bind(Object(y.a)(t)),t.handleSliderPlanAction=t.handleSliderPlanAction.bind(Object(y.a)(t)),t.state.session||t.props.history.push("/"),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"handleChangePlan",value:function(e,a){"v2"!==e.type||a?this.props.history.push("/changeplan?plan=".concat(e.key)):this.redirectToStripe(e.key)}},{key:"redirectToStripe",value:function(e){var a=this;this.setState({redirecting:!0,errorMessage:""});var t=this.state.baseWebUrl+"/user/createPaymentLink";fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({plan:e,updatesCheckbox:!0})}).then((function(e){return e.json()})).then((function(e){e.success&&e.redirect_to_url?window.location.href=e.redirect_to_url:a.setState({redirecting:!1,errorMessage:e.detail||"An error occurred. Please try again."})})).catch((function(e){console.error(e),a.setState({redirecting:!1,errorMessage:"Can't reach server. Please try again."})}))}},{key:"handleSliderPlanAction",value:function(e){this.handleChangePlan(e,this.state.subscriptions_status)}},{key:"componentDidMount",value:function(){document.title="Subscription";var e=this.state.baseWebUrl+"/user/subscription";this.fetch(e)}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var a=this;this.setState({loading:!0}),fetch(e).then((function(e){return e.json()})).then((function(e){e.success&&(a.setState({name:e.name}),a.setState({planKey:e.planKey}),a.setState({planTitle:e.planTitle}),a.setState({quantity:e.limit}),a.setState({renews_at:e.renews_at}),a.setState({subscriptions_status:e.subscriptions_status}),a.setState({plans:e.plans}),e.planInfo&&a.setState({planInfo:e.planInfo}))})).catch((function(e){console.error(e)})).finally((function(){return a.setState({loading:!1})}))}))}]),Object(m.a)(a,[{key:"getButtonText",value:function(e){return this.state.planKey===e.key?this.state.renews_at||"Current Plan":Number(this.state.quantity)0&&s.a.createElement(et,{plans:this.state.plans,currentPlanKey:this.state.planKey,planInfo:this.state.planInfo,onPlanAction:this.handleSliderPlanAction}),s.a.createElement("div",{className:"dashboard-card enterprise-cta-card"},s.a.createElement("div",{className:"enterprise-cta-content"},s.a.createElement("div",{className:"enterprise-cta-text"},s.a.createElement("h4",null,"Need more requests?"),s.a.createElement("p",null,"Contact us for custom enterprise solutions with dedicated support and volume pricing.")),s.a.createElement("button",{onClick:function(){return e.props.history.push("/enterprise")},className:"enterprise-cta-btn"},s.a.createElement(b.a,{icon:"building",className:"mr-2"}),"Contact us"))))))),s.a.createElement(Te,null))}}]),a}(n.Component),tt=Object(p.g)(Object(K.b)(at)),nt=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g();var n=e.cookies;return t.state={gtmId:"GTM-PNZNW4R",loading:!1,name:"",paymentMethod:"",invoices:null,baseWebUrl:"https://ip2loc.com",baseApiUrl:"https://api.ip2loc.com",session:void 0!==n.get("session")},t.state.session||t.props.history.push("/"),t.handleRequestUpdateUrl=t.handleRequestUpdateUrl.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="Payment";var e=this.state.baseWebUrl+"/user/payment";this.fetch(e)}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var a=this;this.setState({loading:!0}),fetch(e).then((function(e){return e.json()})).then((function(e){e.success&&(a.setState({apiKey:e.apiKey}),a.setState({name:e.name}),a.setState({usage:e.usage}),a.setState({email:e.email}),a.setState({period:e.period}),a.setState({invoices:e.invoices}),a.setState({paymentMethod:e.payment_method}))})).catch((function(e){console.error(e)})).finally((function(){return a.setState({loading:!1})}))}))},{key:"handleRequestUpdateUrl",value:function(){var e=this,a=this.state.baseWebUrl+"/user/paymentMethodUpdate";fetch(a,{method:"get",headers:{Accept:"application/json"}}).then((function(e){return e.json()})).then((function(a){a.success?e.props.history.push(a.url):console.log(a.body)})).catch((function(e){return console.error(e)})).finally((function(){return e.setState({loading:!1})}))}}]),Object(m.a)(a,[{key:"render",value:function(){return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,{loggedInOnly:!0}),s.a.createElement("main",{className:"flex-fill dashboard-main"},s.a.createElement("div",{className:"dashboard-header"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"dashboard-header-content"},s.a.createElement("div",{className:"dashboard-welcome"},s.a.createElement("h1",null,"Payment"),s.a.createElement("p",null,"Manage your payment methods and view invoices."))))),s.a.createElement(f.a,{className:"dashboard-container"},s.a.createElement(M.a,null,s.a.createElement(U.a,{lg:"3",md:"4",className:"mb-4"},s.a.createElement(Aa,{selected:"payment"})),s.a.createElement(U.a,{lg:"9",md:"8"},s.a.createElement("div",{className:"dashboard-card"},s.a.createElement("div",{className:"dashboard-card-header"},s.a.createElement("div",{className:"card-icon"},s.a.createElement(b.a,{icon:"credit-card"})),s.a.createElement("h3",null,"Payment Method")),s.a.createElement("div",{className:"dashboard-card-body"},s.a.createElement("div",{className:"payment-method-display"},s.a.createElement("div",{className:"payment-method-info"},s.a.createElement("div",{className:"payment-method-icon"},s.a.createElement(b.a,{icon:"credit-card"})),s.a.createElement("div",{className:"payment-method-details"},s.a.createElement("span",{className:"payment-method-label"},"Current Method"),s.a.createElement("span",{id:"paymentMethod",className:"payment-method-value"},this.state.paymentMethod||"No payment method on file"))),s.a.createElement("button",{id:"paymentChangeButton",className:"update-payment-btn",onClick:this.handleRequestUpdateUrl},s.a.createElement(b.a,{icon:"edit",className:"mr-2"}),"Update")))),s.a.createElement("div",{className:"dashboard-card"},s.a.createElement("div",{className:"dashboard-card-header"},s.a.createElement("div",{className:"card-icon"},s.a.createElement(b.a,{icon:"file-invoice"})),s.a.createElement("h3",null,"Invoices")),s.a.createElement("div",{className:"dashboard-card-body"},this.state.invoices&&this.state.invoices.length>0?s.a.createElement("div",{className:"invoices-list"},this.state.invoices.map((function(e,a){return s.a.createElement("a",{key:a,href:e.link,className:"invoice-item",target:"_blank",rel:"noopener noreferrer"},s.a.createElement("div",{className:"invoice-item-left"},s.a.createElement(b.a,{icon:"file-pdf",className:"invoice-icon"}),s.a.createElement("span",{className:"invoice-name"},e.name)),s.a.createElement(b.a,{icon:"external-link-alt",className:"link-icon"}))}))):s.a.createElement("div",{className:"no-invoices"},s.a.createElement(b.a,{icon:"file-invoice",className:"no-invoices-icon"}),s.a.createElement("p",null,"No invoices available yet.")))),s.a.createElement("div",{className:"dashboard-card help-card"},s.a.createElement("div",{className:"help-card-content"},s.a.createElement(b.a,{icon:"question-circle",className:"help-icon"}),s.a.createElement("div",{className:"help-text"},s.a.createElement("h4",null,"Need help with billing?"),s.a.createElement("p",null,"Contact our support team for any billing-related questions.")),s.a.createElement("a",{href:"/contact",className:"help-link"},s.a.createElement(b.a,{icon:"envelope",className:"mr-2"}),"Contact Support"))))))),s.a.createElement(Te,null))}}]),a}(n.Component),st=Object(p.g)(Object(K.b)(nt)),rt=function(e){function a(e){var t;Object(c.a)(this,a),t=Object(i.a)(this,Object(o.a)(a).call(this,e)),g(),console.log("--\x3e");var n=E.a.parse(t.props.location.search);console.log(n.plan);var s="undefined"!==typeof n.plan&&null!=n.plan?n.plan:"";return t.state={gtmId:"GTM-PNZNW4R",plans:[],countries:[["Afghanistan","AF"],["\xc5land Islands","AX"],["Albania","AL"],["Algeria","DZ"],["American Samoa","AS"],["Andorra","AD"],["Angola","AO"],["Anguilla","AI"],["Antarctica","AQ"],["Antigua and Barbuda","AG"],["Argentina","AR"],["Armenia","AM"],["Aruba","AW"],["Australia","AU"],["Austria","AT"],["Azerbaijan","AZ"],["Bahamas","BS"],["Bahrain","BH"],["Bangladesh","BD"],["Barbados","BB"],["Belarus","BY"],["Belgium","BE"],["Belize","BZ"],["Benin","BJ"],["Bermuda","BM"],["Bhutan","BT"],["Bolivia, Plurinational State of","BO"],["Bonaire, Sint Eustatius and Saba","BQ"],["Bosnia and Herzegovina","BA"],["Botswana","BW"],["Bouvet Island","BV"],["Brazil","BR"],["British Indian Ocean Territory","IO"],["Brunei Darussalam","BN"],["Bulgaria","BG"],["Burkina Faso","BF"],["Burundi","BI"],["Cambodia","KH"],["Cameroon","CM"],["Canada","CA"],["Cape Verde","CV"],["Cayman Islands","KY"],["Central African Republic","CF"],["Chad","TD"],["Chile","CL"],["China","CN"],["Christmas Island","CX"],["Cocos (Keeling) Islands","CC"],["Colombia","CO"],["Comoros","KM"],["Congo","CG"],["Congo, the Democratic Republic of the","CD"],["Cook Islands","CK"],["Costa Rica","CR"],["C\xf4te d'Ivoire","CI"],["Croatia","HR"],["Cuba","CU"],["Cura\xe7ao","CW"],["Cyprus","CY"],["Czech Republic","CZ"],["Denmark","DK"],["Djibouti","DJ"],["Dominica","DM"],["Dominican Republic","DO"],["Ecuador","EC"],["Egypt","EG"],["El Salvador","SV"],["Equatorial Guinea","GQ"],["Eritrea","ER"],["Estonia","EE"],["Ethiopia","ET"],["Falkland Islands (Malvinas)","FK"],["Faroe Islands","FO"],["Fiji","FJ"],["Finland","FI"],["France","FR"],["French Guiana","GF"],["French Polynesia","PF"],["French Southern Territories","TF"],["Gabon","GA"],["Gambia","GM"],["Georgia","GE"],["Germany","DE"],["Ghana","GH"],["Gibraltar","GI"],["Greece","GR"],["Greenland","GL"],["Grenada","GD"],["Guadeloupe","GP"],["Guam","GU"],["Guatemala","GT"],["Guernsey","GG"],["Guinea","GN"],["Guinea-Bissau","GW"],["Guyana","GY"],["Haiti","HT"],["Heard Island and McDonald Islands","HM"],["Holy See (Vatican City State)","VA"],["Honduras","HN"],["Hong Kong","HK"],["Hungary","HU"],["Iceland","IS"],["India","IN"],["Indonesia","ID"],["Iran, Islamic Republic of","IR"],["Iraq","IQ"],["Ireland","IE"],["Isle of Man","IM"],["Israel","IL"],["Italy","IT"],["Jamaica","JM"],["Japan","JP"],["Jersey","JE"],["Jordan","JO"],["Kazakhstan","KZ"],["Kenya","KE"],["Kiribati","KI"],["Korea, Democratic People's Republic of","KP"],["Korea, Republic of","KR"],["Kuwait","KW"],["Kyrgyzstan","KG"],["Lao People's Democratic Republic","LA"],["Latvia","LV"],["Lebanon","LB"],["Lesotho","LS"],["Liberia","LR"],["Libya","LY"],["Liechtenstein","LI"],["Lithuania","LT"],["Luxembourg","LU"],["Macao","MO"],["Macedonia, the Former Yugoslav Republic of","MK"],["Madagascar","MG"],["Malawi","MW"],["Malaysia","MY"],["Maldives","MV"],["Mali","ML"],["Malta","MT"],["Marshall Islands","MH"],["Martinique","MQ"],["Mauritania","MR"],["Mauritius","MU"],["Mayotte","YT"],["Mexico","MX"],["Micronesia, Federated States of","FM"],["Moldova, Republic of","MD"],["Monaco","MC"],["Mongolia","MN"],["Montenegro","ME"],["Montserrat","MS"],["Morocco","MA"],["Mozambique","MZ"],["Myanmar","MM"],["Namibia","NA"],["Nauru","NR"],["Nepal","NP"],["Netherlands","NL"],["New Caledonia","NC"],["New Zealand","NZ"],["Nicaragua","NI"],["Niger","NE"],["Nigeria","NG"],["Niue","NU"],["Norfolk Island","NF"],["Northern Mariana Islands","MP"],["Norway","NO"],["Oman","OM"],["Pakistan","PK"],["Palau","PW"],["Palestine, State of","PS"],["Panama","PA"],["Papua New Guinea","PG"],["Paraguay","PY"],["Peru","PE"],["Philippines","PH"],["Pitcairn","PN"],["Poland","PL"],["Portugal","PT"],["Puerto Rico","PR"],["Qatar","QA"],["R\xe9union","RE"],["Romania","RO"],["Russian Federation","RU"],["Rwanda","RW"],["Saint Barth\xe9lemy","BL"],["Saint Helena, Ascension and Tristan da Cunha","SH"],["Saint Kitts and Nevis","KN"],["Saint Lucia","LC"],["Saint Martin (French part)","MF"],["Saint Pierre and Miquelon","PM"],["Saint Vincent and the Grenadines","VC"],["Samoa","WS"],["San Marino","SM"],["Sao Tome and Principe","ST"],["Saudi Arabia","SA"],["Senegal","SN"],["Serbia","RS"],["Seychelles","SC"],["Sierra Leone","SL"],["Singapore","SG"],["Sint Maarten (Dutch part)","SX"],["Slovakia","SK"],["Slovenia","SI"],["Solomon Islands","SB"],["Somalia","SO"],["South Africa","ZA"],["South Georgia and the South Sandwich Islands","GS"],["South Sudan","SS"],["Spain","ES"],["Sri Lanka","LK"],["Sudan","SD"],["Suriname","SR"],["Svalbard and Jan Mayen","SJ"],["Swaziland","SZ"],["Sweden","SE"],["Switzerland","CH"],["Syrian Arab Republic","SY"],["Taiwan, Province of China","TW"],["Tajikistan","TJ"],["Tanzania, United Republic of","TZ"],["Thailand","TH"],["Timor-Leste","TL"],["Togo","TG"],["Tokelau","TK"],["Tonga","TO"],["Trinidad and Tobago","TT"],["Tunisia","TN"],["Turkey","TR"],["Turkmenistan","TM"],["Turks and Caicos Islands","TC"],["Tuvalu","TV"],["Uganda","UG"],["Ukraine","UA"],["United Arab Emirates","AE"],["United Kingdom","GB"],["United States","US"],["United States Minor Outlying Islands","UM"],["Uruguay","UY"],["Uzbekistan","UZ"],["Vanuatu","VU"],["Venezuela, Bolivarian Republic of","VE"],["Viet Nam","VN"],["Virgin Islands, British","VG"],["Virgin Islands, U.S.","VI"],["Wallis and Futuna","WF"],["Western Sahara","EH"],["Yemen","YE"],["Zambia","ZM"],["Zimbabwe","ZW"]],countryPreSelected:"",planSelected:s,baseWebUrl:"https://ip2loc.com",baseApiUrl:"https://api.ip2loc.com",paymentRequired:!1,loading:!1,autoRedirecting:!0,autoRedirectMessage:"Processing...",success:!1,apiKey:"YOUR_API_KEY",firstname:"",lastname:"",address:"",postalcode:"",city:"",state:"",country:"",companyname:"",companywebsite:"",taxid:"",currentPlan:void 0,currentPlanKey:null,periodEnd:null},t.state.plans.forEach((function(e){console.log("value = "+e[0]),e[0]===s&&(t.state.planSelected=e[0],console.log("value == hash"))})),console.log("planSelected --\x3e "+t.state.planSelected),console.log("selectedPlan --\x3e "+s),console.log("paymentRequired --\x3e "+t.state.paymentRequired),t.planSelectDropdown=t.planSelectDropdown.bind(Object(y.a)(t)),t.handleInvalidSubmit=t.handleInvalidSubmit.bind(Object(y.a)(t)),t.handleValidSubmit=t.handleValidSubmit.bind(Object(y.a)(t)),t}return Object(u.a)(a,e),Object(m.a)(a,[{key:"componentDidMount",value:function(){document.title="ChangePlan",this.fetchPlans(),this.fetchPrepareChangeSubscription(this.state.baseWebUrl+"/user/preparechangesubscription")}},{key:"fetchPrepareChangeSubscription",value:function(e){var a=this;fetch(e).then((function(e){return e.json()})).then((function(e){e.success?(console.log("response.country: "+e.firstname),a.setState({firstname:e.firstname,lastname:e.lastname,address:e.address,postalcode:e.postalcode,city:e.city,state:e.state,companyname:e.companyname,companywebsite:e.companywebsite,taxid:e.taxid,currentPlan:e.currentPlan||null,currentPlanKey:e.currentPlanKey||null,periodEnd:e.periodEnd||null}),e.country&&a.setState({countryPreSelected:e.country})):a.setState({currentPlan:null})})).catch((function(e){console.error(e),a.setState({currentPlan:null})}))}},{key:"fetchPlans",value:function(){var e=this,a="".concat(this.state.baseWebUrl,"/user/plans");console.log("--fetch-- userplans: "+a),fetch(a,{method:"POST"}).then((function(e){return e.json()})).then((function(a){if(a.success){var t=a.plans;e.setState({plans:t},(function(){t.find((function(a){return a.key===e.state.planSelected}))||t.length>0&&e.setState({planSelected:t[0].key}),e.setState({paymentRequired:t.some((function(a){return a.key===e.state.planSelected&&a.amount>0}))}),console.log(t),console.log("--ok--"),e.checkAutoRedirect(t)}))}else console.log("--error--")})).catch((function(e){console.error(e),console.log("--error-- beim Abrufen der Pl\xe4ne")}))}},{key:"checkAutoRedirect",value:function(e){var a=this,t=e.find((function(e){return e.key===a.state.planSelected}));setTimeout((function e(){if(void 0!==a.state.currentPlan){if(!a.state.currentPlan&&t){if(t.amount<=0)return console.log("Auto-activate free plan: "+t.key),a.setState({autoRedirectMessage:"Activating your free plan..."}),void a.activateFreePlan(t.key);if(t.amount>0)return console.log("Auto-redirect to Stripe: No current plan + paid plan selected"),a.setState({autoRedirectMessage:"Redirecting to Stripe..."}),void a.redirectToStripe(a.state.planSelected)}a.setState({autoRedirecting:!1})}else setTimeout(e,100)}),200)}},{key:"activateFreePlan",value:function(e){var a=this;this.setState({loading:!0,errorMessage:""});var t=this.state.baseWebUrl+"/user/changeplan";fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({planKey:e})}).then((function(e){return e.json()})).then((function(e){if(e.success){var t="/registrationsuccess?plan="+e.planKey+"&activate=true";a.props.history.push(t)}else a.setState({loading:!1,autoRedirecting:!1,errorMessage:e.detail||"An error occurred. Please try again."})})).catch((function(e){console.error(e),a.setState({loading:!1,autoRedirecting:!1,errorMessage:"Can't reach server. Please try again."})}))}}]),Object(m.a)(a,[{key:"planSelectDropdown",value:function(e){this.setState({paymentRequired:this.state.plans.some((function(a){return a.key==e.target.value&&a.amount>0}))})}},{key:"redirectToStripe",value:function(e){var a=this;this.setState({errorMessage:""});var t=this.state.baseWebUrl+"/user/createPaymentLink";fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({plan:e,updatesCheckbox:!0})}).then((function(e){return e.json()})).then((function(e){e.success&&e.redirect_to_url?window.location.href=e.redirect_to_url:a.setState({loading:!1,errorMessage:e.detail||"An error occurred. Please try again."})})).catch((function(e){console.error(e),a.setState({loading:!1,errorMessage:"Can't reach server. Please try again."})}))}},{key:"handleInvalidSubmit",value:function(e,a,t){console.log("handleInvalidSubmit"),console.log("event = "+JSON.stringify(e,null,2)),console.log("values = "+JSON.stringify(t,null,2)),console.log("errors = "+JSON.stringify(a,null,2))}},{key:"handleValidSubmit",value:function(e,a){var t=this;console.log("handleValidSubmit:CP"),console.log("event = "+JSON.stringify(e,null,2)),console.log("values = "+JSON.stringify(a,null,2)),console.log("Your plan is: "+this.state.planSelected),console.log("Your input email is: "+this.state.email),console.log("baseWebUrl: "+this.state.baseWebUrl);var n=this.state.baseWebUrl+"/user/changeplan";this.setState({loading:!0}),this.setState({errorMessage:""}),fetch(n,{method:"post",headers:{Accept:"application/json"},body:JSON.stringify(a,null,2)}).then((function(e){return e.json()})).then((function(e){if(console.log("response success = "+e.success+", error = "+e.error),e.success)if(void 0!==e.paymentId)console.log("paymentId: "+e.paymentId),t.redirectToStripe(e.planKey);else{var a="/registrationsuccess?plan="+e.planKey+"&change=true";!0===e.isUpgrade?a+="&upgrade=true":e.effectiveDate&&(a+="&scheduled="+encodeURIComponent(e.effectiveDate)),t.props.history.push(a)}else switch(console.log("success: false"+e.error),e.error){case 422:console.log("422: "+e.field+" / "+e.detail),console.log("422: touchedInputs:"+JSON.stringify(t.form.state.touchedInputs,null,2)),t.form.state.invalidInputs[e.field]=e.detail,t.setState({errorMessage:e.detail});break;case 500:t.setState({errorMessage:e.detail});break;case 429:t.setState({errorMessage:"Too many requests, try again later."});break;default:t.setState({errorMessage:"Server Error: "+e.error})}})).catch((function(e){console.error(e),console.log("success: false catch!"),t.setState({errorMessage:"can't reach server"})})).finally((function(){t.setState({loading:!1})}))}},{key:"fetch",value:function(e){function a(a){return e.apply(this,arguments)}return a.toString=function(){return e.toString()},a}((function(e){var a=this;this.setState({loading:!0}),fetch(e).then((function(e){return e.json()})).then((function(e){e.success&&(console.log("apiKey: "+e.apiKey),a.setState({apiKey:e.apiKey}))})).catch((function(e){console.error(e),a.props.history.push("/#")})).finally((function(){return a.setState({loading:!1})}))}))},{key:"render",value:function(){var e=this;return s.a.createElement("div",{className:"d-flex flex-column min-vh-100"},s.a.createElement(z,{loggedInOnly:!0}),s.a.createElement("main",{className:"flex-fill checkout-main"},s.a.createElement("div",{className:"checkout-header"},s.a.createElement(f.a,null,s.a.createElement("div",{className:"checkout-header-content"},s.a.createElement("h1",null,"Change Plan"),s.a.createElement("p",null,"Update your subscription and billing information.")))),s.a.createElement(f.a,{className:"checkout-container"},s.a.createElement(M.a,{className:"justify-content-center"},s.a.createElement(U.a,{lg:"8",md:"10"},this.state.autoRedirecting?s.a.createElement("div",{className:"checkout-card"},s.a.createElement("div",{className:"checkout-card-body text-center py-5"},s.a.createElement("div",{className:"mb-4"},s.a.createElement(b.a,{icon:"spinner",spin:!0,size:"3x",className:"text-primary"})),s.a.createElement("h3",null,this.state.autoRedirectMessage),s.a.createElement("p",{className:"text-muted"},"Please wait..."),this.state.errorMessage&&s.a.createElement(D.a,{color:"danger",className:"mt-3"},this.state.errorMessage))):this.state.success?s.a.createElement("div",{className:"checkout-card"},s.a.createElement("div",{className:"checkout-success"},s.a.createElement("div",{className:"success-icon"},s.a.createElement(b.a,{icon:"check-circle"})),s.a.createElement("h3",null,"Success!"),s.a.createElement("p",null,"Check your email for confirmation."))):s.a.createElement(W.AvForm,{className:"checkout-form",ref:function(a){return e.form=a},onValidSubmit:this.handleValidSubmit,onInvalidSubmit:this.handleInvalidSubmit},this.state.currentPlan&&s.a.createElement("div",{className:"checkout-card current-plan-card"},s.a.createElement("div",{className:"checkout-card-header"},s.a.createElement("div",{className:"card-icon current"},s.a.createElement(b.a,{icon:"check-circle"})),s.a.createElement("h3",null,"Current Plan")),s.a.createElement("div",{className:"checkout-card-body"},s.a.createElement("div",{className:"plan-summary"},s.a.createElement("div",{className:"plan-summary-title"},this.state.currentPlan.title),s.a.createElement("div",{className:"plan-summary-details"},s.a.createElement("span",{className:"plan-summary-requests"},parseInt(this.state.currentPlan.quantity).toLocaleString()," requests/month"),s.a.createElement("span",{className:"plan-summary-price"},"$",this.state.currentPlan.amount,"/month"))))),function(){var a=e.state.plans.find((function(a){return a.key===e.state.planSelected})),t=e.state.currentPlan&&parseInt(e.state.currentPlan.quantity)||0,n=a&&parseInt(a.quantity)||0,r=e.state.currentPlan&&nt,l=e.state.currentPlan&&n ","geocoder"),s.a.createElement(ke,{baseWebUrl:this.state.baseWebUrl,intervalMs:5e3},s.a.createElement(d.a,null,s.a.createElement("div",null,s.a.createElement(p.d,null,s.a.createElement(p.b,{exact:!0,path:"/",component:We}),s.a.createElement(p.b,{exact:!0,path:"/activation",component:Fe}),s.a.createElement(p.b,{exact:!0,path:"/signin",component:Be}),s.a.createElement(p.b,{exact:!0,path:"/contact",component:za}),s.a.createElement(p.b,{exact:!0,path:"/enterprise",component:sa}),s.a.createElement(p.b,{exact:!0,path:"/database",component:la}),s.a.createElement(p.b,{exact:!0,path:"/status",component:$e}),s.a.createElement(p.b,{exact:!0,path:"/system-status",component:ea}),s.a.createElement(p.b,{exact:!0,path:"/documentation",component:Qe}),s.a.createElement(p.b,{exact:!0,path:"/useCases",component:dt}),s.a.createElement(p.b,{exact:!0,path:"/pricing",component:ma}),s.a.createElement(p.b,{exact:!0,path:"/plans",component:Et}),s.a.createElement(p.b,{exact:!0,path:"/login",component:ht}),s.a.createElement(p.b,{exact:!0,path:"/changeplan",component:rt}),s.a.createElement(p.b,{exact:!0,path:"/registrationsuccess",component:Xa}),s.a.createElement(p.b,{exact:!0,path:"/checkemailsso",component:ct}),s.a.createElement(p.b,{exact:!0,path:"/planchangedsuccess",component:lt}),s.a.createElement(p.b,{exact:!0,path:"/faq",component:da}),s.a.createElement(p.b,{exact:!0,path:"/termsandconditions",component:ua}),s.a.createElement(p.b,{exact:!0,path:"/imprint",component:Ya}),s.a.createElement(p.b,{exact:!0,path:"/dataprotection",component:Va}),s.a.createElement(p.b,{exact:!0,path:"/company",component:Ja}),s.a.createElement(p.b,{exact:!0,path:"/use-cases/:slug",component:Qa}),s.a.createElement(p.a,{exact:!0,from:"/use-cases",to:"/#use-cases"}),s.a.createElement(p.b,{exact:!0,path:"/dashboard",component:Fa}),s.a.createElement(p.b,{exact:!0,path:"/subscription",component:tt}),s.a.createElement(p.b,{exact:!0,path:"/payment",component:st}),s.a.createElement(p.b,{exact:!0,path:"/settings",component:ot}),s.a.createElement(p.b,{exact:!0,path:"/checkout",component:_a}),s.a.createElement(p.b,{exact:!0,path:"/updatePaymentDetails",component:yt}),s.a.createElement(p.b,{exact:!0,path:"/checkoutVerification",component:gt}),s.a.createElement(p.b,{exact:!0,path:"/checkoutSuccess",component:Ba}),s.a.createElement(p.b,{exact:!0,path:"/checkoutCancel",component:Ka}),s.a.createElement(p.b,{exact:!0,component:Error})),s.a.createElement(Se.Consumer,null,(function(a){return a&&a.consentRequired?s.a.createElement(Je,{onConsentChange:e.handleConsentUpdate,gtmId:e.state.gtmId}):null})))))}}]),a}(n.Component),Nt=Object(K.b)(bt);Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));l.a.render(s.a.createElement(K.a,null,s.a.createElement(Nt,null)),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()}))}},[[260,152,153]]]);