@tanay-wispr/webflow-package 6.8.9 → 6.8.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/androidWaitlist.js +1 -1
- package/dist/calculator-business.js +1 -1
- package/dist/calculator.js +1 -1
- package/dist/downloads.js +2 -2
- package/dist/global.js +2 -2
- package/dist/login.js +1 -1
- package/dist/pricing.js +1 -1
- package/dist/signup.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var S=()=>document.cookie.split("; ").reduce((n,e)=>{let[t,r]=e.split("=");return n[t]=r,n},{});var m=(n,e,t=10)=>{window.posthog&&typeof window.posthog.capture=="function"?(t<10&&window.posthog.capture("event_fired_after_retry",{event_name:n,retry_attempt:10-t}),window.posthog.capture(n,e)):t>0&&setTimeout(()=>m(n,e,t-1),200)};var s="https://api.wisprflow.ai",u=class extends Error{constructor(t,r,i,a=null){super(i);this.status=t;this.code=r;this.passwordRejectionMessage=a;this.name="AriaAuthError"}},g=n=>n.trim().toLowerCase(),E=(n,e)=>{let t=new Set(["verification_failed","invalid_credentials","sso_required","scim_managed_domain","sign_in_to_continue","identity_conflict","rate_limited","provider_unavailable","validation_error"]);return typeof n.code=="string"?n.code:n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:typeof n.detail=="string"&&t.has(n.detail)?n.detail:{401:"invalid_credentials",409:"identity_conflict",422:"validation_error",429:"rate_limited",503:"provider_unavailable"}[e]??"authentication_failed"},f=(n,e)=>({verification_failed:"Incorrect or expired code. Try again.",invalid_credentials:"Incorrect email or password.",sso_required:"Sign in with SSO to continue.",scim_managed_domain:"This account is managed by your organization.",sign_in_to_continue:"This account already exists. Sign in to continue.",identity_conflict:"We couldn't continue with this account. Try again or contact support.",rate_limited:"Too many attempts. Please wait before trying again.",provider_unavailable:"Verification is temporarily unavailable. Please try again later.",validation_error:"Check your information and try again.",invalid_code:"Enter the six-digit code."})[n]??(e===403?"This sign-in method is not available for this account.":"Unable to complete authentication. Please try again."),N=(n,e,t)=>[n.message,n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"?n.detail.message:null,typeof n.detail=="string"?n.detail:null].find(a=>typeof a=="string"&&a.length>0&&a!==e)??f(e,t),h=(n,e)=>{let t=E(n,e);return new u(e,t,N(n,t,e),e===400&&typeof n.detail=="string"&&n.detail.length>0?n.detail:null)},q=(n,e)=>{let t=E(n,e);return new u(e,t,f(t,e))},y="promo_code",z=4e3,J=new Set([200,400,403,404,409,422]),v=n=>{let{hostname:e}=window.location,t=e.includes("wisprflow.ai")?".wisprflow.ai":e;document.cookie=`${n}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${t}`},C=n=>{if(!n)return"";try{return decodeURIComponent(n).trim()}catch{return""}},F=()=>{let n=S()[y];if(n===void 0)return"";let e=C(n);return e||v(y),e},D=n=>{C(S()[y])===n&&v(y)},B=n=>n instanceof DOMException&&(n.name==="TimeoutError"||n.name==="AbortError"),H=(n,e)=>e===403?"forbidden":e===404?"not_found":e===409?"already_redeemed":n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:e===422?"validation_error":"unknown",R=class{static async signupUser(e){try{let t=`${s}/signup`,i=document.cookie.split(";").find(l=>l.trim().startsWith("trial_promo=")),a=i&&i.trim().split("=")[1];(a==="3mo"||a==="2mo")&&(t+=`?trial_promo=${a}`);let c=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!c.ok)throw new Error(`Signup failed with status ${c.status}`);return console.log("User signed up successfully"),await c.json()}catch(t){throw console.error("Error during signup:",t),t}}static async addRawUserEmail(e){try{let t=await fetch(`${s}/signup_raw_email`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Adding raw user failed with status ${t.status}`);return console.log("Added raw user successfully"),await t.json()}catch(t){throw console.error("Error during raw user signup:",t),t}}static async addToWaitlist(e){try{let t=await fetch(`${s}/add_to_waitlist`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying waitlist failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async applyReferralCode(e){try{let t=await fetch(`${s}/api/v1/referral/apply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying referral code failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async associateAppSumoLicense(e){try{let t=await fetch(`${s}/app_sumo/associate_license_key`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Associating AppSumo license failed with status ${t.status}`);console.log("Successfully associated AppSumo license")}catch(t){throw console.error("Error associating AppSumo license:",t),t}}static async checkUserStatus(e){let t=g(e),r=await fetch(`${s}/user_status?email=${encodeURIComponent(t)}`),i=await r.json().catch(()=>({}));if(!r.ok)throw h(i,r.status);return i}static async requestPasswordReset(e,t){let r=await fetch(`${s}/email/request-reset-password-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:g(e),captcha_token:t})});if(!r.ok){let i=await r.json().catch(()=>({}));throw h(i,r.status)}}static async signUpWithCaptcha(e){let t=await fetch(`${s}/email/signup-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async signInWithCaptcha(e){let t=await fetch(`${s}/email/signin-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async resendVerificationEmailCaptcha(e){let t=await fetch(`${s}/email/resend-verification-email-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async verifyEmailOtp(e){if(!/^[0-9]{6}$/.test(e.code))throw new u(422,"invalid_code",f("invalid_code",422));let t=await fetch(`${s}/email/verify-email-otp`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json().catch(()=>({}));if(!t.ok){let i=q(r,t.status);throw i.code==="rate_limited"||i.code==="provider_unavailable"||i.code==="validation_error"?i:new u(t.status,"verification_failed",f("verification_failed",t.status))}if(r.provider!=="workos"||!r.access_token||!r.refresh_token||!r.user_id||!r.email)throw new u(t.status,"authentication_failed",f("authentication_failed",t.status));return r}static async signInWithEmail(e){let t=await fetch(`${s}/email/signin`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async applyPromoCodeFromCookie(e,t=F()){if(t)try{let r=await fetch(`${s}/api/v1/promos/campaign/apply`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({code:t,source:"web"}),signal:AbortSignal.timeout(z)}),{status:i}=r;if(!J.has(i)){m("promo_cookie_apply",{outcome:"deferred",status:i});return}if(D(t),r.ok){m("promo_cookie_apply",{outcome:"attached",status:i});return}let a=await r.json().catch(()=>({}));m("promo_cookie_apply",{outcome:"rejected",status:i,reason:H(a,i)})}catch(r){console.error("Promo cookie apply deferred:",r),m("promo_cookie_apply",B(r)?{outcome:"deferred",reason:"timeout"}:{outcome:"deferred"})}}static async getSubscriptionStatus(e){return await fetch(`${s}/api/v1/payment/subscription`,{method:"GET",headers:{accept:"application/json",Authorization:e}})}static async getPricingByIp(){let e=await fetch(`${s}/api/v1/payment/pricing/by-ip`,{method:"GET",headers:{accept:"application/json"}});if(!e.ok)throw new Error(`Pricing API failed with status ${e.status}`);return await e.json()}static async createCheckoutSession(e,t,r,i){let a=new URLSearchParams({plan:e,custom_redirect:"true"});r&&a.set("currency",r),i?.trim()&&a.set("promo_code",i.trim());let c=`${s}/api/v1/payment/create-checkout-session?${a}`,l=await fetch(c,{method:"POST",headers:{accept:"application/json",Authorization:t}});if(!l.ok&&l.status!==303)throw new Error(`Checkout request failed (${l.status})`);let d=await l.json();if(!d||typeof d.url!="string"||!d.url)throw new Error("Checkout response is missing a URL");return d}static async sendDownloadLink(e,t){return await fetch(`${s}/api/v1/referral/download-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({platform:e,recipient_email:t})})}static async getAndroidWaitlistStats(e){return await fetch(`${s}/api/v1/promos/android_waitlist_rank`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async ensureReferralCode(e){return await fetch(`${s}/api/v1/referral/`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async submitPhoneNumber(e,t){return await fetch(`${s}/api/v1/promos/android_waitlist/phone_number`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${t}`},body:JSON.stringify({phone_number:e})})}static async submitSocialShare(e,t,r){let i=new FormData;return i.append("screenshot",e),await fetch(`${s}/api/v1/promos/android_waitlist/verify_social_share`,{method:"POST",headers:{Authorization:`${t}`},body:i,signal:r})}};var P=R;var ee={supaBaseUrl:"https://dodjkfqhwrzqjwkfnthl.supabase.co",supaBaseKey:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImRvZGprZnFod3J6cWp3a2ZudGhsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTk4ODQzMDcsImV4cCI6MjAzNTQ2MDMwN30.h6EeQ_6kqFeznH25icVUX0Szn9__kc8HoSXAsxxBWG8",redirectUri:`${window.location.origin}/downloads`};var A={usd:"$",gbp:"\xA3",eur:"\u20AC",chf:"CHF",sek:"kr",cad:"$",aud:"$",inr:"\u20B9",jpy:"\xA5",cny:"\xA5",krw:"\u20A9",mxn:"$",brl:"R$",pln:"z\u0142",rub:"\u20BD",ils:"\u20AA",try:"\u20BA",aed:"\u062F.\u0625",sgd:"$",zar:"R",nzd:"$",thb:"\u0E3F",twd:"NT$",czk:"K\u010D"};var Y=1,k=50,b=12,T=k,U=document.querySelector('[data-calculator="employee-number"]'),o=document.querySelector('[data-calculator="rate"]'),O=document.querySelector('[data-calculator="typing-hours-weekly"]'),x=document.querySelector('[data-calculator="typing-hours-monthly"]'),$=document.querySelector('[data-calculator="value-month"]'),j=document.querySelector('[data-calculator="flow-cost"]'),M=document.querySelector('[data-calculator="monthly-saving"]'),W=document.querySelector('[data-calculator="annual-saving"]'),I=document.querySelector('[data-calculator="roi-percent"]');function V(n){let e=n>=1e3?500:50;return Math.round(n/e)*e}function p(n){return n>=1e9?(n/1e9).toFixed(1)+"B":n>=1e6?(n/1e6).toFixed(1)+"M":n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}function _(n){let e=document.createElement("span"),t=getComputedStyle(n);e.style.visibility="hidden",e.style.whiteSpace="pre",e.style.font=t.font,e.textContent=n.value||n.placeholder||"",document.body.appendChild(e),n.style.width=e.offsetWidth+"px",document.body.removeChild(e)}function w(){let n=parseFloat(U?.value??"3")||3,e=parseFloat(o?.value??""),t=isNaN(e)?k:e,r=Math.ceil(n*Y),i=Math.ceil(r*52/12),a=Math.ceil(r*52*t/12),c=Math.ceil(n*b),l=Math.ceil(a-c),d=l*12,L=c>0?Math.round(l/c*100):0;O&&(O.textContent=p(r)),x&&(x.textContent=p(i)),$&&($.textContent=p(a)),j&&(j.textContent=p(c)),M&&(M.textContent=p(l)),W&&(W.textContent=p(d)),I&&(I.textContent=p(L))}document.addEventListener("DOMContentLoaded",()=>{o&&(o.setAttribute("type","text"),o.setAttribute("inputmode","numeric"),o.setAttribute("pattern","\\d*"),o.setAttribute("maxlength","10"),o.value=String(k),_(o),o.addEventListener("input",()=>{o.value=o.value.replace(/\D/g,""),o.value!==""&&+o.value>99999&&(o.value=String(99999)),_(o)}),o.addEventListener("blur",()=>{o.value=o.value.replace(/\D/g,""),o.value===""?o.value=String(T):+o.value>99999&&(o.value=String(99999)),_(o),w()})),[U,o].forEach(n=>{n&&n.addEventListener("input",w)}),w(),P.getPricingByIp().then(n=>{let{currency:e,pricing:t}=n,r=A[e.toLowerCase()]||"$",{price:i,currency_factor:a}=t.FLOW_PRO_YEARLY;b=i/12/a;let c=V(50*(b/12));T=c,o&&(o.value=String(c),_(o)),document.querySelectorAll('[data-calculator="currency-symbol"]').forEach(l=>{l.textContent=r}),w(),console.log(`\u2705 Business calculator: ${e.toUpperCase()} (${r}), cost per seat: ${r}${Math.round(b)}/mo`)}).catch(n=>{console.error("\u274C Business calculator pricing API error:",n)})});})();
|
|
1
|
+
"use strict";(()=>{var S=()=>document.cookie.split("; ").reduce((n,e)=>{let[t,r]=e.split("=");return n[t]=r,n},{});var g=(n,e,t=10)=>{window.posthog&&typeof window.posthog.capture=="function"?(t<10&&window.posthog.capture("event_fired_after_retry",{event_name:n,retry_attempt:10-t}),window.posthog.capture(n,e)):t>0&&setTimeout(()=>g(n,e,t-1),200)};var s="https://api.wisprflow.ai",u=class extends Error{constructor(t,r,o,a=null){super(o);this.status=t;this.code=r;this.passwordRejectionMessage=a;this.name="AriaAuthError"}},m=n=>n.trim().toLowerCase(),v=(n,e)=>{let t=new Set(["verification_failed","invalid_credentials","sso_required","scim_managed_domain","sign_in_to_continue","identity_conflict","rate_limited","provider_unavailable","validation_error"]);return typeof n.code=="string"?n.code:n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:typeof n.detail=="string"&&t.has(n.detail)?n.detail:{401:"invalid_credentials",409:"identity_conflict",422:"validation_error",429:"rate_limited",503:"provider_unavailable"}[e]??"authentication_failed"},f=(n,e)=>({verification_failed:"Incorrect or expired code. Try again.",invalid_credentials:"Incorrect email or password.",sso_required:"Sign in with SSO to continue.",scim_managed_domain:"This account is managed by your organization.",sign_in_to_continue:"This account already exists. Sign in to continue.",identity_conflict:"We couldn't continue with this account. Try again or contact support.",rate_limited:"Too many attempts. Please wait before trying again.",provider_unavailable:"Verification is temporarily unavailable. Please try again later.",validation_error:"Check your information and try again.",invalid_code:"Enter the six-digit code."})[n]??(e===403?"This sign-in method is not available for this account.":"Unable to complete authentication. Please try again."),N=(n,e,t)=>[n.message,n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"?n.detail.message:null,typeof n.detail=="string"?n.detail:null].find(a=>typeof a=="string"&&a.length>0&&a!==e)??f(e,t),h=(n,e)=>{let t=v(n,e);return new u(e,t,N(n,t,e),e===400&&typeof n.detail=="string"&&n.detail.length>0?n.detail:null)},q=(n,e)=>{let t=v(n,e);return new u(e,t,f(t,e))},_="promo_code",z=4e3,J=new Set([200,400,403,404,409,422]),E=n=>{let{hostname:e}=window.location,t=e.includes("wisprflow.ai")?".wisprflow.ai":e;document.cookie=`${n}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${t}`},C=n=>{if(!n)return"";try{return decodeURIComponent(n).trim()}catch{return""}},F=()=>{let n=S()[_];if(n===void 0)return"";let e=C(n);return e||E(_),e},D=n=>{C(S()[_])===n&&E(_)},B=n=>n instanceof DOMException&&(n.name==="TimeoutError"||n.name==="AbortError"),H=(n,e)=>e===403?"forbidden":e===404?"not_found":e===409?"already_redeemed":n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:e===422?"validation_error":"unknown",R=class{static async signupUser(e){try{let t=`${s}/signup`,o=document.cookie.split(";").find(l=>l.trim().startsWith("trial_promo=")),a=o&&o.trim().split("=")[1];(a==="3mo"||a==="2mo")&&(t+=`?trial_promo=${a}`);let c=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!c.ok)throw new Error(`Signup failed with status ${c.status}`);return console.log("User signed up successfully"),await c.json()}catch(t){throw console.error("Error during signup:",t),t}}static async addRawUserEmail(e){try{let t=await fetch(`${s}/signup_raw_email`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Adding raw user failed with status ${t.status}`);return console.log("Added raw user successfully"),await t.json()}catch(t){throw console.error("Error during raw user signup:",t),t}}static async addToWaitlist(e){try{let t=await fetch(`${s}/add_to_waitlist`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying waitlist failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async applyReferralCode(e){try{let t=await fetch(`${s}/api/v1/referral/apply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying referral code failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async associateAppSumoLicense(e){try{let t=await fetch(`${s}/app_sumo/associate_license_key`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Associating AppSumo license failed with status ${t.status}`);console.log("Successfully associated AppSumo license")}catch(t){throw console.error("Error associating AppSumo license:",t),t}}static async checkUserStatus(e){let t=m(e),r=await fetch(`${s}/user_status?email=${encodeURIComponent(t)}`),o=await r.json().catch(()=>({}));if(!r.ok)throw h(o,r.status);return o}static async requestPasswordReset(e,t){let r=await fetch(`${s}/email/request-reset-password-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:m(e),captcha_token:t})});if(!r.ok){let o=await r.json().catch(()=>({}));throw h(o,r.status)}}static async signUpWithCaptcha(e){let t=await fetch(`${s}/email/signup-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:m(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async signInWithCaptcha(e){let t=await fetch(`${s}/email/signin-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:m(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async resendVerificationEmailCaptcha(e){let t=await fetch(`${s}/email/resend-verification-email-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:m(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async verifyEmailOtp(e){if(!/^[0-9]{6}$/.test(e.code))throw new u(422,"invalid_code",f("invalid_code",422));let t=await fetch(`${s}/email/verify-email-otp`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json().catch(()=>({}));if(!t.ok){let o=q(r,t.status);throw o.code==="rate_limited"||o.code==="provider_unavailable"||o.code==="validation_error"?o:new u(t.status,"verification_failed",f("verification_failed",t.status))}if(r.provider!=="workos"||!r.access_token||!r.refresh_token||!r.user_id||!r.email)throw new u(t.status,"authentication_failed",f("authentication_failed",t.status));return r}static async signInWithEmail(e){let t=await fetch(`${s}/email/signin`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:m(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw h(r,t.status);return r}static async applyPromoCodeFromCookie(e,t=F()){if(t)try{let r=await fetch(`${s}/api/v1/promos/campaign/apply`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({code:t,source:"web"}),signal:AbortSignal.timeout(z)}),{status:o}=r;if(!J.has(o)){g("promo_cookie_apply",{outcome:"deferred",status:o});return}if(D(t),r.ok){g("promo_cookie_apply",{outcome:"attached",status:o});return}let a=await r.json().catch(()=>({}));g("promo_cookie_apply",{outcome:"rejected",status:o,reason:H(a,o)})}catch(r){console.error("Promo cookie apply deferred:",r),g("promo_cookie_apply",B(r)?{outcome:"deferred",reason:"timeout"}:{outcome:"deferred"})}}static async getSubscriptionStatus(e){return await fetch(`${s}/api/v1/payment/subscription`,{method:"GET",headers:{accept:"application/json",Authorization:e}})}static async getPricingByIp(){let e=await fetch(`${s}/api/v1/payment/pricing/by-ip`,{method:"GET",headers:{accept:"application/json"}});if(!e.ok)throw new Error(`Pricing API failed with status ${e.status}`);return await e.json()}static async createCheckoutSession(e,t,r,o){let a=new URLSearchParams({plan:e,custom_redirect:"true"});r&&a.set("currency",r),o?.trim()&&a.set("promo_code",o.trim());let c=`${s}/api/v1/payment/create-checkout-session?${a}`,l=await fetch(c,{method:"POST",headers:{accept:"application/json",Authorization:t}});if(!l.ok&&l.status!==303)throw new Error(`Checkout request failed (${l.status})`);let d=await l.json();if(!d||typeof d.url!="string"||!d.url)throw new Error("Checkout response is missing a URL");return d}static async sendDownloadLink(e,t){return await fetch(`${s}/api/v1/referral/download-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({platform:e,recipient_email:t})})}static async getAndroidWaitlistStats(e){return await fetch(`${s}/api/v1/promos/android_waitlist_rank`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async ensureReferralCode(e){return await fetch(`${s}/api/v1/referral/`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async submitPhoneNumber(e,t){return await fetch(`${s}/api/v1/promos/android_waitlist/phone_number`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${t}`},body:JSON.stringify({phone_number:e})})}static async submitSocialShare(e,t,r){let o=new FormData;return o.append("screenshot",e),await fetch(`${s}/api/v1/promos/android_waitlist/verify_social_share`,{method:"POST",headers:{Authorization:`${t}`},body:o,signal:r})}};var P=R;var ee={supaBaseUrl:"https://dodjkfqhwrzqjwkfnthl.supabase.co",supaBaseKey:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImRvZGprZnFod3J6cWp3a2ZudGhsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTk4ODQzMDcsImV4cCI6MjAzNTQ2MDMwN30.h6EeQ_6kqFeznH25icVUX0Szn9__kc8HoSXAsxxBWG8",redirectUri:`${window.location.origin}/downloads`};var A={usd:"$",gbp:"\xA3",eur:"\u20AC",chf:"CHF",sek:"kr",cad:"$",aud:"$",inr:"\u20B9",jpy:"\xA5",cny:"\xA5",krw:"\u20A9",mxn:"$",brl:"R$",pln:"z\u0142",rub:"\u20BD",ils:"\u20AA",try:"\u20BA",aed:"\u062F.\u0625",sgd:"$",zar:"R",nzd:"$",thb:"\u0E3F",twd:"NT$",czk:"K\u010D"};var Y=1,k=50,b=12,T=k,I=document.querySelector('[data-calculator="employee-number"]'),i=document.querySelector('[data-calculator="rate"]'),O=document.querySelector('[data-calculator="typing-hours-weekly"]'),x=document.querySelector('[data-calculator="typing-hours-monthly"]'),$=document.querySelector('[data-calculator="value-month"]'),j=document.querySelector('[data-calculator="flow-cost"]'),M=document.querySelector('[data-calculator="monthly-saving"]'),U=document.querySelector('[data-calculator="annual-saving"]'),W=document.querySelector('[data-calculator="roi-percent"]');function V(n){let e=n>=1e3?500:50;return Math.round(n/e)*e}function p(n){return n>=1e9?(n/1e9).toFixed(1)+"B":n>=1e6?(n/1e6).toFixed(1)+"M":n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}function y(n){let e=document.createElement("span"),t=getComputedStyle(n);e.style.visibility="hidden",e.style.whiteSpace="pre",e.style.font=t.font,e.textContent=n.value||n.placeholder||"",document.body.appendChild(e),n.style.width=e.offsetWidth+"px",document.body.removeChild(e)}function w(){let n=parseFloat(I?.value??"3")||3,e=parseFloat(i?.value??""),t=isNaN(e)?k:e,r=Math.ceil(n*Y),o=Math.ceil(r*52/12),a=Math.ceil(r*52*t/12),c=Math.ceil(n*b),l=Math.ceil(a-c),d=l*12,L=c>0?Math.round(l/c*100):0;O&&(O.textContent=p(r)),x&&(x.textContent=p(o)),$&&($.textContent=p(a)),j&&(j.textContent=p(c)),M&&(M.textContent=p(l)),U&&(U.textContent=p(d)),W&&(W.textContent=p(L))}document.addEventListener("DOMContentLoaded",()=>{i&&(i.setAttribute("type","text"),i.setAttribute("inputmode","numeric"),i.setAttribute("pattern","\\d*"),i.setAttribute("maxlength","10"),i.value=String(k),y(i),i.addEventListener("input",()=>{i.value=i.value.replace(/\D/g,""),i.value!==""&&+i.value>99999&&(i.value=String(99999)),y(i)}),i.addEventListener("blur",()=>{i.value=i.value.replace(/\D/g,""),i.value===""?i.value=String(T):+i.value>99999&&(i.value=String(99999)),y(i),w()})),[I,i].forEach(n=>{n&&n.addEventListener("input",w)}),w(),P.getPricingByIp().then(n=>{let{currency:e,pricing:t}=n,r=A[e.toLowerCase()]||"$",{price:o,currency_factor:a}=t.FLOW_PRO_YEARLY;b=o/12/a;let c=V(50*(b/12));T=c,i&&(i.value=String(c),y(i)),document.querySelectorAll('[data-calculator="currency-symbol"]').forEach(l=>{l.textContent=r}),w(),console.log(`\u2705 Business calculator: ${e.toUpperCase()} (${r}), cost per seat: ${r}${Math.round(b)}/mo`)}).catch(n=>{console.error("\u274C Business calculator pricing API error:",n)})});})();
|
package/dist/calculator.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var R=()=>document.cookie.split("; ").reduce((n,e)=>{let[t,r]=e.split("=");return n[t]=r,n},{});var d=(n,e,t=10)=>{window.posthog&&typeof window.posthog.capture=="function"?(t<10&&window.posthog.capture("event_fired_after_retry",{event_name:n,retry_attempt:10-t}),window.posthog.capture(n,e)):t>0&&setTimeout(()=>d(n,e,t-1),200)};var s="https://api.wisprflow.ai",u=class extends Error{constructor(t,r,i,a=null){super(i);this.status=t;this.code=r;this.passwordRejectionMessage=a;this.name="AriaAuthError"}},g=n=>n.trim().toLowerCase(),C=(n,e)=>{let t=new Set(["verification_failed","invalid_credentials","sso_required","scim_managed_domain","sign_in_to_continue","identity_conflict","rate_limited","provider_unavailable","validation_error"]);return typeof n.code=="string"?n.code:n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:typeof n.detail=="string"&&t.has(n.detail)?n.detail:{401:"invalid_credentials",409:"identity_conflict",422:"validation_error",429:"rate_limited",503:"provider_unavailable"}[e]??"authentication_failed"},f=(n,e)=>({verification_failed:"Incorrect or expired code. Try again.",invalid_credentials:"Incorrect email or password.",sso_required:"Sign in with SSO to continue.",scim_managed_domain:"This account is managed by your organization.",sign_in_to_continue:"This account already exists. Sign in to continue.",identity_conflict:"We couldn't continue with this account. Try again or contact support.",rate_limited:"Too many attempts. Please wait before trying again.",provider_unavailable:"Verification is temporarily unavailable. Please try again later.",validation_error:"Check your information and try again.",invalid_code:"Enter the six-digit code."})[n]??(e===403?"This sign-in method is not available for this account.":"Unable to complete authentication. Please try again."),q=(n,e,t)=>[n.message,n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"?n.detail.message:null,typeof n.detail=="string"?n.detail:null].find(a=>typeof a=="string"&&a.length>0&&a!==e)??f(e,t),m=(n,e)=>{let t=C(n,e);return new u(e,t,q(n,t,e),e===400&&typeof n.detail=="string"&&n.detail.length>0?n.detail:null)},z=(n,e)=>{let t=C(n,e);return new u(e,t,f(t,e))},w="promo_code",J=4e3,F=new Set([200,400,403,404,409,422]),P=n=>{let{hostname:e}=window.location,t=e.includes("wisprflow.ai")?".wisprflow.ai":e;document.cookie=`${n}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${t}`},A=n=>{if(!n)return"";try{return decodeURIComponent(n).trim()}catch{return""}},D=()=>{let n=R()[w];if(n===void 0)return"";let e=A(n);return e||P(w),e},Y=n=>{A(R()[w])===n&&P(w)},B=n=>n instanceof DOMException&&(n.name==="TimeoutError"||n.name==="AbortError"),G=(n,e)=>e===403?"forbidden":e===404?"not_found":e===409?"already_redeemed":n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:e===422?"validation_error":"unknown",k=class{static async signupUser(e){try{let t=`${s}/signup`,i=document.cookie.split(";").find(c=>c.trim().startsWith("trial_promo=")),a=i&&i.trim().split("=")[1];(a==="3mo"||a==="2mo")&&(t+=`?trial_promo=${a}`);let l=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!l.ok)throw new Error(`Signup failed with status ${l.status}`);return console.log("User signed up successfully"),await l.json()}catch(t){throw console.error("Error during signup:",t),t}}static async addRawUserEmail(e){try{let t=await fetch(`${s}/signup_raw_email`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Adding raw user failed with status ${t.status}`);return console.log("Added raw user successfully"),await t.json()}catch(t){throw console.error("Error during raw user signup:",t),t}}static async addToWaitlist(e){try{let t=await fetch(`${s}/add_to_waitlist`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying waitlist failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async applyReferralCode(e){try{let t=await fetch(`${s}/api/v1/referral/apply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying referral code failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async associateAppSumoLicense(e){try{let t=await fetch(`${s}/app_sumo/associate_license_key`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Associating AppSumo license failed with status ${t.status}`);console.log("Successfully associated AppSumo license")}catch(t){throw console.error("Error associating AppSumo license:",t),t}}static async checkUserStatus(e){let t=g(e),r=await fetch(`${s}/user_status?email=${encodeURIComponent(t)}`),i=await r.json().catch(()=>({}));if(!r.ok)throw m(i,r.status);return i}static async requestPasswordReset(e,t){let r=await fetch(`${s}/email/request-reset-password-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:g(e),captcha_token:t})});if(!r.ok){let i=await r.json().catch(()=>({}));throw m(i,r.status)}}static async signUpWithCaptcha(e){let t=await fetch(`${s}/email/signup-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async signInWithCaptcha(e){let t=await fetch(`${s}/email/signin-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async resendVerificationEmailCaptcha(e){let t=await fetch(`${s}/email/resend-verification-email-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async verifyEmailOtp(e){if(!/^[0-9]{6}$/.test(e.code))throw new u(422,"invalid_code",f("invalid_code",422));let t=await fetch(`${s}/email/verify-email-otp`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json().catch(()=>({}));if(!t.ok){let i=z(r,t.status);throw i.code==="rate_limited"||i.code==="provider_unavailable"||i.code==="validation_error"?i:new u(t.status,"verification_failed",f("verification_failed",t.status))}if(r.provider!=="workos"||!r.access_token||!r.refresh_token||!r.user_id||!r.email)throw new u(t.status,"authentication_failed",f("authentication_failed",t.status));return r}static async signInWithEmail(e){let t=await fetch(`${s}/email/signin`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async applyPromoCodeFromCookie(e,t=D()){if(t)try{let r=await fetch(`${s}/api/v1/promos/campaign/apply`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({code:t,source:"web"}),signal:AbortSignal.timeout(J)}),{status:i}=r;if(!F.has(i)){d("promo_cookie_apply",{outcome:"deferred",status:i});return}if(Y(t),r.ok){d("promo_cookie_apply",{outcome:"attached",status:i});return}let a=await r.json().catch(()=>({}));d("promo_cookie_apply",{outcome:"rejected",status:i,reason:G(a,i)})}catch(r){console.error("Promo cookie apply deferred:",r),d("promo_cookie_apply",B(r)?{outcome:"deferred",reason:"timeout"}:{outcome:"deferred"})}}static async getSubscriptionStatus(e){return await fetch(`${s}/api/v1/payment/subscription`,{method:"GET",headers:{accept:"application/json",Authorization:e}})}static async getPricingByIp(){let e=await fetch(`${s}/api/v1/payment/pricing/by-ip`,{method:"GET",headers:{accept:"application/json"}});if(!e.ok)throw new Error(`Pricing API failed with status ${e.status}`);return await e.json()}static async createCheckoutSession(e,t,r,i){let a=new URLSearchParams({plan:e,custom_redirect:"true"});r&&a.set("currency",r),i?.trim()&&a.set("promo_code",i.trim());let l=`${s}/api/v1/payment/create-checkout-session?${a}`,c=await fetch(l,{method:"POST",headers:{accept:"application/json",Authorization:t}});if(!c.ok&&c.status!==303)throw new Error(`Checkout request failed (${c.status})`);let p=await c.json();if(!p||typeof p.url!="string"||!p.url)throw new Error("Checkout response is missing a URL");return p}static async sendDownloadLink(e,t){return await fetch(`${s}/api/v1/referral/download-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({platform:e,recipient_email:t})})}static async getAndroidWaitlistStats(e){return await fetch(`${s}/api/v1/promos/android_waitlist_rank`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async ensureReferralCode(e){return await fetch(`${s}/api/v1/referral/`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async submitPhoneNumber(e,t){return await fetch(`${s}/api/v1/promos/android_waitlist/phone_number`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${t}`},body:JSON.stringify({phone_number:e})})}static async submitSocialShare(e,t,r){let i=new FormData;return i.append("screenshot",e),await fetch(`${s}/api/v1/promos/android_waitlist/verify_social_share`,{method:"POST",headers:{Authorization:`${t}`},body:i,signal:r})}};var T=k;var ie={supaBaseUrl:"https://dodjkfqhwrzqjwkfnthl.supabase.co",supaBaseKey:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImRvZGprZnFod3J6cWp3a2ZudGhsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTk4ODQzMDcsImV4cCI6MjAzNTQ2MDMwN30.h6EeQ_6kqFeznH25icVUX0Szn9__kc8HoSXAsxxBWG8",redirectUri:`${window.location.origin}/downloads`};var O={usd:"$",gbp:"\xA3",eur:"\u20AC",chf:"CHF",sek:"kr",cad:"$",aud:"$",inr:"\u20B9",jpy:"\xA5",cny:"\xA5",krw:"\u20A9",mxn:"$",brl:"R$",pln:"z\u0142",rub:"\u20BD",ils:"\u20AA",try:"\u20BA",aed:"\u062F.\u0625",sgd:"$",zar:"R",nzd:"$",thb:"\u0E3F",twd:"NT$",czk:"K\u010D"};var H=40,V=60,v=50,X=22,Z=.5,y=12,x=v,L=document.querySelector('[data-calculator="hours"]'),o=document.querySelector('[data-calculator="rate"]'),$=document.querySelector('[data-calculator="monthly-saving"]'),M=document.querySelector('[data-calculator="annual-saving"]'),I=document.querySelector('[data-calculator="typing-hours"]'),W=document.querySelector('[data-calculator="hour-saved"]'),j=document.querySelector('[data-calculator="time-value"]'),N=document.querySelector('[data-calculator="words"]'),U=document.querySelector('[data-calculator="subscription-cost"]'),S=document.querySelector(".calculator_result-money"),E=S?parseFloat(window.getComputedStyle(S).fontSize):null;function K(n){let e=n>=1e3?500:50;return Math.round(n/e)*e}function h(n){return n>=1e9?(n/1e9).toFixed(1)+"B":n>=1e6?(n/1e6).toFixed(1)+"M":n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}function b(n){let e=document.createElement("span"),t=getComputedStyle(n);e.style.visibility="hidden",e.style.whiteSpace="pre",e.style.font=t.font,e.textContent=n.value||n.placeholder||"",document.body.appendChild(e),n.style.width=e.offsetWidth+"px",document.body.removeChild(e)}function _(){let n=parseFloat(L?.value??"0")||0,e=parseFloat(o?.value??""),t=isNaN(e)?v:e,r=Math.round(n*V*H);N&&(N.textContent=h(r));let i=n*X;I&&(I.textContent=String(Math.round(i)));let a=i*Z;W&&(W.textContent=String(Math.round(a)));let l=a*t;j&&(j.textContent=h(Math.round(l)));let c=Math.round(l-y);if($&&($.textContent=h(c)),M&&(M.textContent=h(c*12)),S&&E!==null){let p=h(c).replace(/\D/g,"").length;S.style.fontSize=(p>=8?E*.8:E)+"px"}}document.addEventListener("DOMContentLoaded",()=>{o&&(o.setAttribute("type","text"),o.setAttribute("inputmode","numeric"),o.setAttribute("pattern","\\d*"),o.setAttribute("maxlength","10"),o.value=String(v),b(o),o.addEventListener("input",()=>{o.value=o.value.replace(/\D/g,""),o.value!==""&&+o.value>9999&&(o.value=String(9999)),b(o)}),o.addEventListener("blur",()=>{o.value=o.value.replace(/\D/g,""),o.value===""?o.value=String(x):+o.value>9999&&(o.value=String(9999)),b(o),_()})),L?.addEventListener("input",_),o?.addEventListener("input",_),_(),T.getPricingByIp().then(n=>{let{currency:e,pricing:t}=n,r=O[e.toLowerCase()]||"$",{price:i,currency_factor:a}=t.FLOW_PRO_YEARLY;y=i/12/a;let l=K(50*(y/12));x=l,o&&(o.value=String(l),b(o)),document.querySelectorAll('[data-calculator="currency-symbol"]').forEach(c=>{c.textContent=r}),U&&(U.textContent=`${r}${h(Math.round(y))}`),_(),console.log(`\u2705 Calculator: ${e.toUpperCase()} (${r}), subscription cost: ${r}${Math.round(y)}/mo`)}).catch(n=>{console.error("\u274C Calculator pricing API error:",n)})});})();
|
|
1
|
+
"use strict";(()=>{var R=()=>document.cookie.split("; ").reduce((n,e)=>{let[t,r]=e.split("=");return n[t]=r,n},{});var d=(n,e,t=10)=>{window.posthog&&typeof window.posthog.capture=="function"?(t<10&&window.posthog.capture("event_fired_after_retry",{event_name:n,retry_attempt:10-t}),window.posthog.capture(n,e)):t>0&&setTimeout(()=>d(n,e,t-1),200)};var s="https://api.wisprflow.ai",u=class extends Error{constructor(t,r,i,a=null){super(i);this.status=t;this.code=r;this.passwordRejectionMessage=a;this.name="AriaAuthError"}},g=n=>n.trim().toLowerCase(),C=(n,e)=>{let t=new Set(["verification_failed","invalid_credentials","sso_required","scim_managed_domain","sign_in_to_continue","identity_conflict","rate_limited","provider_unavailable","validation_error"]);return typeof n.code=="string"?n.code:n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:typeof n.detail=="string"&&t.has(n.detail)?n.detail:{401:"invalid_credentials",409:"identity_conflict",422:"validation_error",429:"rate_limited",503:"provider_unavailable"}[e]??"authentication_failed"},f=(n,e)=>({verification_failed:"Incorrect or expired code. Try again.",invalid_credentials:"Incorrect email or password.",sso_required:"Sign in with SSO to continue.",scim_managed_domain:"This account is managed by your organization.",sign_in_to_continue:"This account already exists. Sign in to continue.",identity_conflict:"We couldn't continue with this account. Try again or contact support.",rate_limited:"Too many attempts. Please wait before trying again.",provider_unavailable:"Verification is temporarily unavailable. Please try again later.",validation_error:"Check your information and try again.",invalid_code:"Enter the six-digit code."})[n]??(e===403?"This sign-in method is not available for this account.":"Unable to complete authentication. Please try again."),q=(n,e,t)=>[n.message,n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"?n.detail.message:null,typeof n.detail=="string"?n.detail:null].find(a=>typeof a=="string"&&a.length>0&&a!==e)??f(e,t),m=(n,e)=>{let t=C(n,e);return new u(e,t,q(n,t,e),e===400&&typeof n.detail=="string"&&n.detail.length>0?n.detail:null)},z=(n,e)=>{let t=C(n,e);return new u(e,t,f(t,e))},w="promo_code",J=4e3,F=new Set([200,400,403,404,409,422]),P=n=>{let{hostname:e}=window.location,t=e.includes("wisprflow.ai")?".wisprflow.ai":e;document.cookie=`${n}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=${t}`},A=n=>{if(!n)return"";try{return decodeURIComponent(n).trim()}catch{return""}},D=()=>{let n=R()[w];if(n===void 0)return"";let e=A(n);return e||P(w),e},Y=n=>{A(R()[w])===n&&P(w)},B=n=>n instanceof DOMException&&(n.name==="TimeoutError"||n.name==="AbortError"),H=(n,e)=>e===403?"forbidden":e===404?"not_found":e===409?"already_redeemed":n.detail&&!Array.isArray(n.detail)&&typeof n.detail=="object"&&typeof n.detail.code=="string"?n.detail.code:e===422?"validation_error":"unknown",k=class{static async signupUser(e){try{let t=`${s}/signup`,i=document.cookie.split(";").find(c=>c.trim().startsWith("trial_promo=")),a=i&&i.trim().split("=")[1];(a==="3mo"||a==="2mo")&&(t+=`?trial_promo=${a}`);let l=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!l.ok)throw new Error(`Signup failed with status ${l.status}`);return console.log("User signed up successfully"),await l.json()}catch(t){throw console.error("Error during signup:",t),t}}static async addRawUserEmail(e){try{let t=await fetch(`${s}/signup_raw_email`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Adding raw user failed with status ${t.status}`);return console.log("Added raw user successfully"),await t.json()}catch(t){throw console.error("Error during raw user signup:",t),t}}static async addToWaitlist(e){try{let t=await fetch(`${s}/add_to_waitlist`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying waitlist failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async applyReferralCode(e){try{let t=await fetch(`${s}/api/v1/referral/apply`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Applying referral code failed with status ${t.status}`)}catch(t){throw console.error("Error applying referral code:",t),t}}static async associateAppSumoLicense(e){try{let t=await fetch(`${s}/app_sumo/associate_license_key`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Associating AppSumo license failed with status ${t.status}`);console.log("Successfully associated AppSumo license")}catch(t){throw console.error("Error associating AppSumo license:",t),t}}static async checkUserStatus(e){let t=g(e),r=await fetch(`${s}/user_status?email=${encodeURIComponent(t)}`),i=await r.json().catch(()=>({}));if(!r.ok)throw m(i,r.status);return i}static async requestPasswordReset(e,t){let r=await fetch(`${s}/email/request-reset-password-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:g(e),captcha_token:t})});if(!r.ok){let i=await r.json().catch(()=>({}));throw m(i,r.status)}}static async signUpWithCaptcha(e){let t=await fetch(`${s}/email/signup-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async signInWithCaptcha(e){let t=await fetch(`${s}/email/signin-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async resendVerificationEmailCaptcha(e){let t=await fetch(`${s}/email/resend-verification-email-captcha`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async verifyEmailOtp(e){if(!/^[0-9]{6}$/.test(e.code))throw new u(422,"invalid_code",f("invalid_code",422));let t=await fetch(`${s}/email/verify-email-otp`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json().catch(()=>({}));if(!t.ok){let i=z(r,t.status);throw i.code==="rate_limited"||i.code==="provider_unavailable"||i.code==="validation_error"?i:new u(t.status,"verification_failed",f("verification_failed",t.status))}if(r.provider!=="workos"||!r.access_token||!r.refresh_token||!r.user_id||!r.email)throw new u(t.status,"authentication_failed",f("authentication_failed",t.status));return r}static async signInWithEmail(e){let t=await fetch(`${s}/email/signin`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,email:g(e.email)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw m(r,t.status);return r}static async applyPromoCodeFromCookie(e,t=D()){if(t)try{let r=await fetch(`${s}/api/v1/promos/campaign/apply`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({code:t,source:"web"}),signal:AbortSignal.timeout(J)}),{status:i}=r;if(!F.has(i)){d("promo_cookie_apply",{outcome:"deferred",status:i});return}if(Y(t),r.ok){d("promo_cookie_apply",{outcome:"attached",status:i});return}let a=await r.json().catch(()=>({}));d("promo_cookie_apply",{outcome:"rejected",status:i,reason:H(a,i)})}catch(r){console.error("Promo cookie apply deferred:",r),d("promo_cookie_apply",B(r)?{outcome:"deferred",reason:"timeout"}:{outcome:"deferred"})}}static async getSubscriptionStatus(e){return await fetch(`${s}/api/v1/payment/subscription`,{method:"GET",headers:{accept:"application/json",Authorization:e}})}static async getPricingByIp(){let e=await fetch(`${s}/api/v1/payment/pricing/by-ip`,{method:"GET",headers:{accept:"application/json"}});if(!e.ok)throw new Error(`Pricing API failed with status ${e.status}`);return await e.json()}static async createCheckoutSession(e,t,r,i){let a=new URLSearchParams({plan:e,custom_redirect:"true"});r&&a.set("currency",r),i?.trim()&&a.set("promo_code",i.trim());let l=`${s}/api/v1/payment/create-checkout-session?${a}`,c=await fetch(l,{method:"POST",headers:{accept:"application/json",Authorization:t}});if(!c.ok&&c.status!==303)throw new Error(`Checkout request failed (${c.status})`);let p=await c.json();if(!p||typeof p.url!="string"||!p.url)throw new Error("Checkout response is missing a URL");return p}static async sendDownloadLink(e,t){return await fetch(`${s}/api/v1/referral/download-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({platform:e,recipient_email:t})})}static async getAndroidWaitlistStats(e){return await fetch(`${s}/api/v1/promos/android_waitlist_rank`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async ensureReferralCode(e){return await fetch(`${s}/api/v1/referral/`,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${e}`}})}static async submitPhoneNumber(e,t){return await fetch(`${s}/api/v1/promos/android_waitlist/phone_number`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${t}`},body:JSON.stringify({phone_number:e})})}static async submitSocialShare(e,t,r){let i=new FormData;return i.append("screenshot",e),await fetch(`${s}/api/v1/promos/android_waitlist/verify_social_share`,{method:"POST",headers:{Authorization:`${t}`},body:i,signal:r})}};var T=k;var ie={supaBaseUrl:"https://dodjkfqhwrzqjwkfnthl.supabase.co",supaBaseKey:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImRvZGprZnFod3J6cWp3a2ZudGhsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTk4ODQzMDcsImV4cCI6MjAzNTQ2MDMwN30.h6EeQ_6kqFeznH25icVUX0Szn9__kc8HoSXAsxxBWG8",redirectUri:`${window.location.origin}/downloads`};var O={usd:"$",gbp:"\xA3",eur:"\u20AC",chf:"CHF",sek:"kr",cad:"$",aud:"$",inr:"\u20B9",jpy:"\xA5",cny:"\xA5",krw:"\u20A9",mxn:"$",brl:"R$",pln:"z\u0142",rub:"\u20BD",ils:"\u20AA",try:"\u20BA",aed:"\u062F.\u0625",sgd:"$",zar:"R",nzd:"$",thb:"\u0E3F",twd:"NT$",czk:"K\u010D"};var G=40,V=60,v=50,X=22,Z=.5,y=12,x=v,L=document.querySelector('[data-calculator="hours"]'),o=document.querySelector('[data-calculator="rate"]'),$=document.querySelector('[data-calculator="monthly-saving"]'),M=document.querySelector('[data-calculator="annual-saving"]'),I=document.querySelector('[data-calculator="typing-hours"]'),U=document.querySelector('[data-calculator="hour-saved"]'),W=document.querySelector('[data-calculator="time-value"]'),j=document.querySelector('[data-calculator="words"]'),N=document.querySelector('[data-calculator="subscription-cost"]'),S=document.querySelector(".calculator_result-money"),E=S?parseFloat(window.getComputedStyle(S).fontSize):null;function K(n){let e=n>=1e3?500:50;return Math.round(n/e)*e}function h(n){return n>=1e9?(n/1e9).toFixed(1)+"B":n>=1e6?(n/1e6).toFixed(1)+"M":n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}function b(n){let e=document.createElement("span"),t=getComputedStyle(n);e.style.visibility="hidden",e.style.whiteSpace="pre",e.style.font=t.font,e.textContent=n.value||n.placeholder||"",document.body.appendChild(e),n.style.width=e.offsetWidth+"px",document.body.removeChild(e)}function _(){let n=parseFloat(L?.value??"0")||0,e=parseFloat(o?.value??""),t=isNaN(e)?v:e,r=Math.round(n*V*G);j&&(j.textContent=h(r));let i=n*X;I&&(I.textContent=String(Math.round(i)));let a=i*Z;U&&(U.textContent=String(Math.round(a)));let l=a*t;W&&(W.textContent=h(Math.round(l)));let c=Math.round(l-y);if($&&($.textContent=h(c)),M&&(M.textContent=h(c*12)),S&&E!==null){let p=h(c).replace(/\D/g,"").length;S.style.fontSize=(p>=8?E*.8:E)+"px"}}document.addEventListener("DOMContentLoaded",()=>{o&&(o.setAttribute("type","text"),o.setAttribute("inputmode","numeric"),o.setAttribute("pattern","\\d*"),o.setAttribute("maxlength","10"),o.value=String(v),b(o),o.addEventListener("input",()=>{o.value=o.value.replace(/\D/g,""),o.value!==""&&+o.value>9999&&(o.value=String(9999)),b(o)}),o.addEventListener("blur",()=>{o.value=o.value.replace(/\D/g,""),o.value===""?o.value=String(x):+o.value>9999&&(o.value=String(9999)),b(o),_()})),L?.addEventListener("input",_),o?.addEventListener("input",_),_(),T.getPricingByIp().then(n=>{let{currency:e,pricing:t}=n,r=O[e.toLowerCase()]||"$",{price:i,currency_factor:a}=t.FLOW_PRO_YEARLY;y=i/12/a;let l=K(50*(y/12));x=l,o&&(o.value=String(l),b(o)),document.querySelectorAll('[data-calculator="currency-symbol"]').forEach(c=>{c.textContent=r}),N&&(N.textContent=`${r}${h(Math.round(y))}`),_(),console.log(`\u2705 Calculator: ${e.toUpperCase()} (${r}), subscription cost: ${r}${Math.round(y)}/mo`)}).catch(n=>{console.error("\u274C Calculator pricing API error:",n)})});})();
|