@buoy-gg/license 7.0.77 → 7.0.79
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/lib/commonjs/LicenseManager.js +2 -2
- package/lib/commonjs/accountKeyNames.js +1 -0
- package/lib/commonjs/config.js +2 -2
- package/lib/commonjs/device-info.js +1 -1
- package/lib/commonjs/device-info.web.js +1 -1
- package/lib/commonjs/fingerprint.js +1 -1
- package/lib/commonjs/fingerprint.web.js +1 -1
- package/lib/commonjs/fingerprintOwner.js +1 -0
- package/lib/commonjs/headless.js +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.web.js +2 -2
- package/lib/module/LicenseManager.js +1 -1
- package/lib/module/accountKeyNames.js +1 -0
- package/lib/module/config.js +1 -1
- package/lib/module/device-info.js +1 -1
- package/lib/module/device-info.web.js +1 -1
- package/lib/module/fingerprint.js +1 -1
- package/lib/module/fingerprint.web.js +1 -1
- package/lib/module/fingerprintOwner.js +1 -0
- package/lib/module/headless.js +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.web.js +1 -1
- package/lib/typescript/commonjs/LicenseManager.d.ts +7 -0
- package/lib/typescript/commonjs/accountKeyNames.d.ts +19 -0
- package/lib/typescript/commonjs/config.d.ts +1 -0
- package/lib/typescript/commonjs/device-info.d.ts +10 -0
- package/lib/typescript/commonjs/device-info.web.d.ts +2 -0
- package/lib/typescript/commonjs/fingerprint.d.ts +1 -1
- package/lib/typescript/commonjs/fingerprint.web.d.ts +1 -1
- package/lib/typescript/commonjs/fingerprintOwner.d.ts +37 -0
- package/lib/typescript/commonjs/headless.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.web.d.ts +1 -0
- package/lib/typescript/module/LicenseManager.d.ts +7 -0
- package/lib/typescript/module/accountKeyNames.d.ts +19 -0
- package/lib/typescript/module/config.d.ts +1 -0
- package/lib/typescript/module/device-info.d.ts +10 -0
- package/lib/typescript/module/device-info.web.d.ts +2 -0
- package/lib/typescript/module/fingerprint.d.ts +1 -1
- package/lib/typescript/module/fingerprint.web.d.ts +1 -1
- package/lib/typescript/module/fingerprintOwner.d.ts +37 -0
- package/lib/typescript/module/headless.d.ts +1 -0
- package/lib/typescript/module/index.d.ts +1 -0
- package/lib/typescript/module/index.web.d.ts +1 -0
- package/lib/web/chunks/LicenseManager-CJHAU3GD.mjs +1 -0
- package/lib/web/chunks/chunk-7T66ARUE.mjs +73 -0
- package/lib/web/index.mjs +1 -1
- package/package.json +1 -1
- package/lib/web/chunks/LicenseManager-LOBHCMIJ.mjs +0 -1
- package/lib/web/chunks/chunk-3RVGU64S.mjs +0 -73
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LicenseManager=void 0;var _storage=require("./storage");var _config=require("./config.js");var _api=require("./api.js");var _fingerprint=require("./fingerprint");var _cacheSignature=require("./cacheSignature.js");var _freeToken=require("./freeToken.js");var _tier=require("./tier.js");var _accountAccess=require("./accountAccess.js");var _foreground=require("./foreground");var _realNow=require("./realNow.js");var _sessionManager=require("./sessionManager.js");var _serviceKey=require("./serviceKey.js");var _devToken=require("./devToken.js");/*!
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.LicenseManager=void 0;var _storage=require("./storage");var _config=require("./config.js");var _api=require("./api.js");var _fingerprint=require("./fingerprint");var _fingerprintOwner=require("./fingerprintOwner.js");var _cacheSignature=require("./cacheSignature.js");var _freeToken=require("./freeToken.js");var _tier=require("./tier.js");var _accountAccess=require("./accountAccess.js");var _foreground=require("./foreground");var _realNow=require("./realNow.js");var _sessionManager=require("./sessionManager.js");var _serviceKey=require("./serviceKey.js");var _devToken=require("./devToken.js");/*!
|
|
2
2
|
* PROPRIETARY — Buoy Pro license enforcement. NOT open source.
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Buoy. All rights reserved. Licensed under the Buoy EULA
|
|
@@ -13,4 +13,4 @@
|
|
|
13
13
|
* Pro is $9/mo, and is free every weekend for anyone holding a key —
|
|
14
14
|
* including a free one (`npx --package=@buoy-gg/core buoy login`). Buy a key at
|
|
15
15
|
* https://buoy.gg or use it free on Saturday and Sunday.
|
|
16
|
-
*/const NO_TEAM_ACCESS={role:null,tools:null};function teamAccessOf(h){return{role:h.role??null,tools:h.tools??null}}async function boundedStorage(h,e){let t;try{return await Promise.race([h,new Promise(i=>{t=setTimeout(()=>i(e),15e3)})])}finally{if(t)clearTimeout(t)}}function tierOfCache(h){if(h.tier==="pro"||h.tier==="free")return h.tier;return h.isPro?"pro":"free"}class LicenseManagerImpl{state={isInitialized:false,isValidating:false,isPro:false,tier:"free",tierSource:"none",licenseKey:null,error:null,errorKind:null,expiresAt:null};listeners=new Set;revalidationTimer=null;cachedLicense=null;fingerprintPromise=null;initPromise=null;generation=0;persistence=Promise.resolve();verifiedAt=null;expiryTimer=null;removeForegroundListener=null;sessionUnsubscribe=null;devToken=null;retryTimer=null;retryAttempt=0;deviceRegistrationCallback=null;pendingRegistration=null;async initialize(){if(this.initPromise)return this.initPromise;if(this.state.isInitialized)return;this.initPromise=this._doInitialize();return this.initPromise}async _doInitialize(){if(this.state.isInitialized)return;const e=this.generation;if(!this.sessionUnsubscribe){this.sessionUnsubscribe=_sessionManager.SessionManager.subscribe(()=>this.emit({type:"validated",isPro:this.isPro()}))}await boundedStorage(_sessionManager.SessionManager.load().catch(()=>void 0),void 0);try{const t=await boundedStorage(this.loadCachedLicense(),null);if(e!==this.generation){this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer();return}if(t&&(this.configuredKey===void 0||t.licenseKey===this.configuredKey)){const i=(0,_cacheSignature.verifyCacheSignature)(t);this.cachedLicense=t;this.state.licenseKey=t.licenseKey;if(i&&this.isCacheValid(t))this.applyTier(tierOfCache(t));else this.lock();this.state.expiresAt=t.expiresAt?new Date(t.expiresAt):null;if(i&&this.isCacheValid(t))this.setVerifiedAt(t.cachedAt);if(this.configuredKey===void 0&&t.licenseKey&&!(i&&this.isCacheValid(t)&&this.isCacheFresh(t))){this.validateInBackground(t.licenseKey)}}this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer()}catch(t){console.warn("[Buoy]","[React Buoy] License initialization failed:",t);this.state.isInitialized=true;this.emit({type:"initialized",isPro:false})}}async configure(e){if(e===void 0){await this.initialize();return this.hasAccountAccess()}const t=(0,_serviceKey.normalizeLicenseKey)(e);const i=++this.generation;this.cancelRetry();this.configuredKey=t||null;if(this.state.licenseKey!==this.configuredKey)this.lock();this.state.licenseKey=this.configuredKey;this.state.isValidating=!!t;this.emit({type:"validating",isPro:this.isPro()});await this.initialize();if(i!==this.generation)return false;if(!t){await this.clearLicense();return false}return this.setLicenseKey(t)}async setLicenseKey(e,t){if(!e||e.trim().length===0){this.state.error="License key is required";this.state.errorKind="verdict";return false}const i=(0,_serviceKey.normalizeLicenseKey)(e);const s=++this.generation;this.cancelRetry();if(!t?.isRetry)this.retryAttempt=0;if(this.state.licenseKey!==i)this.lock();this.state.licenseKey=i;this.state.isValidating=true;this.state.error=null;this.state.errorKind=null;this.emit({type:"validating",isPro:this.isPro()});if((0,_freeToken.isBuoyToken)(i))return this.admitToken(i,s);if((0,_serviceKey.isServiceKey)(i))return this.admitServiceKey(i,s);if((0,_devToken.isDevToken)(i))return this.admitDevToken(i);if(!this.cachedLicense){const a=await boundedStorage(this.loadCachedLicense(),null);if(s!==this.generation)return false;if(a?.licenseKey===i){this.cachedLicense=a;if((0,_cacheSignature.verifyCacheSignature)(a)&&this.isCacheValid(a)){this.applyTier(tierOfCache(a));this.state.expiresAt=a.expiresAt?new Date(a.expiresAt):null;this.setVerifiedAt(a.cachedAt);this.emit({type:"validating",isPro:this.isPro()})}}}const r=this.cachedLicense;if(!t?.force&&r&&r.valid&&r.licenseKey===i&&r.fingerprint&&(0,_cacheSignature.verifyCacheSignature)(r)&&this.isCacheValid(r)&&this.isCacheFresh(r)){this.applyTier(tierOfCache(r));this.state.licenseKey=i;this.state.isValidating=false;this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);this.emit({type:"validated",isPro:this.state.isPro});return true}const c=await boundedStorage(this.loadHold(),null);if(s!==this.generation)return false;const u=(c?.backoffUntil??0)-(0,_realNow.realNow)();if(u>0){return this.standDown(i,s,"License server is rate limited; retrying later.",u)}if(!t?.force&&c?.key===i&&c.verdictAt!==void 0&&(0,_realNow.realNow)()-c.verdictAt>=0&&(0,_realNow.realNow)()-c.verdictAt<_config.LICENSE_VERDICT_CACHE_DURATION){this.lock();this.state.isValidating=false;this.state.error=c.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});return false}let n;try{n=await(0,_api.validateLicense)(i)}catch(a){const o=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;if((0,_api.isTransientLicenseError)(a)){if((0,_api.isRateLimited)(a)){const l=Math.min((0,_api.backoffAfter)(a,_config.LICENSE_QUOTA_COOLDOWN,_config.LICENSE_RATE_LIMIT_DEFAULT_WAIT)*2**this.retryAttempt,_config.LICENSE_QUOTA_COOLDOWN);this.retryAttempt+=1;await this.saveHold({...this.hold,backoffUntil:(0,_realNow.realNow)()+l});if(s!==this.generation)return false;return this.standDown(i,s,o,l)}this.state.isValidating=false;if(this.cachedLicense&&this.cachedLicense.licenseKey===i&&(0,_cacheSignature.verifyCacheSignature)(this.cachedLicense)&&this.isCacheValid(this.cachedLicense)){this.applyTier(tierOfCache(this.cachedLicense));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=this.cachedLicense.expiresAt?new Date(this.cachedLicense.expiresAt):null;this.setVerifiedAt(this.cachedLicense.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetry(i);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=o;this.state.errorKind="transport";this.scheduleRetry(i);this.emit({type:"error",isPro:this.state.isPro,error:o});return false}this.state.isValidating=false;this.state.error=o;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:o});return false}try{if(s!==this.generation)return false;const a=(0,_api.parseValidationResult)(n);const o=n.data?.relationships?.product?.data?.id;if((!o||o===_config.KEYGEN_CONFIG.productId)&&a.code==="EXPIRED"&&((0,_tier.isRecognizedAccount)(n.data)||this.cachedLicense?.licenseKey===i&&(0,_cacheSignature.verifyCacheSignature)(this.cachedLicense)&&this.isCacheValid(this.cachedLicense))){const E=(0,_realNow.realNow)();const L=await this.saveCache({licenseKey:i,licenseId:n.data?.id??"",valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:E,lastValidatedAt:E,fingerprint:this.cachedLicense?.licenseKey===i?this.cachedLicense.fingerprint:void 0},s);if(s!==this.generation||!L)return false;this.cachedLicense=L;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(E);this.emit({type:"validated",isPro:false});return true}if((0,_api.isFatalLicenseError)(a.code)||!(0,_api.isAcceptedValidation)(n)){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();await this.saveHold({key:i,code:a.code,detail:this.state.error,verdictAt:(0,_realNow.realNow)()});return false}if(!n.data){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License not found";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const l=(0,_tier.resolveTier)(n.data);const _=n.data.id;const g=(0,_realNow.realNow)();const v=(0,_api.machineCount)(n)>=_config.LICENSE_FLEET_MACHINE_THRESHOLD;const m=(0,_fingerprint.isDevBundle)();const I=m&&!v;const R=l==="free"&&(v||!m);let d=this.cachedLicense?.fingerprint;let f=this.cachedLicense?.deviceName;let A=false;if(!d){d=await boundedStorage(this.getOrCreateDeviceFingerprint(),(0,_fingerprint.generateUUID)());if(s!==this.generation)return false;f=(0,_fingerprint.getDefaultDeviceName)();A=I}let y=false;if(A){if(this.deviceRegistrationCallback){this.pendingRegistration={licenseId:_,licenseKey:i,fingerprint:d};this.deviceRegistrationCallback({fingerprint:d,defaultName:f});y=true}else{this.registerDeviceAsync(_,i,d,f)}}const p={licenseKey:i,licenseId:_,valid:true,isPro:l==="pro",tier:l,expiresAt:n.data.attributes.expiry??null,cachedAt:g,lastValidatedAt:g,fingerprint:y?void 0:d,deviceName:y?void 0:f,quiet:R||void 0};const T=await this.saveCache(p,s);if(s!==this.generation||!T)return false;this.cachedLicense=T;this.applyTier(l);this.state.isValidating=false;this.state.expiresAt=p.expiresAt?new Date(p.expiresAt):null;this.setVerifiedAt(g);if(this.hold)await this.saveHold(null);if(s!==this.generation)return false;this.retryAttempt=0;this.emit({type:"validated",isPro:this.state.isPro});return true}catch(a){const o=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;this.state.isValidating=false;this.state.error=o;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:o});return false}}scheduleRetry(e){this.cancelRetry();const t=_config.LICENSE_TRANSIENT_RETRY_DELAYS[this.retryAttempt];if(t===void 0)return;this.retryAttempt+=1;const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(e,{force:true,isRetry:true})},t);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}}async admitServiceKey(e,t){const i=await(0,_serviceKey.exchangeServiceKey)(e,{origin:_sessionManager.SessionManager.origin});if(t!==this.generation)return false;if(!i.ok){this.lock();this.state.isValidating=false;this.state.error=i.detail;this.state.errorKind=i.reason==="network"?"transport":"verdict";this.emit({type:"error",isPro:false,error:i.detail});if(i.reason==="network")this.scheduleRetry(e);return false}const s=i.claims.exp*1e3;this.applyTier(i.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(s);this.setVerifiedAt((0,_realNow.realNow)());this.retryAttempt=0;this.scheduleRetryIn(e,Math.max(6e4,s-60*60*1e3-(0,_realNow.realNow)()));this.emit({type:"validated",isPro:this.isPro()});return true}admitDevToken(e){const t=(0,_devToken.checkDevToken)(e);if(!t.ok||!(0,_fingerprint.isDevBundle)()){const s=t.ok?_devToken.DEV_TOKEN_IN_RELEASE:t.message;this.lock();this.state.isValidating=false;this.state.error=s;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:s});return false}const i=(0,_realNow.realNow)();this.devToken={token:e,claims:t.claims};this.applyTier(t.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(t.claims.exp*1e3);this.setVerifiedAt(Math.min(i,t.claims.iat*1e3));this.retryAttempt=0;this.emit({type:"validated",isPro:this.isPro()});return true}async admitToken(e,t){const i=(0,_freeToken.verifyFreeToken)(e);if(t!==this.generation)return false;if(!i){this.lock();this.state.isValidating=false;this.state.error="This key is not valid. Check that it was copied completely.";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const s=(0,_realNow.realNow)();const r=this.cachedLicense?.fingerprint??await boundedStorage(this.getOrCreateDeviceFingerprint(),(0,_fingerprint.generateUUID)());if(t!==this.generation)return false;const c=await this.saveCache({licenseKey:e,licenseId:`token:${i.accountHash}`,valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:s,lastValidatedAt:s,fingerprint:r,deviceName:this.cachedLicense?.deviceName??(0,_fingerprint.getDefaultDeviceName)(),quiet:true},t);if(t!==this.generation||!c)return false;this.cachedLicense=c;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(s);this.retryAttempt=0;this.emit({type:"validated",isPro:false});return true}standDown(e,t,i,s){if(t!==this.generation)return false;this.state.isValidating=false;const r=this.cachedLicense;if(r&&r.licenseKey===e&&(0,_cacheSignature.verifyCacheSignature)(r)&&this.isCacheValid(r)){this.applyTier(tierOfCache(r));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetryIn(e,s);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=i;this.state.errorKind="transport";this.scheduleRetryIn(e,s);this.emit({type:"error",isPro:this.state.isPro,error:i});return false}scheduleRetryIn(e,t){this.cancelRetry();const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(e,{force:true,isRetry:true})},Math.max(1,Math.min(t,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)devTimers.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}cancelRetry(){if(this.retryTimer){clearTimeout(this.retryTimer);this.retryTimer=null}}async clearLicense(){this.generation+=1;this.cancelRetry();this.retryAttempt=0;this.configuredKey=null;this.state.licenseKey=null;this.lock();this.state.expiresAt=null;this.state.error=null;this.state.errorKind=null;this.cachedLicense=null;this.pendingRegistration=null;this.state.isValidating=false;this.emit({type:"deactivated",isPro:false});await this.clearCachedLicense();if(this.hold?.verdictAt!==void 0){await this.saveHold(this.hold.backoffUntil?{backoffUntil:this.hold.backoffUntil}:null)}}applyTier(e){this.state.tier=e;this.state.tierSource="key";this.state.isPro=e==="pro"}lock(){this.state.tier="free";this.state.tierSource="none";this.state.isPro=false;this.verifiedAt=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null}getTier(){return this.credential().tier}credential(){const e=this.keyTier();const t=this.sessionTier();if(t!==null&&(!this.hasKeyAccess()||t==="pro"&&e!=="pro")){return{source:"session",tier:t}}return{source:this.state.tierSource,tier:e}}keyTier(){if(!this.hasKeyAccess())return"free";if(this.state.expiresAt&&(0,_realNow.realNow)()>=this.state.expiresAt.getTime())return"free";return this.state.tier}sessionTier(){const e=_sessionManager.SessionManager.getStatus();if(e.state!=="active")return null;return e.claims.tier==="free"?"free":"pro"}isPro(){return this.getTier()==="pro"}hasEntitlement(e){return this.isPro()}getState(){const{source:e,tier:t}=this.credential();const i=this.getTeamAccess();return{...this.state,tier:t,tierSource:e,isPro:t==="pro",access:this.getAccountAccess(),teamRole:i.role,allowedTools:i.tools}}getTeamAccess(){const e=_sessionManager.SessionManager.getStatus();if(e.state==="active")return teamAccessOf(e.claims);const t=this.devToken;if(t&&t.token===this.state.licenseKey&&this.state.tierSource==="key"&&(0,_realNow.realNow)()<t.claims.exp*1e3&&this.hasKeyAccess()){return teamAccessOf(t.claims)}return NO_TEAM_ACCESS}getAccountAccess(){const e=this.getKeyAccess();if(e.status==="admitted")return e;const t=_sessionManager.SessionManager.getStatus();if(t.state==="active")return{status:"admitted",reason:null,validUntil:t.validUntil};return e}getKeyAccess(){return(0,_accountAccess.resolveAccountAccess)({initialized:this.state.isInitialized,validating:this.state.isValidating,key:this.state.licenseKey,tierSource:this.state.tierSource,verifiedAt:this.verifiedAt})}hasAccountAccess(){return this.getAccountAccess().status==="admitted"}hasKeyAccess(){return this.getKeyAccess().status==="admitted"}setVerifiedAt(e){this.verifiedAt=e;if(this.expiryTimer)clearTimeout(this.expiryTimer);const t=e+_config.LICENSE_CACHE_DURATION;const i=this.state.expiresAt?.getTime();const s=i&&i>(0,_realNow.realNow)()?Math.min(t,i):t;const r=s-(0,_realNow.realNow)();this.expiryTimer=setTimeout(()=>{this.expiryTimer=null;if(this.verifiedAt!==e)return;this.emit({type:"validated",isPro:this.isPro()});if((0,_realNow.realNow)()<t)this.setVerifiedAt(e)},Math.max(1,Math.min(r,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)devTimers.__LICENSE_MANAGER_EXPIRY_TIMER__=this.expiryTimer}subscribe(e){this.listeners.add(e);return()=>this.listeners.delete(e)}onDeviceRegistrationNeeded(e){this.deviceRegistrationCallback=e;return()=>{this.deviceRegistrationCallback=null}}async completeDeviceRegistration(e){if(!this.pendingRegistration){console.warn("[Buoy] No pending device registration");return}const{licenseId:t,licenseKey:i,fingerprint:s}=this.pendingRegistration;const r=this.generation;const c=e.trim()||(0,_fingerprint.getDefaultDeviceName)();const u=(0,_fingerprint.getDeviceMetadata)();try{await(0,_api.activateMachine)(t,i,s,c,u)}catch(n){const a=n instanceof Error?n.message:String(n);if(a==="FINGERPRINT_TAKEN"||a==="MACHINE_LIMIT_EXCEEDED"){}else{console.warn("[Buoy] Device registration failed:",a);throw n}}if(r!==this.generation)return;if(this.cachedLicense?.licenseKey===i){const n=await this.saveCache({...this.cachedLicense,fingerprint:s,deviceName:c},r);if(r!==this.generation)return;if(n)this.cachedLicense=n}this.pendingRegistration=null}emit(e){const t=[...this.listeners];t.forEach(i=>{try{i(e)}catch(s){console.warn("[Buoy]","[React Buoy] License listener error:",s)}})}isCacheValid(e){const t=(0,_realNow.realNow)();const i=t-e.cachedAt;if(!e.valid||!Number.isFinite(e.cachedAt)||i<0||i>=_config.LICENSE_CACHE_DURATION){return false}return true}isCacheFresh(e){const t=this.isQuiet(e)?_config.LICENSE_QUIET_VALIDATION_TTL:_config.LICENSE_LAUNCH_VALIDATION_TTL;return(0,_realNow.realNow)()-(e.lastValidatedAt??0)<t}isQuiet(e){if(e.quiet!==void 0)return e.quiet;return tierOfCache(e)==="free"&&!(0,_fingerprint.isDevBundle)()}async loadHold(){if(this.hold!==void 0)return this.hold;try{const e=await(0,_storage.getLicenseStorage)();const t=await e.getItem(_config.LICENSE_HOLD_STORAGE_KEY);const i=t?JSON.parse(t):null;this.hold=i&&typeof i==="object"?i:null}catch{this.hold=null}return this.hold}async saveHold(e){this.hold=e;try{const t=await(0,_storage.getLicenseStorage)();if(e)await t.setItem(_config.LICENSE_HOLD_STORAGE_KEY,JSON.stringify(e));else await t.removeItem(_config.LICENSE_HOLD_STORAGE_KEY)}catch{}}async persistCache(e){const t=(0,_cacheSignature.signCache)(e);const i=await(0,_storage.getLicenseStorage)();await i.setItem(_config.LICENSE_STORAGE_KEY,JSON.stringify(t));return t}saveCache(e,t){const i=this.persistence.catch(()=>{}).then(async()=>{if(t!==this.generation)return null;const s=await this.persistCache(e);return t===this.generation?s:null});this.persistence=i;return boundedStorage(i,(0,_cacheSignature.signCache)(e))}async loadCachedLicense(){try{await this.persistence.catch(()=>{});const e=await(0,_storage.getLicenseStorage)();const t=await e.getItem(_config.LICENSE_STORAGE_KEY);if(!t)return null;const i=JSON.parse(t);return i}catch(e){console.warn("[Buoy] Error loading cached license:",e);return null}}getOrCreateDeviceFingerprint(){if(!this.fingerprintPromise){this.fingerprintPromise=(async()=>{const e=await(0,_storage.getLicenseStorage)();const t=await e.getItem(_config.DEVICE_FINGERPRINT_STORAGE_KEY);if(t)return t;const i=this.cachedLicense?.fingerprint||(0,_fingerprint.generateUUID)();await e.setItem(_config.DEVICE_FINGERPRINT_STORAGE_KEY,i);return i})()}return this.fingerprintPromise}async clearCachedLicense(){this.cachedLicense=null;const e=this.persistence.catch(()=>{}).then(async()=>{const t=await(0,_storage.getLicenseStorage)();await t.removeItem(_config.LICENSE_STORAGE_KEY)});this.persistence=e;await boundedStorage(e.catch(()=>{}),void 0)}registerDeviceAsync(e,t,i,s){const r=(0,_fingerprint.getDeviceMetadata)();(0,_api.activateMachine)(e,t,i,s,r).catch(c=>{if(c.message!=="FINGERPRINT_TAKEN"&&c.message!=="MACHINE_LIMIT_EXCEEDED"){console.warn("[Buoy] Device registration failed (non-blocking):",c.message)}})}validateInBackground(e){void this.setLicenseKey(e,{force:true,isRetry:true})}refreshAccess(){this.emit({type:"validated",isPro:this.isPro()})}startRevalidationTimer(){if(!this.removeForegroundListener){this.removeForegroundListener=(0,_foreground.subscribeForeground)(()=>this.refreshAccess());if(typeof __DEV__!=="undefined"&&__DEV__)devTimers.__LICENSE_MANAGER_FOREGROUND_OFF__=this.removeForegroundListener}if(this.revalidationTimer){clearInterval(this.revalidationTimer)}this.revalidationTimer=setInterval(()=>{if(!this.state.licenseKey||this.state.isValidating)return;const e=this.cachedLicense;if(e&&e.licenseKey===this.state.licenseKey&&this.isCacheFresh(e))return;this.validateInBackground(this.state.licenseKey)},_config.LICENSE_REVALIDATION_INTERVAL);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_TIMER__=this.revalidationTimer}}stopRevalidationTimer(){this.removeForegroundListener?.();this.removeForegroundListener=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null;if(this.revalidationTimer){clearInterval(this.revalidationTimer);this.revalidationTimer=null}this.cancelRetry()}async forceReregister(){if(this.cachedLicense){this.cachedLicense.fingerprint=void 0;this.cachedLicense.deviceName=void 0}this.fingerprintPromise=null;await this.clearCachedLicense();try{const e=await(0,_storage.getLicenseStorage)();await e.removeItem(_config.DEVICE_FINGERPRINT_STORAGE_KEY)}catch{}}}const LicenseManager=exports.LicenseManager=new LicenseManagerImpl;const devTimers=globalThis;if(typeof __DEV__!=="undefined"&&__DEV__){devTimers.__LICENSE_MANAGER_FOREGROUND_OFF__?.();devTimers.__LICENSE_MANAGER_FOREGROUND_OFF__=void 0;if(devTimers.__LICENSE_MANAGER_EXPIRY_TIMER__)clearTimeout(devTimers.__LICENSE_MANAGER_EXPIRY_TIMER__);if(devTimers.__LICENSE_MANAGER_TIMER__){clearInterval(devTimers.__LICENSE_MANAGER_TIMER__)}if(devTimers.__LICENSE_MANAGER_RETRY_TIMER__){clearTimeout(devTimers.__LICENSE_MANAGER_RETRY_TIMER__);devTimers.__LICENSE_MANAGER_RETRY_TIMER__=void 0}}
|
|
16
|
+
*/const NO_TEAM_ACCESS={role:null,tools:null};function teamAccessOf(h){return{role:h.role??null,tools:h.tools??null}}async function boundedStorage(h,t){let e;try{return await Promise.race([h,new Promise(i=>{e=setTimeout(()=>i(t),15e3)})])}finally{if(e)clearTimeout(e)}}function tierOfCache(h){if(h.tier==="pro"||h.tier==="free")return h.tier;return h.isPro?"pro":"free"}class LicenseManagerImpl{state={isInitialized:false,isValidating:false,isPro:false,tier:"free",tierSource:"none",licenseKey:null,error:null,errorKind:null,expiresAt:null};listeners=new Set;revalidationTimer=null;cachedLicense=null;fingerprintPromise=null;fingerprintRestored=false;initPromise=null;generation=0;persistence=Promise.resolve();verifiedAt=null;expiryTimer=null;removeForegroundListener=null;sessionUnsubscribe=null;devToken=null;retryTimer=null;retryAttempt=0;deviceRegistrationCallback=null;pendingRegistration=null;async initialize(){if(this.initPromise)return this.initPromise;if(this.state.isInitialized)return;this.initPromise=this._doInitialize();return this.initPromise}async _doInitialize(){if(this.state.isInitialized)return;const t=this.generation;if(!this.sessionUnsubscribe){this.sessionUnsubscribe=_sessionManager.SessionManager.subscribe(()=>this.emit({type:"validated",isPro:this.isPro()}))}await boundedStorage(_sessionManager.SessionManager.load().catch(()=>void 0),void 0);try{const e=await boundedStorage(this.loadCachedLicense(),null);if(t!==this.generation){this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer();return}if(e&&(this.configuredKey===void 0||e.licenseKey===this.configuredKey)){const i=(0,_cacheSignature.verifyCacheSignature)(e);this.cachedLicense=e;this.state.licenseKey=e.licenseKey;if(i&&this.isCacheValid(e))this.applyTier(tierOfCache(e));else this.lock();this.state.expiresAt=e.expiresAt?new Date(e.expiresAt):null;if(i&&this.isCacheValid(e))this.setVerifiedAt(e.cachedAt);if(this.configuredKey===void 0&&e.licenseKey&&!(i&&this.isCacheValid(e)&&this.isCacheFresh(e))){this.validateInBackground(e.licenseKey)}}this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer()}catch(e){console.warn("[Buoy]","[React Buoy] License initialization failed:",e);this.state.isInitialized=true;this.emit({type:"initialized",isPro:false})}}async configure(t){if(t===void 0){await this.initialize();return this.hasAccountAccess()}const e=(0,_serviceKey.normalizeLicenseKey)(t);const i=++this.generation;this.cancelRetry();this.configuredKey=e||null;if(this.state.licenseKey!==this.configuredKey)this.lock();this.state.licenseKey=this.configuredKey;this.state.isValidating=!!e;this.emit({type:"validating",isPro:this.isPro()});await this.initialize();if(i!==this.generation)return false;if(!e){await this.clearLicense();return false}return this.setLicenseKey(e)}async setLicenseKey(t,e){if(!t||t.trim().length===0){this.state.error="License key is required";this.state.errorKind="verdict";return false}const i=(0,_serviceKey.normalizeLicenseKey)(t);const s=++this.generation;this.cancelRetry();if(!e?.isRetry)this.retryAttempt=0;if(this.state.licenseKey!==i)this.lock();this.state.licenseKey=i;this.state.isValidating=true;this.state.error=null;this.state.errorKind=null;this.emit({type:"validating",isPro:this.isPro()});if((0,_freeToken.isBuoyToken)(i))return this.admitToken(i,s);if((0,_serviceKey.isServiceKey)(i))return this.admitServiceKey(i,s);if((0,_devToken.isDevToken)(i))return this.admitDevToken(i);if(!this.cachedLicense){const a=await boundedStorage(this.loadCachedLicense(),null);if(s!==this.generation)return false;if(a?.licenseKey===i){this.cachedLicense=a;if((0,_cacheSignature.verifyCacheSignature)(a)&&this.isCacheValid(a)){this.applyTier(tierOfCache(a));this.state.expiresAt=a.expiresAt?new Date(a.expiresAt):null;this.setVerifiedAt(a.cachedAt);this.emit({type:"validating",isPro:this.isPro()})}}}const r=this.cachedLicense;if(!e?.force&&r&&r.valid&&r.licenseKey===i&&r.fingerprint&&(0,_cacheSignature.verifyCacheSignature)(r)&&this.isCacheValid(r)&&this.isCacheFresh(r)){this.applyTier(tierOfCache(r));this.state.licenseKey=i;this.state.isValidating=false;this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);this.emit({type:"validated",isPro:this.state.isPro});return true}const n=await boundedStorage(this.loadHold(),null);if(s!==this.generation)return false;const u=(n?.backoffUntil??0)-(0,_realNow.realNow)();if(u>0){return this.standDown(i,s,"License server is rate limited; retrying later.",u)}if(!e?.force&&n?.key===i&&n.verdictAt!==void 0&&(0,_realNow.realNow)()-n.verdictAt>=0&&(0,_realNow.realNow)()-n.verdictAt<_config.LICENSE_VERDICT_CACHE_DURATION){this.lock();this.state.isValidating=false;this.state.error=n.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});return false}let c;try{c=await(0,_api.validateLicense)(i)}catch(a){const o=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;if((0,_api.isTransientLicenseError)(a)){if((0,_api.isRateLimited)(a)){const l=Math.min((0,_api.backoffAfter)(a,_config.LICENSE_QUOTA_COOLDOWN,_config.LICENSE_RATE_LIMIT_DEFAULT_WAIT)*2**this.retryAttempt,_config.LICENSE_QUOTA_COOLDOWN);this.retryAttempt+=1;await this.saveHold({...this.hold,backoffUntil:(0,_realNow.realNow)()+l});if(s!==this.generation)return false;return this.standDown(i,s,o,l)}this.state.isValidating=false;if(this.cachedLicense&&this.cachedLicense.licenseKey===i&&(0,_cacheSignature.verifyCacheSignature)(this.cachedLicense)&&this.isCacheValid(this.cachedLicense)){this.applyTier(tierOfCache(this.cachedLicense));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=this.cachedLicense.expiresAt?new Date(this.cachedLicense.expiresAt):null;this.setVerifiedAt(this.cachedLicense.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetry(i);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=o;this.state.errorKind="transport";this.scheduleRetry(i);this.emit({type:"error",isPro:this.state.isPro,error:o});return false}this.state.isValidating=false;this.state.error=o;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:o});return false}try{if(s!==this.generation)return false;const a=(0,_api.parseValidationResult)(c);const o=c.data?.relationships?.product?.data?.id;if((!o||o===_config.KEYGEN_CONFIG.productId)&&a.code==="EXPIRED"&&((0,_tier.isRecognizedAccount)(c.data)||this.cachedLicense?.licenseKey===i&&(0,_cacheSignature.verifyCacheSignature)(this.cachedLicense)&&this.isCacheValid(this.cachedLicense))){const E=(0,_realNow.realNow)();const L=await this.saveCache({licenseKey:i,licenseId:c.data?.id??"",valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:E,lastValidatedAt:E,fingerprint:this.cachedLicense?.licenseKey===i?this.cachedLicense.fingerprint:void 0},s);if(s!==this.generation||!L)return false;this.cachedLicense=L;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(E);this.emit({type:"validated",isPro:false});return true}if((0,_api.isFatalLicenseError)(a.code)||!(0,_api.isAcceptedValidation)(c)){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();await this.saveHold({key:i,code:a.code,detail:this.state.error,verdictAt:(0,_realNow.realNow)()});return false}if(!c.data){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License not found";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const l=(0,_tier.resolveTier)(c.data);const g=c.data.id;const _=(0,_realNow.realNow)();const v=(0,_api.machineCount)(c)>=_config.LICENSE_FLEET_MACHINE_THRESHOLD;const m=(0,_fingerprint.isDevBundle)();const I=m&&!v;const R=l==="free"&&(v||!m);let d=this.cachedLicense?.fingerprint;let f=this.cachedLicense?.deviceName;let A=false;if(!d){d=await boundedStorage(this.getOrCreateDeviceFingerprint(),(0,_fingerprint.generateUUID)());if(s!==this.generation)return false;f=(0,_fingerprint.getDefaultDeviceName)();A=I}let y=false;if(A){if(this.deviceRegistrationCallback){this.pendingRegistration={licenseId:g,licenseKey:i,fingerprint:d};this.deviceRegistrationCallback({fingerprint:d,defaultName:f});y=true}else{this.registerDeviceAsync(g,i,d,f)}}const p={licenseKey:i,licenseId:g,valid:true,isPro:l==="pro",tier:l,expiresAt:c.data.attributes.expiry??null,cachedAt:_,lastValidatedAt:_,fingerprint:y?void 0:d,deviceName:y?void 0:f,quiet:R||void 0};const T=await this.saveCache(p,s);if(s!==this.generation||!T)return false;this.cachedLicense=T;this.applyTier(l);this.state.isValidating=false;this.state.expiresAt=p.expiresAt?new Date(p.expiresAt):null;this.setVerifiedAt(_);if(this.hold)await this.saveHold(null);if(s!==this.generation)return false;this.retryAttempt=0;this.emit({type:"validated",isPro:this.state.isPro});return true}catch(a){const o=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;this.state.isValidating=false;this.state.error=o;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:o});return false}}scheduleRetry(t){this.cancelRetry();const e=_config.LICENSE_TRANSIENT_RETRY_DELAYS[this.retryAttempt];if(e===void 0)return;this.retryAttempt+=1;const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(t,{force:true,isRetry:true})},e);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}}async admitServiceKey(t,e){const i=await(0,_serviceKey.exchangeServiceKey)(t,{origin:_sessionManager.SessionManager.origin});if(e!==this.generation)return false;if(!i.ok){this.lock();this.state.isValidating=false;this.state.error=i.detail;this.state.errorKind=i.reason==="network"?"transport":"verdict";this.emit({type:"error",isPro:false,error:i.detail});if(i.reason==="network")this.scheduleRetry(t);return false}const s=i.claims.exp*1e3;this.applyTier(i.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(s);this.setVerifiedAt((0,_realNow.realNow)());this.retryAttempt=0;this.scheduleRetryIn(t,Math.max(6e4,s-60*60*1e3-(0,_realNow.realNow)()));this.emit({type:"validated",isPro:this.isPro()});return true}admitDevToken(t){const e=(0,_devToken.checkDevToken)(t);if(!e.ok||!(0,_fingerprint.isDevBundle)()){const s=e.ok?_devToken.DEV_TOKEN_IN_RELEASE:e.message;this.lock();this.state.isValidating=false;this.state.error=s;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:s});return false}const i=(0,_realNow.realNow)();this.devToken={token:t,claims:e.claims};this.applyTier(e.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(e.claims.exp*1e3);this.setVerifiedAt(Math.min(i,e.claims.iat*1e3));this.retryAttempt=0;this.emit({type:"validated",isPro:this.isPro()});return true}async admitToken(t,e){const i=(0,_freeToken.verifyFreeToken)(t);if(e!==this.generation)return false;if(!i){this.lock();this.state.isValidating=false;this.state.error="This key is not valid. Check that it was copied completely.";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const s=(0,_realNow.realNow)();const r=this.cachedLicense?.fingerprint??await boundedStorage(this.getOrCreateDeviceFingerprint(),(0,_fingerprint.generateUUID)());if(e!==this.generation)return false;const n=await this.saveCache({licenseKey:t,licenseId:`token:${i.accountHash}`,valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:s,lastValidatedAt:s,fingerprint:r,deviceName:this.cachedLicense?.deviceName??(0,_fingerprint.getDefaultDeviceName)(),quiet:true},e);if(e!==this.generation||!n)return false;this.cachedLicense=n;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(s);this.retryAttempt=0;this.emit({type:"validated",isPro:false});return true}standDown(t,e,i,s){if(e!==this.generation)return false;this.state.isValidating=false;const r=this.cachedLicense;if(r&&r.licenseKey===t&&(0,_cacheSignature.verifyCacheSignature)(r)&&this.isCacheValid(r)){this.applyTier(tierOfCache(r));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetryIn(t,s);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=i;this.state.errorKind="transport";this.scheduleRetryIn(t,s);this.emit({type:"error",isPro:this.state.isPro,error:i});return false}scheduleRetryIn(t,e){this.cancelRetry();const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(t,{force:true,isRetry:true})},Math.max(1,Math.min(e,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)devTimers.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}cancelRetry(){if(this.retryTimer){clearTimeout(this.retryTimer);this.retryTimer=null}}async clearLicense(){this.generation+=1;this.cancelRetry();this.retryAttempt=0;this.configuredKey=null;this.state.licenseKey=null;this.lock();this.state.expiresAt=null;this.state.error=null;this.state.errorKind=null;this.cachedLicense=null;this.pendingRegistration=null;this.state.isValidating=false;this.emit({type:"deactivated",isPro:false});await this.clearCachedLicense();if(this.hold?.verdictAt!==void 0){await this.saveHold(this.hold.backoffUntil?{backoffUntil:this.hold.backoffUntil}:null)}}applyTier(t){this.state.tier=t;this.state.tierSource="key";this.state.isPro=t==="pro"}lock(){this.state.tier="free";this.state.tierSource="none";this.state.isPro=false;this.verifiedAt=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null}getTier(){return this.credential().tier}credential(){const t=this.keyTier();const e=this.sessionTier();if(e!==null&&(!this.hasKeyAccess()||e==="pro"&&t!=="pro")){return{source:"session",tier:e}}return{source:this.state.tierSource,tier:t}}keyTier(){if(!this.hasKeyAccess())return"free";if(this.state.expiresAt&&(0,_realNow.realNow)()>=this.state.expiresAt.getTime())return"free";return this.state.tier}sessionTier(){const t=_sessionManager.SessionManager.getStatus();if(t.state!=="active")return null;return t.claims.tier==="free"?"free":"pro"}isPro(){return this.getTier()==="pro"}hasEntitlement(t){return this.isPro()}getState(){const{source:t,tier:e}=this.credential();const i=this.getTeamAccess();return{...this.state,tier:e,tierSource:t,isPro:e==="pro",access:this.getAccountAccess(),teamRole:i.role,allowedTools:i.tools}}getTeamAccess(){const t=_sessionManager.SessionManager.getStatus();if(t.state==="active")return teamAccessOf(t.claims);const e=this.devToken;if(e&&e.token===this.state.licenseKey&&this.state.tierSource==="key"&&(0,_realNow.realNow)()<e.claims.exp*1e3&&this.hasKeyAccess()){return teamAccessOf(e.claims)}return NO_TEAM_ACCESS}getAccountAccess(){const t=this.getKeyAccess();if(t.status==="admitted")return t;const e=_sessionManager.SessionManager.getStatus();if(e.state==="active")return{status:"admitted",reason:null,validUntil:e.validUntil};return t}getKeyAccess(){return(0,_accountAccess.resolveAccountAccess)({initialized:this.state.isInitialized,validating:this.state.isValidating,key:this.state.licenseKey,tierSource:this.state.tierSource,verifiedAt:this.verifiedAt})}hasAccountAccess(){return this.getAccountAccess().status==="admitted"}hasKeyAccess(){return this.getKeyAccess().status==="admitted"}setVerifiedAt(t){this.verifiedAt=t;if(this.expiryTimer)clearTimeout(this.expiryTimer);const e=t+_config.LICENSE_CACHE_DURATION;const i=this.state.expiresAt?.getTime();const s=i&&i>(0,_realNow.realNow)()?Math.min(e,i):e;const r=s-(0,_realNow.realNow)();this.expiryTimer=setTimeout(()=>{this.expiryTimer=null;if(this.verifiedAt!==t)return;this.emit({type:"validated",isPro:this.isPro()});if((0,_realNow.realNow)()<e)this.setVerifiedAt(t)},Math.max(1,Math.min(r,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)devTimers.__LICENSE_MANAGER_EXPIRY_TIMER__=this.expiryTimer}subscribe(t){this.listeners.add(t);return()=>this.listeners.delete(t)}onDeviceRegistrationNeeded(t){this.deviceRegistrationCallback=t;return()=>{this.deviceRegistrationCallback=null}}async completeDeviceRegistration(t){if(!this.pendingRegistration){console.warn("[Buoy] No pending device registration");return}const{licenseId:e,licenseKey:i,fingerprint:s}=this.pendingRegistration;const r=this.generation;const n=t.trim()||(0,_fingerprint.getDefaultDeviceName)();const u=(0,_fingerprint.getDeviceMetadata)();try{await(0,_api.activateMachine)(e,i,s,n,u)}catch(c){const a=c instanceof Error?c.message:String(c);if(a==="FINGERPRINT_TAKEN"||a==="MACHINE_LIMIT_EXCEEDED"){}else{console.warn("[Buoy] Device registration failed:",a);throw c}}if(r!==this.generation)return;if(this.cachedLicense?.licenseKey===i){const c=await this.saveCache({...this.cachedLicense,fingerprint:s,deviceName:n},r);if(r!==this.generation)return;if(c)this.cachedLicense=c}this.pendingRegistration=null}emit(t){const e=[...this.listeners];e.forEach(i=>{try{i(t)}catch(s){console.warn("[Buoy]","[React Buoy] License listener error:",s)}})}isCacheValid(t){const e=(0,_realNow.realNow)();const i=e-t.cachedAt;if(!t.valid||!Number.isFinite(t.cachedAt)||i<0||i>=_config.LICENSE_CACHE_DURATION){return false}return true}isCacheFresh(t){const e=this.isQuiet(t)?_config.LICENSE_QUIET_VALIDATION_TTL:_config.LICENSE_LAUNCH_VALIDATION_TTL;return(0,_realNow.realNow)()-(t.lastValidatedAt??0)<e}isQuiet(t){if(t.quiet!==void 0)return t.quiet;return tierOfCache(t)==="free"&&!(0,_fingerprint.isDevBundle)()}async loadHold(){if(this.hold!==void 0)return this.hold;try{const t=await(0,_storage.getLicenseStorage)();const e=await t.getItem(_config.LICENSE_HOLD_STORAGE_KEY);const i=e?JSON.parse(e):null;this.hold=i&&typeof i==="object"?i:null}catch{this.hold=null}return this.hold}async saveHold(t){this.hold=t;try{const e=await(0,_storage.getLicenseStorage)();if(t)await e.setItem(_config.LICENSE_HOLD_STORAGE_KEY,JSON.stringify(t));else await e.removeItem(_config.LICENSE_HOLD_STORAGE_KEY)}catch{}}async persistCache(t){const e=(0,_cacheSignature.signCache)(t);const i=await(0,_storage.getLicenseStorage)();await i.setItem(_config.LICENSE_STORAGE_KEY,JSON.stringify(e));return e}saveCache(t,e){const i=this.persistence.catch(()=>{}).then(async()=>{if(e!==this.generation)return null;const s=await this.persistCache(t);return e===this.generation?s:null});this.persistence=i;return boundedStorage(i,(0,_cacheSignature.signCache)(t))}async loadCachedLicense(){try{await this.persistence.catch(()=>{});const t=await(0,_storage.getLicenseStorage)();const e=await t.getItem(_config.LICENSE_STORAGE_KEY);if(!e)return null;const i=JSON.parse(e);if(i.fingerprint){const s=await boundedStorage(this.getOrCreateDeviceFingerprint(i.fingerprint).catch(()=>null),null);if(s&&this.fingerprintRestored&&i.fingerprint!==s){return{...i,fingerprint:void 0,deviceName:void 0}}}return i}catch(t){console.warn("[Buoy] Error loading cached license:",t);return null}}getOrCreateDeviceFingerprint(t){if(!this.fingerprintPromise){this.fingerprintPromise=(async()=>{const e=await(0,_storage.getLicenseStorage)();const i=await e.getItem(_config.DEVICE_FINGERPRINT_STORAGE_KEY);const s=await e.getItem(_config.DEVICE_FINGERPRINT_OWNER_STORAGE_KEY);const r=await boundedStorage((0,_fingerprint.getDeviceOwnerId)().catch(()=>null),null);const n=(0,_fingerprintOwner.resolveDeviceFingerprint)({stored:i,storedOwner:s,marker:r?(0,_fingerprintOwner.hashDeviceMarker)(r):null,blobFingerprint:t??this.cachedLicense?.fingerprint,mint:_fingerprint.generateUUID});this.fingerprintRestored=n.restored;if(n.changed){await e.setItem(_config.DEVICE_FINGERPRINT_STORAGE_KEY,n.fingerprint);if(n.owner)await e.setItem(_config.DEVICE_FINGERPRINT_OWNER_STORAGE_KEY,n.owner)}return n.fingerprint})()}return this.fingerprintPromise}async clearCachedLicense(){this.cachedLicense=null;const t=this.persistence.catch(()=>{}).then(async()=>{const e=await(0,_storage.getLicenseStorage)();await e.removeItem(_config.LICENSE_STORAGE_KEY)});this.persistence=t;await boundedStorage(t.catch(()=>{}),void 0)}registerDeviceAsync(t,e,i,s){const r=(0,_fingerprint.getDeviceMetadata)();(0,_api.activateMachine)(t,e,i,s,r).catch(n=>{if(n.message!=="FINGERPRINT_TAKEN"&&n.message!=="MACHINE_LIMIT_EXCEEDED"){console.warn("[Buoy] Device registration failed (non-blocking):",n.message)}})}validateInBackground(t){void this.setLicenseKey(t,{force:true,isRetry:true})}refreshAccess(){this.emit({type:"validated",isPro:this.isPro()})}startRevalidationTimer(){if(!this.removeForegroundListener){this.removeForegroundListener=(0,_foreground.subscribeForeground)(()=>this.refreshAccess());if(typeof __DEV__!=="undefined"&&__DEV__)devTimers.__LICENSE_MANAGER_FOREGROUND_OFF__=this.removeForegroundListener}if(this.revalidationTimer){clearInterval(this.revalidationTimer)}this.revalidationTimer=setInterval(()=>{if(!this.state.licenseKey||this.state.isValidating)return;const t=this.cachedLicense;if(t&&t.licenseKey===this.state.licenseKey&&this.isCacheFresh(t))return;this.validateInBackground(this.state.licenseKey)},_config.LICENSE_REVALIDATION_INTERVAL);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_TIMER__=this.revalidationTimer}}stopRevalidationTimer(){this.removeForegroundListener?.();this.removeForegroundListener=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null;if(this.revalidationTimer){clearInterval(this.revalidationTimer);this.revalidationTimer=null}this.cancelRetry()}async forceReregister(){if(this.cachedLicense){this.cachedLicense.fingerprint=void 0;this.cachedLicense.deviceName=void 0}this.fingerprintPromise=null;await this.clearCachedLicense();try{const t=await(0,_storage.getLicenseStorage)();await t.removeItem(_config.DEVICE_FINGERPRINT_STORAGE_KEY)}catch{}}}const LicenseManager=exports.LicenseManager=new LicenseManagerImpl;const devTimers=globalThis;if(typeof __DEV__!=="undefined"&&__DEV__){devTimers.__LICENSE_MANAGER_FOREGROUND_OFF__?.();devTimers.__LICENSE_MANAGER_FOREGROUND_OFF__=void 0;if(devTimers.__LICENSE_MANAGER_EXPIRY_TIMER__)clearTimeout(devTimers.__LICENSE_MANAGER_EXPIRY_TIMER__);if(devTimers.__LICENSE_MANAGER_TIMER__){clearInterval(devTimers.__LICENSE_MANAGER_TIMER__)}if(devTimers.__LICENSE_MANAGER_RETRY_TIMER__){clearTimeout(devTimers.__LICENSE_MANAGER_RETRY_TIMER__);devTimers.__LICENSE_MANAGER_RETRY_TIMER__=void 0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BUOY_ACCOUNT_KEY_NAMES=void 0;exports.isBuoyAccountKeyName=isBuoyAccountKeyName;exports.maskBuoyAccountKey=maskBuoyAccountKey;exports.maskBuoyAccountKeys=maskBuoyAccountKeys;const BUOY_ACCOUNT_KEY_NAMES=exports.BUOY_ACCOUNT_KEY_NAMES=["BUOY_LICENSE_KEY","BUOY_KEY","EXPO_PUBLIC_BUOY_KEY","VITE_BUOY_KEY","NEXT_PUBLIC_BUOY_KEY","REACT_APP_BUOY_KEY","licenseKey"];const PREFIXED_KEY_NAME=/(^|_)BUOY_(LICENSE_)?KEY$/i;function isBuoyAccountKeyName(t){return BUOY_ACCOUNT_KEY_NAMES.includes(t)||PREFIXED_KEY_NAME.test(t)}function maskBuoyAccountKey(t){if(!t)return t;return t.length>=16?`${t.slice(0,5)}\u2026\u2022\u2022\u2022\u2022 (hidden)`:"\u2022\u2022\u2022\u2022 (hidden)"}function maskBuoyAccountKeys(t){let e;for(const[o,u]of Object.entries(t)){if(typeof u==="string"&&u&&isBuoyAccountKeyName(o)){e??={...t};e[o]=maskBuoyAccountKey(u)}}return e??t}
|
package/lib/commonjs/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DEVICE_FINGERPRINT_STORAGE_KEY=void 0;Object.defineProperty(exports,"FREE_TOKEN_PUBLIC_KEY",{enumerable:true,get:function(){return _freeTokenKey.FREE_TOKEN_PUBLIC_KEY}});exports.LICENSE_VERDICT_CACHE_DURATION=exports.LICENSE_TRANSIENT_RETRY_DELAYS=exports.LICENSE_STORAGE_KEY=exports.LICENSE_REVALIDATION_INTERVAL=exports.LICENSE_RATE_LIMIT_DEFAULT_WAIT=exports.LICENSE_QUOTA_COOLDOWN=exports.LICENSE_QUIET_VALIDATION_TTL=exports.LICENSE_LAUNCH_VALIDATION_TTL=exports.LICENSE_HOLD_STORAGE_KEY=exports.LICENSE_FLEET_MACHINE_THRESHOLD=exports.LICENSE_CACHE_DURATION=exports.KEYGEN_POLICIES=exports.KEYGEN_CONFIG=void 0;Object.defineProperty(exports,"SESSION_TOKEN_PUBLIC_KEY",{enumerable:true,get:function(){return _sessionTokenKey.SESSION_TOKEN_PUBLIC_KEY}});var _freeTokenKey=require("./freeTokenKey.js");var _sessionTokenKey=require("./sessionTokenKey.js");/*!
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DEVICE_FINGERPRINT_STORAGE_KEY=exports.DEVICE_FINGERPRINT_OWNER_STORAGE_KEY=void 0;Object.defineProperty(exports,"FREE_TOKEN_PUBLIC_KEY",{enumerable:true,get:function(){return _freeTokenKey.FREE_TOKEN_PUBLIC_KEY}});exports.LICENSE_VERDICT_CACHE_DURATION=exports.LICENSE_TRANSIENT_RETRY_DELAYS=exports.LICENSE_STORAGE_KEY=exports.LICENSE_REVALIDATION_INTERVAL=exports.LICENSE_RATE_LIMIT_DEFAULT_WAIT=exports.LICENSE_QUOTA_COOLDOWN=exports.LICENSE_QUIET_VALIDATION_TTL=exports.LICENSE_LAUNCH_VALIDATION_TTL=exports.LICENSE_HOLD_STORAGE_KEY=exports.LICENSE_FLEET_MACHINE_THRESHOLD=exports.LICENSE_CACHE_DURATION=exports.KEYGEN_POLICIES=exports.KEYGEN_CONFIG=void 0;Object.defineProperty(exports,"SESSION_TOKEN_PUBLIC_KEY",{enumerable:true,get:function(){return _sessionTokenKey.SESSION_TOKEN_PUBLIC_KEY}});var _freeTokenKey=require("./freeTokenKey.js");var _sessionTokenKey=require("./sessionTokenKey.js");/*!
|
|
2
2
|
* PROPRIETARY — Buoy Pro license enforcement. NOT open source.
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Buoy. All rights reserved. Licensed under the Buoy EULA
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
* Pro is $9/mo, and is free every weekend for anyone holding a key —
|
|
15
15
|
* including a free one (`npx --package=@buoy-gg/core buoy login`). Buy a key at
|
|
16
16
|
* https://buoy.gg or use it free on Saturday and Sunday.
|
|
17
|
-
*/const KEYGEN_CONFIG=exports.KEYGEN_CONFIG=Object.freeze({accountId:"b0eba0e8-e904-4906-b644-38f9aab57bed",productId:"bf67cb43-eeef-40ca-b308-e6e1b22c0eaa",apiUrl:"https://buoy.gg/api/license"});const KEYGEN_POLICIES=exports.KEYGEN_POLICIES=Object.freeze({free:"394e3351-1249-4f73-807a-703408604c0e",solo:"fa5d3c8f-5379-40f1-b63e-ab8a974b2f28",business:"690c2212-8e54-426f-b4b4-002ee1c0ae2b"});const LICENSE_CACHE_DURATION=exports.LICENSE_CACHE_DURATION=30*24*60*60*1e3;const LICENSE_REVALIDATION_INTERVAL=exports.LICENSE_REVALIDATION_INTERVAL=24*60*60*1e3;const LICENSE_STORAGE_KEY=exports.LICENSE_STORAGE_KEY="buoy-gg-license";const DEVICE_FINGERPRINT_STORAGE_KEY=exports.DEVICE_FINGERPRINT_STORAGE_KEY="buoy-gg-device-fingerprint";const LICENSE_LAUNCH_VALIDATION_TTL=exports.LICENSE_LAUNCH_VALIDATION_TTL=60*60*1e3;const LICENSE_TRANSIENT_RETRY_DELAYS=exports.LICENSE_TRANSIENT_RETRY_DELAYS=[5*1e3,20*1e3,60*1e3,5*60*1e3,15*60*1e3];const LICENSE_RATE_LIMIT_DEFAULT_WAIT=exports.LICENSE_RATE_LIMIT_DEFAULT_WAIT=60*1e3;const LICENSE_QUOTA_COOLDOWN=exports.LICENSE_QUOTA_COOLDOWN=60*60*1e3;const LICENSE_VERDICT_CACHE_DURATION=exports.LICENSE_VERDICT_CACHE_DURATION=24*60*60*1e3;const LICENSE_FLEET_MACHINE_THRESHOLD=exports.LICENSE_FLEET_MACHINE_THRESHOLD=50;const LICENSE_QUIET_VALIDATION_TTL=exports.LICENSE_QUIET_VALIDATION_TTL=LICENSE_CACHE_DURATION;const LICENSE_HOLD_STORAGE_KEY=exports.LICENSE_HOLD_STORAGE_KEY="buoy-gg-license-hold";
|
|
17
|
+
*/const KEYGEN_CONFIG=exports.KEYGEN_CONFIG=Object.freeze({accountId:"b0eba0e8-e904-4906-b644-38f9aab57bed",productId:"bf67cb43-eeef-40ca-b308-e6e1b22c0eaa",apiUrl:"https://buoy.gg/api/license"});const KEYGEN_POLICIES=exports.KEYGEN_POLICIES=Object.freeze({free:"394e3351-1249-4f73-807a-703408604c0e",solo:"fa5d3c8f-5379-40f1-b63e-ab8a974b2f28",business:"690c2212-8e54-426f-b4b4-002ee1c0ae2b"});const LICENSE_CACHE_DURATION=exports.LICENSE_CACHE_DURATION=30*24*60*60*1e3;const LICENSE_REVALIDATION_INTERVAL=exports.LICENSE_REVALIDATION_INTERVAL=24*60*60*1e3;const LICENSE_STORAGE_KEY=exports.LICENSE_STORAGE_KEY="buoy-gg-license";const DEVICE_FINGERPRINT_STORAGE_KEY=exports.DEVICE_FINGERPRINT_STORAGE_KEY="buoy-gg-device-fingerprint";const DEVICE_FINGERPRINT_OWNER_STORAGE_KEY=exports.DEVICE_FINGERPRINT_OWNER_STORAGE_KEY="buoy-gg-device-fingerprint-owner";const LICENSE_LAUNCH_VALIDATION_TTL=exports.LICENSE_LAUNCH_VALIDATION_TTL=60*60*1e3;const LICENSE_TRANSIENT_RETRY_DELAYS=exports.LICENSE_TRANSIENT_RETRY_DELAYS=[5*1e3,20*1e3,60*1e3,5*60*1e3,15*60*1e3];const LICENSE_RATE_LIMIT_DEFAULT_WAIT=exports.LICENSE_RATE_LIMIT_DEFAULT_WAIT=60*1e3;const LICENSE_QUOTA_COOLDOWN=exports.LICENSE_QUOTA_COOLDOWN=60*60*1e3;const LICENSE_VERDICT_CACHE_DURATION=exports.LICENSE_VERDICT_CACHE_DURATION=24*60*60*1e3;const LICENSE_FLEET_MACHINE_THRESHOLD=exports.LICENSE_FLEET_MACHINE_THRESHOLD=50;const LICENSE_QUIET_VALIDATION_TTL=exports.LICENSE_QUIET_VALIDATION_TTL=LICENSE_CACHE_DURATION;const LICENSE_HOLD_STORAGE_KEY=exports.LICENSE_HOLD_STORAGE_KEY="buoy-gg-license-hold";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.generateUUID=generateUUID;exports.getDefaultDeviceName=getDefaultDeviceName;exports.getDeviceMetadata=getDeviceMetadata;exports.isDevBundle=isDevBundle;exports.isSimulator=isSimulator;var _reactNative=require("react-native");function generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;const r=e==="x"?t:t&3|8;return r.toString(16)})}function isDevBundle(){try{const e=_reactNative.NativeModules?.SourceCode;const t=e?.scriptURL??e?.getConstants?.()?.scriptURL;if(typeof t==="string"&&t.length>0)return/^https?:\/\//i.test(t)}catch{}return typeof __DEV__!=="undefined"&&__DEV__}function isSimulator(){if(_reactNative.Platform.OS==="ios"){const e=_reactNative.Platform.constants;if(e?.interfaceIdiom==="simulator"){return true}if("isTesting"in _reactNative.Platform&&_reactNative.Platform.isTesting){return true}return false}if(_reactNative.Platform.OS==="android"){const e=_reactNative.Platform.constants;const t=String(e?.Brand||"").toLowerCase();const r=String(e?.Model||"").toLowerCase();const n=String(e?.Fingerprint||"").toLowerCase();const o=t.includes("generic")||r.includes("sdk")||r.includes("emulator")||r.includes("android sdk")||n.includes("generic");return o}return false}function getDeviceMetadata(){const e={platform:_reactNative.Platform.OS,osVersion:String(_reactNative.Platform.Version),isSimulator:String(isSimulator())};if(_reactNative.Platform.OS==="android"){const t=_reactNative.Platform.constants;if(t?.Brand)e.brand=String(t.Brand);if(t?.Model)e.model=String(t.Model);if(t?.Manufacturer)e.manufacturer=String(t.Manufacturer)}if(_reactNative.Platform.OS==="ios"){const t=_reactNative.Platform.constants;if(t?.systemName)e.systemName=String(t.systemName);if(t?.interfaceIdiom)e.interfaceIdiom=String(t.interfaceIdiom)}return e}function getDefaultDeviceName(){const e=_reactNative.Platform.OS==="ios"?"iOS":_reactNative.Platform.OS==="android"?"Android":_reactNative.Platform.OS;const t=isSimulator()?" Simulator":"";return`My ${e} Device${t}`}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.generateUUID=generateUUID;exports.getDefaultDeviceName=getDefaultDeviceName;exports.getDeviceMetadata=getDeviceMetadata;exports.getDeviceOwnerId=getDeviceOwnerId;exports.isDevBundle=isDevBundle;exports.isSimulator=isSimulator;var _reactNative=require("react-native");function generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;const r=e==="x"?t:t&3|8;return r.toString(16)})}function isDevBundle(){try{const e=_reactNative.NativeModules?.SourceCode;const t=e?.scriptURL??e?.getConstants?.()?.scriptURL;if(typeof t==="string"&&t.length>0)return/^https?:\/\//i.test(t)}catch{}return typeof __DEV__!=="undefined"&&__DEV__}function isSimulator(){if(_reactNative.Platform.OS==="ios"){const e=_reactNative.Platform.constants;if(e?.interfaceIdiom==="simulator"){return true}if("isTesting"in _reactNative.Platform&&_reactNative.Platform.isTesting){return true}return false}if(_reactNative.Platform.OS==="android"){const e=_reactNative.Platform.constants;const t=String(e?.Brand||"").toLowerCase();const r=String(e?.Model||"").toLowerCase();const n=String(e?.Fingerprint||"").toLowerCase();const o=t.includes("generic")||r.includes("sdk")||r.includes("emulator")||r.includes("android sdk")||n.includes("generic");return o}return false}function getDeviceMetadata(){const e={platform:_reactNative.Platform.OS,osVersion:String(_reactNative.Platform.Version),isSimulator:String(isSimulator())};if(_reactNative.Platform.OS==="android"){const t=_reactNative.Platform.constants;if(t?.Brand)e.brand=String(t.Brand);if(t?.Model)e.model=String(t.Model);if(t?.Manufacturer)e.manufacturer=String(t.Manufacturer)}if(_reactNative.Platform.OS==="ios"){const t=_reactNative.Platform.constants;if(t?.systemName)e.systemName=String(t.systemName);if(t?.interfaceIdiom)e.interfaceIdiom=String(t.interfaceIdiom)}return e}function getDefaultDeviceName(){const e=_reactNative.Platform.OS==="ios"?"iOS":_reactNative.Platform.OS==="android"?"Android":_reactNative.Platform.OS;const t=isSimulator()?" Simulator":"";return`My ${e} Device${t}`}async function getDeviceOwnerId(){try{if(_reactNative.Platform.OS==="android"){const e=_reactNative.TurboModuleRegistry?.get?.("PlatformConstants");const t=_reactNative.NativeModules?.PlatformConstants;const r=(e?.getAndroidID??t?.getAndroidID)?.call(e?.getAndroidID?e:t);return typeof r==="string"&&r.length>0?r:null}if(_reactNative.Platform.OS==="ios"){const e=require("expo-application");const t=await(e?.getIosIdForVendorAsync?.()??null);return typeof t==="string"&&t.length>0?t:null}}catch{}return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.generateUUID=generateUUID;exports.getDefaultDeviceName=getDefaultDeviceName;exports.getDeviceMetadata=getDeviceMetadata;exports.isDevBundle=isDevBundle;exports.isSimulator=isSimulator;var _capacitorHost=require("./capacitorHost.js");function generateUUID(){if(typeof crypto!=="undefined"&&crypto.randomUUID){return crypto.randomUUID()}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=Math.random()*16|0;const r=e==="x"?n:n&3|8;return r.toString(16)})}function isDevBundle(){const e=(0,_capacitorHost.capacitorDebug)();if(e!==null)return e;if(typeof __DEV__!=="undefined")return __DEV__;try{if(typeof navigator!=="undefined"&&/electron/i.test(navigator.userAgent))return true}catch{}return typeof process!=="undefined"&&process.env?.NODE_ENV!=="production"}function isSimulator(){return false}function detectPlatform(){if(typeof navigator==="undefined"){return"unknown"}const e=navigator.userAgent.toLowerCase();const n=navigator.platform?.toLowerCase()||"";if(e.includes("electron")){if(n.includes("mac")||e.includes("mac")){return"electron-macos"}if(n.includes("win")||e.includes("win")){return"electron-windows"}if(n.includes("linux")||e.includes("linux")){return"electron-linux"}return"electron"}if(n.includes("mac")||e.includes("mac")){return"macos"}if(n.includes("win")||e.includes("win")){return"windows"}if(n.includes("linux")||e.includes("linux")){return"linux"}if(/iphone|ipad|ipod/.test(e)){return"ios-web"}if(e.includes("android")){return"android-web"}return"web"}function getOSVersion(){if(typeof navigator==="undefined"){return"unknown"}const e=navigator.userAgent;const n=e.match(/Mac OS X ([\d_.]+)/);if(n){return n[1].replace(/_/g,".")}const r=e.match(/Windows NT ([\d.]+)/);if(r){const t={"10.0":"10/11","6.3":"8.1","6.2":"8","6.1":"7"};return t[r[1]]||r[1]}if(e.includes("Linux")){return"Linux"}return"unknown"}function getBrowserInfo(){if(typeof navigator==="undefined"){return{name:"unknown",version:"unknown"}}const e=navigator.userAgent;const n=e.match(/Electron\/([\d.]+)/);if(n){return{name:"Electron",version:n[1]}}const r=e.match(/Chrome\/([\d.]+)/);if(r&&!e.includes("Edg")){return{name:"Chrome",version:r[1]}}const t=e.match(/Edg\/([\d.]+)/);if(t){return{name:"Edge",version:t[1]}}const o=e.match(/Firefox\/([\d.]+)/);if(o){return{name:"Firefox",version:o[1]}}const i=e.match(/Version\/([\d.]+).*Safari/);if(i){return{name:"Safari",version:i[1]}}return{name:"unknown",version:"unknown"}}function getDeviceMetadata(){const e={platform:detectPlatform(),osVersion:getOSVersion(),isSimulator:"false"};const n=getBrowserInfo();e.browser=n.name;e.browserVersion=n.version;if(typeof window!=="undefined"&&window.screen){e.screenResolution=`${window.screen.width}x${window.screen.height}`}if(typeof navigator!=="undefined"&&navigator.language){e.language=navigator.language}try{e.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}return e}function getDefaultDeviceName(){const e=detectPlatform();const n=getBrowserInfo();if(e.startsWith("electron")){const r=e.replace("electron-","").replace("electron","Desktop");return`${r.charAt(0).toUpperCase()+r.slice(1)} App`}if(n.name!=="unknown"){return`${n.name} Browser`}return"Web Browser"}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.generateUUID=generateUUID;exports.getDefaultDeviceName=getDefaultDeviceName;exports.getDeviceMetadata=getDeviceMetadata;exports.getDeviceOwnerId=getDeviceOwnerId;exports.isDevBundle=isDevBundle;exports.isSimulator=isSimulator;var _capacitorHost=require("./capacitorHost.js");function generateUUID(){if(typeof crypto!=="undefined"&&crypto.randomUUID){return crypto.randomUUID()}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=Math.random()*16|0;const r=e==="x"?n:n&3|8;return r.toString(16)})}function isDevBundle(){const e=(0,_capacitorHost.capacitorDebug)();if(e!==null)return e;if(typeof __DEV__!=="undefined")return __DEV__;try{if(typeof navigator!=="undefined"&&/electron/i.test(navigator.userAgent))return true}catch{}return typeof process!=="undefined"&&process.env?.NODE_ENV!=="production"}function isSimulator(){return false}function detectPlatform(){if(typeof navigator==="undefined"){return"unknown"}const e=navigator.userAgent.toLowerCase();const n=navigator.platform?.toLowerCase()||"";if(e.includes("electron")){if(n.includes("mac")||e.includes("mac")){return"electron-macos"}if(n.includes("win")||e.includes("win")){return"electron-windows"}if(n.includes("linux")||e.includes("linux")){return"electron-linux"}return"electron"}if(n.includes("mac")||e.includes("mac")){return"macos"}if(n.includes("win")||e.includes("win")){return"windows"}if(n.includes("linux")||e.includes("linux")){return"linux"}if(/iphone|ipad|ipod/.test(e)){return"ios-web"}if(e.includes("android")){return"android-web"}return"web"}function getOSVersion(){if(typeof navigator==="undefined"){return"unknown"}const e=navigator.userAgent;const n=e.match(/Mac OS X ([\d_.]+)/);if(n){return n[1].replace(/_/g,".")}const r=e.match(/Windows NT ([\d.]+)/);if(r){const t={"10.0":"10/11","6.3":"8.1","6.2":"8","6.1":"7"};return t[r[1]]||r[1]}if(e.includes("Linux")){return"Linux"}return"unknown"}function getBrowserInfo(){if(typeof navigator==="undefined"){return{name:"unknown",version:"unknown"}}const e=navigator.userAgent;const n=e.match(/Electron\/([\d.]+)/);if(n){return{name:"Electron",version:n[1]}}const r=e.match(/Chrome\/([\d.]+)/);if(r&&!e.includes("Edg")){return{name:"Chrome",version:r[1]}}const t=e.match(/Edg\/([\d.]+)/);if(t){return{name:"Edge",version:t[1]}}const o=e.match(/Firefox\/([\d.]+)/);if(o){return{name:"Firefox",version:o[1]}}const i=e.match(/Version\/([\d.]+).*Safari/);if(i){return{name:"Safari",version:i[1]}}return{name:"unknown",version:"unknown"}}function getDeviceMetadata(){const e={platform:detectPlatform(),osVersion:getOSVersion(),isSimulator:"false"};const n=getBrowserInfo();e.browser=n.name;e.browserVersion=n.version;if(typeof window!=="undefined"&&window.screen){e.screenResolution=`${window.screen.width}x${window.screen.height}`}if(typeof navigator!=="undefined"&&navigator.language){e.language=navigator.language}try{e.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}return e}function getDefaultDeviceName(){const e=detectPlatform();const n=getBrowserInfo();if(e.startsWith("electron")){const r=e.replace("electron-","").replace("electron","Desktop");return`${r.charAt(0).toUpperCase()+r.slice(1)} App`}if(n.name!=="unknown"){return`${n.name} Browser`}return"Web Browser"}async function getDeviceOwnerId(){return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"generateUUID",{enumerable:true,get:function(){return _deviceInfo.generateUUID}});Object.defineProperty(exports,"getDefaultDeviceName",{enumerable:true,get:function(){return _deviceInfo.getDefaultDeviceName}});Object.defineProperty(exports,"getDeviceMetadata",{enumerable:true,get:function(){return _deviceInfo.getDeviceMetadata}});Object.defineProperty(exports,"isDevBundle",{enumerable:true,get:function(){return _deviceInfo.isDevBundle}});Object.defineProperty(exports,"isSimulator",{enumerable:true,get:function(){return _deviceInfo.isSimulator}});var _deviceInfo=require("./device-info");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"generateUUID",{enumerable:true,get:function(){return _deviceInfo.generateUUID}});Object.defineProperty(exports,"getDefaultDeviceName",{enumerable:true,get:function(){return _deviceInfo.getDefaultDeviceName}});Object.defineProperty(exports,"getDeviceMetadata",{enumerable:true,get:function(){return _deviceInfo.getDeviceMetadata}});Object.defineProperty(exports,"getDeviceOwnerId",{enumerable:true,get:function(){return _deviceInfo.getDeviceOwnerId}});Object.defineProperty(exports,"isDevBundle",{enumerable:true,get:function(){return _deviceInfo.isDevBundle}});Object.defineProperty(exports,"isSimulator",{enumerable:true,get:function(){return _deviceInfo.isSimulator}});var _deviceInfo=require("./device-info");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"generateUUID",{enumerable:true,get:function(){return _deviceInfoWeb.generateUUID}});Object.defineProperty(exports,"getDefaultDeviceName",{enumerable:true,get:function(){return _deviceInfoWeb.getDefaultDeviceName}});Object.defineProperty(exports,"getDeviceMetadata",{enumerable:true,get:function(){return _deviceInfoWeb.getDeviceMetadata}});Object.defineProperty(exports,"isDevBundle",{enumerable:true,get:function(){return _deviceInfoWeb.isDevBundle}});Object.defineProperty(exports,"isSimulator",{enumerable:true,get:function(){return _deviceInfoWeb.isSimulator}});var _deviceInfoWeb=require("./device-info.web.js");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"generateUUID",{enumerable:true,get:function(){return _deviceInfoWeb.generateUUID}});Object.defineProperty(exports,"getDefaultDeviceName",{enumerable:true,get:function(){return _deviceInfoWeb.getDefaultDeviceName}});Object.defineProperty(exports,"getDeviceMetadata",{enumerable:true,get:function(){return _deviceInfoWeb.getDeviceMetadata}});Object.defineProperty(exports,"getDeviceOwnerId",{enumerable:true,get:function(){return _deviceInfoWeb.getDeviceOwnerId}});Object.defineProperty(exports,"isDevBundle",{enumerable:true,get:function(){return _deviceInfoWeb.isDevBundle}});Object.defineProperty(exports,"isSimulator",{enumerable:true,get:function(){return _deviceInfoWeb.isSimulator}});var _deviceInfoWeb=require("./device-info.web.js");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.hashDeviceMarker=hashDeviceMarker;exports.resolveDeviceFingerprint=resolveDeviceFingerprint;function resolveDeviceFingerprint(n){const{stored:t,storedOwner:e,marker:r,blobFingerprint:i,mint:s}=n;const a=!!r&&!!e&&e!==r;if(a)return{fingerprint:s(),owner:r,restored:true,changed:true};const o=r??e;if(t)return{fingerprint:t,owner:o,restored:false,changed:o!==e};return{fingerprint:i||s(),owner:o,restored:false,changed:true}}function hashDeviceMarker(n){let t=2166136261;let e=16777619;for(let r=0;r<n.length;r++){const i=n.charCodeAt(r);t=Math.imul(t^i,16777619)>>>0;e=Math.imul(e^i,1540483477)>>>0}return`v1:${t.toString(16).padStart(8,"0")}${e.toString(16).padStart(8,"0")}`}
|
package/lib/commonjs/headless.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"CLI_AUDIENCE",{enumerable:true,get:function(){return _nodeSession.CLI_AUDIENCE}});Object.defineProperty(exports,"DESKTOP_AUDIENCE",{enumerable:true,get:function(){return _nodeSession.DESKTOP_AUDIENCE}});Object.defineProperty(exports,"DEV_AUDIENCE",{enumerable:true,get:function(){return _devToken.DEV_AUDIENCE}});Object.defineProperty(exports,"KEYGEN_CONFIG",{enumerable:true,get:function(){return _config.KEYGEN_CONFIG}});Object.defineProperty(exports,"LICENSE_CACHE_DURATION",{enumerable:true,get:function(){return _config.LICENSE_CACHE_DURATION}});Object.defineProperty(exports,"LICENSE_LAUNCH_VALIDATION_TTL",{enumerable:true,get:function(){return _config.LICENSE_LAUNCH_VALIDATION_TTL}});Object.defineProperty(exports,"LICENSE_REVALIDATION_INTERVAL",{enumerable:true,get:function(){return _config.LICENSE_REVALIDATION_INTERVAL}});Object.defineProperty(exports,"LICENSE_TRANSIENT_RETRY_DELAYS",{enumerable:true,get:function(){return _config.LICENSE_TRANSIENT_RETRY_DELAYS}});Object.defineProperty(exports,"LicenseTransportError",{enumerable:true,get:function(){return _api.LicenseTransportError}});Object.defineProperty(exports,"SERVICE_AUDIENCE",{enumerable:true,get:function(){return _serviceKey.SERVICE_AUDIENCE}});Object.defineProperty(exports,"SERVICE_KEY_PREFIX",{enumerable:true,get:function(){return _serviceKey.SERVICE_KEY_PREFIX}});Object.defineProperty(exports,"SESSION_OFFLINE_GRACE_MS",{enumerable:true,get:function(){return _sessionManager.SESSION_OFFLINE_GRACE_MS}});Object.defineProperty(exports,"SessionError",{enumerable:true,get:function(){return _sessionManager.SessionError}});Object.defineProperty(exports,"SessionManagerImpl",{enumerable:true,get:function(){return _sessionManager.SessionManagerImpl}});Object.defineProperty(exports,"accountHashFor",{enumerable:true,get:function(){return _freeToken.accountHashFor}});Object.defineProperty(exports,"checkDevToken",{enumerable:true,get:function(){return _devToken.checkDevToken}});Object.defineProperty(exports,"createNodeSession",{enumerable:true,get:function(){return _nodeSession.createNodeSession}});Object.defineProperty(exports,"defaultSessionFile",{enumerable:true,get:function(){return _nodeSession.defaultSessionFile}});Object.defineProperty(exports,"exchangeServiceKey",{enumerable:true,get:function(){return _serviceKey.exchangeServiceKey}});Object.defineProperty(exports,"fileLock",{enumerable:true,get:function(){return _nodeSession.fileLock}});Object.defineProperty(exports,"fileSessionStorage",{enumerable:true,get:function(){return _nodeSession.fileSessionStorage}});Object.defineProperty(exports,"isAcceptedValidation",{enumerable:true,get:function(){return _api.isAcceptedValidation}});Object.defineProperty(exports,"isBuoyToken",{enumerable:true,get:function(){return _freeToken.isBuoyToken}});Object.defineProperty(exports,"isDevToken",{enumerable:true,get:function(){return _devToken.isDevToken}});Object.defineProperty(exports,"isRecognizedAccount",{enumerable:true,get:function(){return _tier.isRecognizedAccount}});Object.defineProperty(exports,"isServiceKey",{enumerable:true,get:function(){return _serviceKey.isServiceKey}});Object.defineProperty(exports,"isTransientLicenseError",{enumerable:true,get:function(){return _api.isTransientLicenseError}});Object.defineProperty(exports,"mintFreeToken",{enumerable:true,get:function(){return _freeToken.mintFreeToken}});Object.defineProperty(exports,"mintSessionToken",{enumerable:true,get:function(){return _sessionToken.mintSessionToken}});Object.defineProperty(exports,"normalizeLicenseKey",{enumerable:true,get:function(){return _serviceKey.normalizeLicenseKey}});Object.defineProperty(exports,"publicKeyFor",{enumerable:true,get:function(){return _freeToken.publicKeyFor}});Object.defineProperty(exports,"receiveCodeOnLoopback",{enumerable:true,get:function(){return _nodeSession.receiveCodeOnLoopback}});Object.defineProperty(exports,"resolveAccountAccess",{enumerable:true,get:function(){return _accountAccess.resolveAccountAccess}});Object.defineProperty(exports,"resolveTier",{enumerable:true,get:function(){return _tier.resolveTier}});Object.defineProperty(exports,"sameLicenseKey",{enumerable:true,get:function(){return _serviceKey.sameLicenseKey}});Object.defineProperty(exports,"signCache",{enumerable:true,get:function(){return _cacheSignature.signCache}});Object.defineProperty(exports,"validateLicense",{enumerable:true,get:function(){return _api.validateLicense}});Object.defineProperty(exports,"verifyCacheSignature",{enumerable:true,get:function(){return _cacheSignature.verifyCacheSignature}});Object.defineProperty(exports,"verifyFreeToken",{enumerable:true,get:function(){return _freeToken.verifyFreeToken}});Object.defineProperty(exports,"verifySessionToken",{enumerable:true,get:function(){return _sessionToken.verifySessionToken}});var _api=require("./api.js");var _tier=require("./tier.js");var _freeToken=require("./freeToken.js");var _accountAccess=require("./accountAccess.js");var _cacheSignature=require("./cacheSignature.js");var _config=require("./config.js");var _nodeSession=require("./nodeSession.js");var _sessionManager=require("./sessionManager.js");var _sessionToken=require("./sessionToken.js");var _serviceKey=require("./serviceKey.js");var _devToken=require("./devToken.js");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"BUOY_ACCOUNT_KEY_NAMES",{enumerable:true,get:function(){return _accountKeyNames.BUOY_ACCOUNT_KEY_NAMES}});Object.defineProperty(exports,"CLI_AUDIENCE",{enumerable:true,get:function(){return _nodeSession.CLI_AUDIENCE}});Object.defineProperty(exports,"DESKTOP_AUDIENCE",{enumerable:true,get:function(){return _nodeSession.DESKTOP_AUDIENCE}});Object.defineProperty(exports,"DEV_AUDIENCE",{enumerable:true,get:function(){return _devToken.DEV_AUDIENCE}});Object.defineProperty(exports,"KEYGEN_CONFIG",{enumerable:true,get:function(){return _config.KEYGEN_CONFIG}});Object.defineProperty(exports,"LICENSE_CACHE_DURATION",{enumerable:true,get:function(){return _config.LICENSE_CACHE_DURATION}});Object.defineProperty(exports,"LICENSE_LAUNCH_VALIDATION_TTL",{enumerable:true,get:function(){return _config.LICENSE_LAUNCH_VALIDATION_TTL}});Object.defineProperty(exports,"LICENSE_REVALIDATION_INTERVAL",{enumerable:true,get:function(){return _config.LICENSE_REVALIDATION_INTERVAL}});Object.defineProperty(exports,"LICENSE_TRANSIENT_RETRY_DELAYS",{enumerable:true,get:function(){return _config.LICENSE_TRANSIENT_RETRY_DELAYS}});Object.defineProperty(exports,"LicenseTransportError",{enumerable:true,get:function(){return _api.LicenseTransportError}});Object.defineProperty(exports,"SERVICE_AUDIENCE",{enumerable:true,get:function(){return _serviceKey.SERVICE_AUDIENCE}});Object.defineProperty(exports,"SERVICE_KEY_PREFIX",{enumerable:true,get:function(){return _serviceKey.SERVICE_KEY_PREFIX}});Object.defineProperty(exports,"SESSION_OFFLINE_GRACE_MS",{enumerable:true,get:function(){return _sessionManager.SESSION_OFFLINE_GRACE_MS}});Object.defineProperty(exports,"SessionError",{enumerable:true,get:function(){return _sessionManager.SessionError}});Object.defineProperty(exports,"SessionManagerImpl",{enumerable:true,get:function(){return _sessionManager.SessionManagerImpl}});Object.defineProperty(exports,"accountHashFor",{enumerable:true,get:function(){return _freeToken.accountHashFor}});Object.defineProperty(exports,"checkDevToken",{enumerable:true,get:function(){return _devToken.checkDevToken}});Object.defineProperty(exports,"createNodeSession",{enumerable:true,get:function(){return _nodeSession.createNodeSession}});Object.defineProperty(exports,"defaultSessionFile",{enumerable:true,get:function(){return _nodeSession.defaultSessionFile}});Object.defineProperty(exports,"exchangeServiceKey",{enumerable:true,get:function(){return _serviceKey.exchangeServiceKey}});Object.defineProperty(exports,"fileLock",{enumerable:true,get:function(){return _nodeSession.fileLock}});Object.defineProperty(exports,"fileSessionStorage",{enumerable:true,get:function(){return _nodeSession.fileSessionStorage}});Object.defineProperty(exports,"isAcceptedValidation",{enumerable:true,get:function(){return _api.isAcceptedValidation}});Object.defineProperty(exports,"isBuoyAccountKeyName",{enumerable:true,get:function(){return _accountKeyNames.isBuoyAccountKeyName}});Object.defineProperty(exports,"isBuoyToken",{enumerable:true,get:function(){return _freeToken.isBuoyToken}});Object.defineProperty(exports,"isDevToken",{enumerable:true,get:function(){return _devToken.isDevToken}});Object.defineProperty(exports,"isRecognizedAccount",{enumerable:true,get:function(){return _tier.isRecognizedAccount}});Object.defineProperty(exports,"isServiceKey",{enumerable:true,get:function(){return _serviceKey.isServiceKey}});Object.defineProperty(exports,"isTransientLicenseError",{enumerable:true,get:function(){return _api.isTransientLicenseError}});Object.defineProperty(exports,"maskBuoyAccountKey",{enumerable:true,get:function(){return _accountKeyNames.maskBuoyAccountKey}});Object.defineProperty(exports,"maskBuoyAccountKeys",{enumerable:true,get:function(){return _accountKeyNames.maskBuoyAccountKeys}});Object.defineProperty(exports,"mintFreeToken",{enumerable:true,get:function(){return _freeToken.mintFreeToken}});Object.defineProperty(exports,"mintSessionToken",{enumerable:true,get:function(){return _sessionToken.mintSessionToken}});Object.defineProperty(exports,"normalizeLicenseKey",{enumerable:true,get:function(){return _serviceKey.normalizeLicenseKey}});Object.defineProperty(exports,"publicKeyFor",{enumerable:true,get:function(){return _freeToken.publicKeyFor}});Object.defineProperty(exports,"receiveCodeOnLoopback",{enumerable:true,get:function(){return _nodeSession.receiveCodeOnLoopback}});Object.defineProperty(exports,"resolveAccountAccess",{enumerable:true,get:function(){return _accountAccess.resolveAccountAccess}});Object.defineProperty(exports,"resolveTier",{enumerable:true,get:function(){return _tier.resolveTier}});Object.defineProperty(exports,"sameLicenseKey",{enumerable:true,get:function(){return _serviceKey.sameLicenseKey}});Object.defineProperty(exports,"signCache",{enumerable:true,get:function(){return _cacheSignature.signCache}});Object.defineProperty(exports,"validateLicense",{enumerable:true,get:function(){return _api.validateLicense}});Object.defineProperty(exports,"verifyCacheSignature",{enumerable:true,get:function(){return _cacheSignature.verifyCacheSignature}});Object.defineProperty(exports,"verifyFreeToken",{enumerable:true,get:function(){return _freeToken.verifyFreeToken}});Object.defineProperty(exports,"verifySessionToken",{enumerable:true,get:function(){return _sessionToken.verifySessionToken}});var _api=require("./api.js");var _tier=require("./tier.js");var _freeToken=require("./freeToken.js");var _accountAccess=require("./accountAccess.js");var _cacheSignature=require("./cacheSignature.js");var _config=require("./config.js");var _nodeSession=require("./nodeSession.js");var _sessionManager=require("./sessionManager.js");var _sessionToken=require("./sessionToken.js");var _serviceKey=require("./serviceKey.js");var _accountKeyNames=require("./accountKeyNames.js");var _devToken=require("./devToken.js");
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"DeviceRegistrationModal",{enumerable:true,get:function(){return _DeviceRegistrationModal.DeviceRegistrationModal}});Object.defineProperty(exports,"LicenseManager",{enumerable:true,get:function(){return _LicenseManager.LicenseManager}});Object.defineProperty(exports,"LicenseTransportError",{enumerable:true,get:function(){return _api.LicenseTransportError}});Object.defineProperty(exports,"SessionError",{enumerable:true,get:function(){return _sessionManager.SessionError}});Object.defineProperty(exports,"SessionManager",{enumerable:true,get:function(){return _sessionManager.SessionManager}});Object.defineProperty(exports,"callCapacitorAsApp",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorAsApp}});Object.defineProperty(exports,"callCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNative}});Object.defineProperty(exports,"callCapacitorNativeCallback",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNativeCallback}});Object.defineProperty(exports,"capacitorDebug",{enumerable:true,get:function(){return _capacitorHost.capacitorDebug}});Object.defineProperty(exports,"capacitorListenerCount",{enumerable:true,get:function(){return _capacitorBridge.capacitorListenerCount}});Object.defineProperty(exports,"capacitorPlatform",{enumerable:true,get:function(){return _capacitorHost.capacitorPlatform}});Object.defineProperty(exports,"capacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.capacitorPlugin}});Object.defineProperty(exports,"clearCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.clearCapacitorCalls}});Object.defineProperty(exports,"colorSchemeQueryValue",{enumerable:true,get:function(){return _capacitorBridge.colorSchemeQueryValue}});Object.defineProperty(exports,"emitCapacitorEvent",{enumerable:true,get:function(){return _capacitorBridge.emitCapacitorEvent}});Object.defineProperty(exports,"getCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorAppHost}});Object.defineProperty(exports,"getCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorCalls}});Object.defineProperty(exports,"getColorSchemeQueries",{enumerable:true,get:function(){return _capacitorBridge.getColorSchemeQueries}});Object.defineProperty(exports,"getSyncCredential",{enumerable:true,get:function(){return _syncCredential.getSyncCredential}});Object.defineProperty(exports,"getTeamCredential",{enumerable:true,get:function(){return _syncCredential.getTeamCredential}});Object.defineProperty(exports,"hasCapacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.hasCapacitorPlugin}});exports.hasEntitlement=hasEntitlement;Object.defineProperty(exports,"installCapacitorBridge",{enumerable:true,get:function(){return _capacitorBridge.installCapacitorBridge}});Object.defineProperty(exports,"interceptCapacitor",{enumerable:true,get:function(){return _capacitorBridge.interceptCapacitor}});Object.defineProperty(exports,"isBuoyToken",{enumerable:true,get:function(){return _freeToken.isBuoyToken}});Object.defineProperty(exports,"isCapacitorBridgeInstalled",{enumerable:true,get:function(){return _capacitorBridge.isCapacitorBridgeInstalled}});Object.defineProperty(exports,"isCapacitorNative",{enumerable:true,get:function(){return _capacitorHost.isCapacitorNative}});Object.defineProperty(exports,"isDevToken",{enumerable:true,get:function(){return _devToken.isDevToken}});exports.isPro=isPro;Object.defineProperty(exports,"isServiceKey",{enumerable:true,get:function(){return _serviceKey.isServiceKey}});Object.defineProperty(exports,"isTransientLicenseError",{enumerable:true,get:function(){return _api.isTransientLicenseError}});Object.defineProperty(exports,"isWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.isWeekendFreePro}});Object.defineProperty(exports,"listenCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.listenCapacitorNative}});Object.defineProperty(exports,"loadCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.loadCapacitorAppHost}});Object.defineProperty(exports,"makeCapacitorCallbackId",{enumerable:true,get:function(){return _capacitorBridge.makeCapacitorCallbackId}});Object.defineProperty(exports,"normalizeLicenseKey",{enumerable:true,get:function(){return _serviceKey.normalizeLicenseKey}});Object.defineProperty(exports,"resolveAccountAccess",{enumerable:true,get:function(){return _accountAccess.resolveAccountAccess}});Object.defineProperty(exports,"resolveDevBuild",{enumerable:true,get:function(){return _capacitorHost.resolveDevBuild}});Object.defineProperty(exports,"sameLicenseKey",{enumerable:true,get:function(){return _serviceKey.sameLicenseKey}});exports.setLicenseKey=setLicenseKey;Object.defineProperty(exports,"subscribeCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.subscribeCapacitorCalls}});Object.defineProperty(exports,"useAccountAccess",{enumerable:true,get:function(){return _hooks.useAccountAccess}});Object.defineProperty(exports,"useBuoySession",{enumerable:true,get:function(){return _hooks.useBuoySession}});Object.defineProperty(exports,"useFeatureAccess",{enumerable:true,get:function(){return _hooks.useFeatureAccess}});Object.defineProperty(exports,"useIsPro",{enumerable:true,get:function(){return _hooks.useIsPro}});Object.defineProperty(exports,"useLicense",{enumerable:true,get:function(){return _hooks.useLicense}});Object.defineProperty(exports,"useProAccess",{enumerable:true,get:function(){return _hooks.useProAccess}});Object.defineProperty(exports,"useTier",{enumerable:true,get:function(){return _hooks.useTier}});Object.defineProperty(exports,"useWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.useWeekendFreePro}});var _LicenseManager=require("./LicenseManager.js");var _DeviceRegistrationModal=require("./DeviceRegistrationModal.js");var _hooks=require("./hooks.js");var _accountAccess=require("./accountAccess.js");var _api=require("./api.js");var _sessionManager=require("./sessionManager.js");var _serviceKey=require("./serviceKey.js");var _capacitorHost=require("./capacitorHost.js");var _capacitorBridge=require("./capacitorBridge.js");var _devToken=require("./devToken.js");var _syncCredential=require("./syncCredential.js");var _freeToken=require("./freeToken.js");var _weekendPro=require("./weekendPro.js");function _interopRequireWildcard(r,t){if("function"==typeof WeakMap)var a=new WeakMap,s=new WeakMap;return(_interopRequireWildcard=function(e,c){if(!c&&e&&e.__esModule)return e;var n,u,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(n=c?s:a){if(n.has(e))return n.get(e);n.set(e,i)}for(const o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((u=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(u.get||u.set)?n(i,o,u):i[o]=e[o]);return i})(r,t)}/*!
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"BUOY_ACCOUNT_KEY_NAMES",{enumerable:true,get:function(){return _accountKeyNames.BUOY_ACCOUNT_KEY_NAMES}});Object.defineProperty(exports,"DeviceRegistrationModal",{enumerable:true,get:function(){return _DeviceRegistrationModal.DeviceRegistrationModal}});Object.defineProperty(exports,"LicenseManager",{enumerable:true,get:function(){return _LicenseManager.LicenseManager}});Object.defineProperty(exports,"LicenseTransportError",{enumerable:true,get:function(){return _api.LicenseTransportError}});Object.defineProperty(exports,"SessionError",{enumerable:true,get:function(){return _sessionManager.SessionError}});Object.defineProperty(exports,"SessionManager",{enumerable:true,get:function(){return _sessionManager.SessionManager}});Object.defineProperty(exports,"callCapacitorAsApp",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorAsApp}});Object.defineProperty(exports,"callCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNative}});Object.defineProperty(exports,"callCapacitorNativeCallback",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNativeCallback}});Object.defineProperty(exports,"capacitorDebug",{enumerable:true,get:function(){return _capacitorHost.capacitorDebug}});Object.defineProperty(exports,"capacitorListenerCount",{enumerable:true,get:function(){return _capacitorBridge.capacitorListenerCount}});Object.defineProperty(exports,"capacitorPlatform",{enumerable:true,get:function(){return _capacitorHost.capacitorPlatform}});Object.defineProperty(exports,"capacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.capacitorPlugin}});Object.defineProperty(exports,"clearCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.clearCapacitorCalls}});Object.defineProperty(exports,"colorSchemeQueryValue",{enumerable:true,get:function(){return _capacitorBridge.colorSchemeQueryValue}});Object.defineProperty(exports,"emitCapacitorEvent",{enumerable:true,get:function(){return _capacitorBridge.emitCapacitorEvent}});Object.defineProperty(exports,"getCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorAppHost}});Object.defineProperty(exports,"getCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorCalls}});Object.defineProperty(exports,"getColorSchemeQueries",{enumerable:true,get:function(){return _capacitorBridge.getColorSchemeQueries}});Object.defineProperty(exports,"getSyncCredential",{enumerable:true,get:function(){return _syncCredential.getSyncCredential}});Object.defineProperty(exports,"getTeamCredential",{enumerable:true,get:function(){return _syncCredential.getTeamCredential}});Object.defineProperty(exports,"hasCapacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.hasCapacitorPlugin}});exports.hasEntitlement=hasEntitlement;Object.defineProperty(exports,"installCapacitorBridge",{enumerable:true,get:function(){return _capacitorBridge.installCapacitorBridge}});Object.defineProperty(exports,"interceptCapacitor",{enumerable:true,get:function(){return _capacitorBridge.interceptCapacitor}});Object.defineProperty(exports,"isBuoyAccountKeyName",{enumerable:true,get:function(){return _accountKeyNames.isBuoyAccountKeyName}});Object.defineProperty(exports,"isBuoyToken",{enumerable:true,get:function(){return _freeToken.isBuoyToken}});Object.defineProperty(exports,"isCapacitorBridgeInstalled",{enumerable:true,get:function(){return _capacitorBridge.isCapacitorBridgeInstalled}});Object.defineProperty(exports,"isCapacitorNative",{enumerable:true,get:function(){return _capacitorHost.isCapacitorNative}});Object.defineProperty(exports,"isDevToken",{enumerable:true,get:function(){return _devToken.isDevToken}});exports.isPro=isPro;Object.defineProperty(exports,"isServiceKey",{enumerable:true,get:function(){return _serviceKey.isServiceKey}});Object.defineProperty(exports,"isTransientLicenseError",{enumerable:true,get:function(){return _api.isTransientLicenseError}});Object.defineProperty(exports,"isWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.isWeekendFreePro}});Object.defineProperty(exports,"listenCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.listenCapacitorNative}});Object.defineProperty(exports,"loadCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.loadCapacitorAppHost}});Object.defineProperty(exports,"makeCapacitorCallbackId",{enumerable:true,get:function(){return _capacitorBridge.makeCapacitorCallbackId}});Object.defineProperty(exports,"maskBuoyAccountKey",{enumerable:true,get:function(){return _accountKeyNames.maskBuoyAccountKey}});Object.defineProperty(exports,"maskBuoyAccountKeys",{enumerable:true,get:function(){return _accountKeyNames.maskBuoyAccountKeys}});Object.defineProperty(exports,"normalizeLicenseKey",{enumerable:true,get:function(){return _serviceKey.normalizeLicenseKey}});Object.defineProperty(exports,"resolveAccountAccess",{enumerable:true,get:function(){return _accountAccess.resolveAccountAccess}});Object.defineProperty(exports,"resolveDevBuild",{enumerable:true,get:function(){return _capacitorHost.resolveDevBuild}});Object.defineProperty(exports,"sameLicenseKey",{enumerable:true,get:function(){return _serviceKey.sameLicenseKey}});exports.setLicenseKey=setLicenseKey;Object.defineProperty(exports,"subscribeCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.subscribeCapacitorCalls}});Object.defineProperty(exports,"useAccountAccess",{enumerable:true,get:function(){return _hooks.useAccountAccess}});Object.defineProperty(exports,"useBuoySession",{enumerable:true,get:function(){return _hooks.useBuoySession}});Object.defineProperty(exports,"useFeatureAccess",{enumerable:true,get:function(){return _hooks.useFeatureAccess}});Object.defineProperty(exports,"useIsPro",{enumerable:true,get:function(){return _hooks.useIsPro}});Object.defineProperty(exports,"useLicense",{enumerable:true,get:function(){return _hooks.useLicense}});Object.defineProperty(exports,"useProAccess",{enumerable:true,get:function(){return _hooks.useProAccess}});Object.defineProperty(exports,"useTier",{enumerable:true,get:function(){return _hooks.useTier}});Object.defineProperty(exports,"useWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.useWeekendFreePro}});var _LicenseManager=require("./LicenseManager.js");var _DeviceRegistrationModal=require("./DeviceRegistrationModal.js");var _hooks=require("./hooks.js");var _accountAccess=require("./accountAccess.js");var _api=require("./api.js");var _sessionManager=require("./sessionManager.js");var _serviceKey=require("./serviceKey.js");var _accountKeyNames=require("./accountKeyNames.js");var _capacitorHost=require("./capacitorHost.js");var _capacitorBridge=require("./capacitorBridge.js");var _devToken=require("./devToken.js");var _syncCredential=require("./syncCredential.js");var _freeToken=require("./freeToken.js");var _weekendPro=require("./weekendPro.js");function _interopRequireWildcard(r,t){if("function"==typeof WeakMap)var a=new WeakMap,s=new WeakMap;return(_interopRequireWildcard=function(e,c){if(!c&&e&&e.__esModule)return e;var n,u,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(n=c?s:a){if(n.has(e))return n.get(e);n.set(e,i)}for(const o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((u=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(u.get||u.set)?n(i,o,u):i[o]=e[o]);return i})(r,t)}/*!
|
|
2
2
|
* PROPRIETARY — Buoy Pro license enforcement. NOT open source.
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Buoy. All rights reserved. Licensed under the Buoy EULA
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"LicenseManager",{enumerable:true,get:function(){return _LicenseManager.LicenseManager}});Object.defineProperty(exports,"LicenseTransportError",{enumerable:true,get:function(){return _api.LicenseTransportError}});Object.defineProperty(exports,"SessionError",{enumerable:true,get:function(){return _sessionManager.SessionError}});Object.defineProperty(exports,"SessionManager",{enumerable:true,get:function(){return _sessionManager.SessionManager}});Object.defineProperty(exports,"callCapacitorAsApp",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorAsApp}});Object.defineProperty(exports,"callCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNative}});Object.defineProperty(exports,"callCapacitorNativeCallback",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNativeCallback}});Object.defineProperty(exports,"capacitorDebug",{enumerable:true,get:function(){return _capacitorHost.capacitorDebug}});Object.defineProperty(exports,"capacitorListenerCount",{enumerable:true,get:function(){return _capacitorBridge.capacitorListenerCount}});Object.defineProperty(exports,"capacitorPlatform",{enumerable:true,get:function(){return _capacitorHost.capacitorPlatform}});Object.defineProperty(exports,"capacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.capacitorPlugin}});Object.defineProperty(exports,"clearCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.clearCapacitorCalls}});Object.defineProperty(exports,"colorSchemeQueryValue",{enumerable:true,get:function(){return _capacitorBridge.colorSchemeQueryValue}});Object.defineProperty(exports,"emitCapacitorEvent",{enumerable:true,get:function(){return _capacitorBridge.emitCapacitorEvent}});Object.defineProperty(exports,"getCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorAppHost}});Object.defineProperty(exports,"getCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorCalls}});Object.defineProperty(exports,"getColorSchemeQueries",{enumerable:true,get:function(){return _capacitorBridge.getColorSchemeQueries}});Object.defineProperty(exports,"getSyncCredential",{enumerable:true,get:function(){return _syncCredential.getSyncCredential}});Object.defineProperty(exports,"getTeamCredential",{enumerable:true,get:function(){return _syncCredential.getTeamCredential}});Object.defineProperty(exports,"hasCapacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.hasCapacitorPlugin}});exports.hasEntitlement=hasEntitlement;Object.defineProperty(exports,"installCapacitorBridge",{enumerable:true,get:function(){return _capacitorBridge.installCapacitorBridge}});Object.defineProperty(exports,"interceptCapacitor",{enumerable:true,get:function(){return _capacitorBridge.interceptCapacitor}});Object.defineProperty(exports,"isBuoyToken",{enumerable:true,get:function(){return _freeToken.isBuoyToken}});Object.defineProperty(exports,"isCapacitorBridgeInstalled",{enumerable:true,get:function(){return _capacitorBridge.isCapacitorBridgeInstalled}});Object.defineProperty(exports,"isCapacitorNative",{enumerable:true,get:function(){return _capacitorHost.isCapacitorNative}});Object.defineProperty(exports,"isDevToken",{enumerable:true,get:function(){return _devToken.isDevToken}});exports.isPro=isPro;Object.defineProperty(exports,"isServiceKey",{enumerable:true,get:function(){return _serviceKey.isServiceKey}});Object.defineProperty(exports,"isTransientLicenseError",{enumerable:true,get:function(){return _api.isTransientLicenseError}});Object.defineProperty(exports,"isWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.isWeekendFreePro}});Object.defineProperty(exports,"listenCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.listenCapacitorNative}});Object.defineProperty(exports,"loadCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.loadCapacitorAppHost}});Object.defineProperty(exports,"makeCapacitorCallbackId",{enumerable:true,get:function(){return _capacitorBridge.makeCapacitorCallbackId}});Object.defineProperty(exports,"normalizeLicenseKey",{enumerable:true,get:function(){return _serviceKey.normalizeLicenseKey}});Object.defineProperty(exports,"resolveAccountAccess",{enumerable:true,get:function(){return _accountAccess.resolveAccountAccess}});Object.defineProperty(exports,"resolveDevBuild",{enumerable:true,get:function(){return _capacitorHost.resolveDevBuild}});Object.defineProperty(exports,"sameLicenseKey",{enumerable:true,get:function(){return _serviceKey.sameLicenseKey}});exports.setLicenseKey=setLicenseKey;Object.defineProperty(exports,"subscribeCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.subscribeCapacitorCalls}});Object.defineProperty(exports,"useAccountAccess",{enumerable:true,get:function(){return _hooks.useAccountAccess}});Object.defineProperty(exports,"useBuoySession",{enumerable:true,get:function(){return _hooks.useBuoySession}});Object.defineProperty(exports,"useFeatureAccess",{enumerable:true,get:function(){return _hooks.useFeatureAccess}});Object.defineProperty(exports,"useIsPro",{enumerable:true,get:function(){return _hooks.useIsPro}});Object.defineProperty(exports,"useLicense",{enumerable:true,get:function(){return _hooks.useLicense}});Object.defineProperty(exports,"useProAccess",{enumerable:true,get:function(){return _hooks.useProAccess}});Object.defineProperty(exports,"useTier",{enumerable:true,get:function(){return _hooks.useTier}});Object.defineProperty(exports,"useWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.useWeekendFreePro}});var _LicenseManager=require("./LicenseManager.js");var _weekendPro=require("./weekendPro.js");var _hooks=require("./hooks.js");var _accountAccess=require("./accountAccess.js");var _api=require("./api.js");var _sessionManager=require("./sessionManager.js");var _serviceKey=require("./serviceKey.js");var _capacitorHost=require("./capacitorHost.js");var _capacitorBridge=require("./capacitorBridge.js");var _devToken=require("./devToken.js");var _syncCredential=require("./syncCredential.js");var _freeToken=require("./freeToken.js");function _interopRequireWildcard(n,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"BUOY_ACCOUNT_KEY_NAMES",{enumerable:true,get:function(){return _accountKeyNames.BUOY_ACCOUNT_KEY_NAMES}});Object.defineProperty(exports,"LicenseManager",{enumerable:true,get:function(){return _LicenseManager.LicenseManager}});Object.defineProperty(exports,"LicenseTransportError",{enumerable:true,get:function(){return _api.LicenseTransportError}});Object.defineProperty(exports,"SessionError",{enumerable:true,get:function(){return _sessionManager.SessionError}});Object.defineProperty(exports,"SessionManager",{enumerable:true,get:function(){return _sessionManager.SessionManager}});Object.defineProperty(exports,"callCapacitorAsApp",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorAsApp}});Object.defineProperty(exports,"callCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNative}});Object.defineProperty(exports,"callCapacitorNativeCallback",{enumerable:true,get:function(){return _capacitorBridge.callCapacitorNativeCallback}});Object.defineProperty(exports,"capacitorDebug",{enumerable:true,get:function(){return _capacitorHost.capacitorDebug}});Object.defineProperty(exports,"capacitorListenerCount",{enumerable:true,get:function(){return _capacitorBridge.capacitorListenerCount}});Object.defineProperty(exports,"capacitorPlatform",{enumerable:true,get:function(){return _capacitorHost.capacitorPlatform}});Object.defineProperty(exports,"capacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.capacitorPlugin}});Object.defineProperty(exports,"clearCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.clearCapacitorCalls}});Object.defineProperty(exports,"colorSchemeQueryValue",{enumerable:true,get:function(){return _capacitorBridge.colorSchemeQueryValue}});Object.defineProperty(exports,"emitCapacitorEvent",{enumerable:true,get:function(){return _capacitorBridge.emitCapacitorEvent}});Object.defineProperty(exports,"getCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorAppHost}});Object.defineProperty(exports,"getCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.getCapacitorCalls}});Object.defineProperty(exports,"getColorSchemeQueries",{enumerable:true,get:function(){return _capacitorBridge.getColorSchemeQueries}});Object.defineProperty(exports,"getSyncCredential",{enumerable:true,get:function(){return _syncCredential.getSyncCredential}});Object.defineProperty(exports,"getTeamCredential",{enumerable:true,get:function(){return _syncCredential.getTeamCredential}});Object.defineProperty(exports,"hasCapacitorPlugin",{enumerable:true,get:function(){return _capacitorBridge.hasCapacitorPlugin}});exports.hasEntitlement=hasEntitlement;Object.defineProperty(exports,"installCapacitorBridge",{enumerable:true,get:function(){return _capacitorBridge.installCapacitorBridge}});Object.defineProperty(exports,"interceptCapacitor",{enumerable:true,get:function(){return _capacitorBridge.interceptCapacitor}});Object.defineProperty(exports,"isBuoyAccountKeyName",{enumerable:true,get:function(){return _accountKeyNames.isBuoyAccountKeyName}});Object.defineProperty(exports,"isBuoyToken",{enumerable:true,get:function(){return _freeToken.isBuoyToken}});Object.defineProperty(exports,"isCapacitorBridgeInstalled",{enumerable:true,get:function(){return _capacitorBridge.isCapacitorBridgeInstalled}});Object.defineProperty(exports,"isCapacitorNative",{enumerable:true,get:function(){return _capacitorHost.isCapacitorNative}});Object.defineProperty(exports,"isDevToken",{enumerable:true,get:function(){return _devToken.isDevToken}});exports.isPro=isPro;Object.defineProperty(exports,"isServiceKey",{enumerable:true,get:function(){return _serviceKey.isServiceKey}});Object.defineProperty(exports,"isTransientLicenseError",{enumerable:true,get:function(){return _api.isTransientLicenseError}});Object.defineProperty(exports,"isWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.isWeekendFreePro}});Object.defineProperty(exports,"listenCapacitorNative",{enumerable:true,get:function(){return _capacitorBridge.listenCapacitorNative}});Object.defineProperty(exports,"loadCapacitorAppHost",{enumerable:true,get:function(){return _capacitorBridge.loadCapacitorAppHost}});Object.defineProperty(exports,"makeCapacitorCallbackId",{enumerable:true,get:function(){return _capacitorBridge.makeCapacitorCallbackId}});Object.defineProperty(exports,"maskBuoyAccountKey",{enumerable:true,get:function(){return _accountKeyNames.maskBuoyAccountKey}});Object.defineProperty(exports,"maskBuoyAccountKeys",{enumerable:true,get:function(){return _accountKeyNames.maskBuoyAccountKeys}});Object.defineProperty(exports,"normalizeLicenseKey",{enumerable:true,get:function(){return _serviceKey.normalizeLicenseKey}});Object.defineProperty(exports,"resolveAccountAccess",{enumerable:true,get:function(){return _accountAccess.resolveAccountAccess}});Object.defineProperty(exports,"resolveDevBuild",{enumerable:true,get:function(){return _capacitorHost.resolveDevBuild}});Object.defineProperty(exports,"sameLicenseKey",{enumerable:true,get:function(){return _serviceKey.sameLicenseKey}});exports.setLicenseKey=setLicenseKey;Object.defineProperty(exports,"subscribeCapacitorCalls",{enumerable:true,get:function(){return _capacitorBridge.subscribeCapacitorCalls}});Object.defineProperty(exports,"useAccountAccess",{enumerable:true,get:function(){return _hooks.useAccountAccess}});Object.defineProperty(exports,"useBuoySession",{enumerable:true,get:function(){return _hooks.useBuoySession}});Object.defineProperty(exports,"useFeatureAccess",{enumerable:true,get:function(){return _hooks.useFeatureAccess}});Object.defineProperty(exports,"useIsPro",{enumerable:true,get:function(){return _hooks.useIsPro}});Object.defineProperty(exports,"useLicense",{enumerable:true,get:function(){return _hooks.useLicense}});Object.defineProperty(exports,"useProAccess",{enumerable:true,get:function(){return _hooks.useProAccess}});Object.defineProperty(exports,"useTier",{enumerable:true,get:function(){return _hooks.useTier}});Object.defineProperty(exports,"useWeekendFreePro",{enumerable:true,get:function(){return _weekendPro.useWeekendFreePro}});var _LicenseManager=require("./LicenseManager.js");var _weekendPro=require("./weekendPro.js");var _hooks=require("./hooks.js");var _accountAccess=require("./accountAccess.js");var _api=require("./api.js");var _sessionManager=require("./sessionManager.js");var _serviceKey=require("./serviceKey.js");var _accountKeyNames=require("./accountKeyNames.js");var _capacitorHost=require("./capacitorHost.js");var _capacitorBridge=require("./capacitorBridge.js");var _devToken=require("./devToken.js");var _syncCredential=require("./syncCredential.js");var _freeToken=require("./freeToken.js");function _interopRequireWildcard(n,u){if("function"==typeof WeakMap)var a=new WeakMap,s=new WeakMap;return(_interopRequireWildcard=function(e,c){if(!c&&e&&e.__esModule)return e;var r,i,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(r=c?s:a){if(r.has(e))return r.get(e);r.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((i=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(i.get||i.set)?r(o,t,i):o[t]=e[t]);return o})(n,u)}/*!
|
|
2
2
|
* PROPRIETARY — Buoy Pro license enforcement. NOT open source.
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Buoy. All rights reserved. Licensed under the Buoy EULA
|
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
* Pro is $9/mo, and is free every weekend for anyone holding a key —
|
|
16
16
|
* including a free one (`npx --package=@buoy-gg/core buoy login`). Buy a key at
|
|
17
17
|
* https://buoy.gg or use it free on Saturday and Sunday.
|
|
18
|
-
*/async function setLicenseKey(n){const{LicenseManager:
|
|
18
|
+
*/async function setLicenseKey(n){const{LicenseManager:u}=await Promise.resolve().then(()=>_interopRequireWildcard(require("./LicenseManager")));await u.initialize();return u.setLicenseKey(n)}function weekendPassActive(){return(0,_weekendPro.weekendPassAppliesTo)(_LicenseManager.LicenseManager.hasAccountAccess(),(0,_weekendPro.isWeekendFreePro)())}function isPro(){if(_LicenseManager.LicenseManager.isPro())return true;return weekendPassActive()}function hasEntitlement(n){if(_LicenseManager.LicenseManager.hasEntitlement(n))return true;return weekendPassActive()}
|
|
@@ -13,4 +13,4 @@
|
|
|
13
13
|
* Pro is $9/mo, and is free every weekend for anyone holding a key —
|
|
14
14
|
* including a free one (`npx --package=@buoy-gg/core buoy login`). Buy a key at
|
|
15
15
|
* https://buoy.gg or use it free on Saturday and Sunday.
|
|
16
|
-
*/import{getLicenseStorage as y}from"./storage";import{KEYGEN_CONFIG as X,LICENSE_STORAGE_KEY as N,LICENSE_CACHE_DURATION as b,LICENSE_REVALIDATION_INTERVAL as q,LICENSE_LAUNCH_VALIDATION_TTL as J,LICENSE_TRANSIENT_RETRY_DELAYS as Q,LICENSE_RATE_LIMIT_DEFAULT_WAIT as W,LICENSE_QUOTA_COOLDOWN as F,LICENSE_VERDICT_CACHE_DURATION as j,LICENSE_FLEET_MACHINE_THRESHOLD as $,LICENSE_QUIET_VALIDATION_TTL as Z,LICENSE_HOLD_STORAGE_KEY as C,DEVICE_FINGERPRINT_STORAGE_KEY as K}from"./config.js";import{validateLicense as ee,activateMachine as O,parseValidationResult as te,isFatalLicenseError as ie,isTransientLicenseError as se,isAcceptedValidation as re,isRateLimited as ae,backoffAfter as ne,machineCount as ce}from"./api.js";import{generateUUID as P,getDeviceMetadata as G,getDefaultDeviceName as V,isDevBundle as w}from"./fingerprint";import{signCache as U,verifyCacheSignature as p}from"./cacheSignature.js";import{isBuoyToken as oe,verifyFreeToken as he}from"./freeToken.js";import{resolveTier as le,isRecognizedAccount as de}from"./tier.js";import{resolveAccountAccess as ue}from"./accountAccess.js";import{subscribeForeground as fe}from"./foreground";import{realNow as c}from"./realNow.js";import{SessionManager as _}from"./sessionManager.js";import{exchangeServiceKey as ye,isServiceKey as me,normalizeLicenseKey as z}from"./serviceKey.js";import{checkDevToken as pe,isDevToken as _e,DEV_TOKEN_IN_RELEASE as ge}from"./devToken.js";const Ae={role:null,tools:null};function H(d){return{role:d.role??null,tools:d.tools??null}}async function u(d,e){let t;try{return await Promise.race([d,new Promise(i=>{t=setTimeout(()=>i(e),15e3)})])}finally{if(t)clearTimeout(t)}}function g(d){if(d.tier==="pro"||d.tier==="free")return d.tier;return d.isPro?"pro":"free"}class Ee{state={isInitialized:false,isValidating:false,isPro:false,tier:"free",tierSource:"none",licenseKey:null,error:null,errorKind:null,expiresAt:null};listeners=new Set;revalidationTimer=null;cachedLicense=null;fingerprintPromise=null;initPromise=null;generation=0;persistence=Promise.resolve();verifiedAt=null;expiryTimer=null;removeForegroundListener=null;sessionUnsubscribe=null;devToken=null;retryTimer=null;retryAttempt=0;deviceRegistrationCallback=null;pendingRegistration=null;async initialize(){if(this.initPromise)return this.initPromise;if(this.state.isInitialized)return;this.initPromise=this._doInitialize();return this.initPromise}async _doInitialize(){if(this.state.isInitialized)return;const e=this.generation;if(!this.sessionUnsubscribe){this.sessionUnsubscribe=_.subscribe(()=>this.emit({type:"validated",isPro:this.isPro()}))}await u(_.load().catch(()=>void 0),void 0);try{const t=await u(this.loadCachedLicense(),null);if(e!==this.generation){this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer();return}if(t&&(this.configuredKey===void 0||t.licenseKey===this.configuredKey)){const i=p(t);this.cachedLicense=t;this.state.licenseKey=t.licenseKey;if(i&&this.isCacheValid(t))this.applyTier(g(t));else this.lock();this.state.expiresAt=t.expiresAt?new Date(t.expiresAt):null;if(i&&this.isCacheValid(t))this.setVerifiedAt(t.cachedAt);if(this.configuredKey===void 0&&t.licenseKey&&!(i&&this.isCacheValid(t)&&this.isCacheFresh(t))){this.validateInBackground(t.licenseKey)}}this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer()}catch(t){console.warn("[Buoy]","[React Buoy] License initialization failed:",t);this.state.isInitialized=true;this.emit({type:"initialized",isPro:false})}}async configure(e){if(e===void 0){await this.initialize();return this.hasAccountAccess()}const t=z(e);const i=++this.generation;this.cancelRetry();this.configuredKey=t||null;if(this.state.licenseKey!==this.configuredKey)this.lock();this.state.licenseKey=this.configuredKey;this.state.isValidating=!!t;this.emit({type:"validating",isPro:this.isPro()});await this.initialize();if(i!==this.generation)return false;if(!t){await this.clearLicense();return false}return this.setLicenseKey(t)}async setLicenseKey(e,t){if(!e||e.trim().length===0){this.state.error="License key is required";this.state.errorKind="verdict";return false}const i=z(e);const s=++this.generation;this.cancelRetry();if(!t?.isRetry)this.retryAttempt=0;if(this.state.licenseKey!==i)this.lock();this.state.licenseKey=i;this.state.isValidating=true;this.state.error=null;this.state.errorKind=null;this.emit({type:"validating",isPro:this.isPro()});if(oe(i))return this.admitToken(i,s);if(me(i))return this.admitServiceKey(i,s);if(_e(i))return this.admitDevToken(i);if(!this.cachedLicense){const a=await u(this.loadCachedLicense(),null);if(s!==this.generation)return false;if(a?.licenseKey===i){this.cachedLicense=a;if(p(a)&&this.isCacheValid(a)){this.applyTier(g(a));this.state.expiresAt=a.expiresAt?new Date(a.expiresAt):null;this.setVerifiedAt(a.cachedAt);this.emit({type:"validating",isPro:this.isPro()})}}}const r=this.cachedLicense;if(!t?.force&&r&&r.valid&&r.licenseKey===i&&r.fingerprint&&p(r)&&this.isCacheValid(r)&&this.isCacheFresh(r)){this.applyTier(g(r));this.state.licenseKey=i;this.state.isValidating=false;this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);this.emit({type:"validated",isPro:this.state.isPro});return true}const o=await u(this.loadHold(),null);if(s!==this.generation)return false;const A=(o?.backoffUntil??0)-c();if(A>0){return this.standDown(i,s,"License server is rate limited; retrying later.",A)}if(!t?.force&&o?.key===i&&o.verdictAt!==void 0&&c()-o.verdictAt>=0&&c()-o.verdictAt<j){this.lock();this.state.isValidating=false;this.state.error=o.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});return false}let n;try{n=await ee(i)}catch(a){const l=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;if(se(a)){if(ae(a)){const f=Math.min(ne(a,F,W)*2**this.retryAttempt,F);this.retryAttempt+=1;await this.saveHold({...this.hold,backoffUntil:c()+f});if(s!==this.generation)return false;return this.standDown(i,s,l,f)}this.state.isValidating=false;if(this.cachedLicense&&this.cachedLicense.licenseKey===i&&p(this.cachedLicense)&&this.isCacheValid(this.cachedLicense)){this.applyTier(g(this.cachedLicense));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=this.cachedLicense.expiresAt?new Date(this.cachedLicense.expiresAt):null;this.setVerifiedAt(this.cachedLicense.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetry(i);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=l;this.state.errorKind="transport";this.scheduleRetry(i);this.emit({type:"error",isPro:this.state.isPro,error:l});return false}this.state.isValidating=false;this.state.error=l;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:l});return false}try{if(s!==this.generation)return false;const a=te(n);const l=n.data?.relationships?.product?.data?.id;if((!l||l===X.productId)&&a.code==="EXPIRED"&&(de(n.data)||this.cachedLicense?.licenseKey===i&&p(this.cachedLicense)&&this.isCacheValid(this.cachedLicense))){const I=c();const M=await this.saveCache({licenseKey:i,licenseId:n.data?.id??"",valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:I,lastValidatedAt:I,fingerprint:this.cachedLicense?.licenseKey===i?this.cachedLicense.fingerprint:void 0},s);if(s!==this.generation||!M)return false;this.cachedLicense=M;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(I);this.emit({type:"validated",isPro:false});return true}if(ie(a.code)||!re(n)){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();await this.saveHold({key:i,code:a.code,detail:this.state.error,verdictAt:c()});return false}if(!n.data){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License not found";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const f=le(n.data);const v=n.data.id;const T=c();const D=ce(n)>=$;const k=w();const Y=k&&!D;const B=f==="free"&&(D||!k);let m=this.cachedLicense?.fingerprint;let E=this.cachedLicense?.deviceName;let S=false;if(!m){m=await u(this.getOrCreateDeviceFingerprint(),P());if(s!==this.generation)return false;E=V();S=Y}let L=false;if(S){if(this.deviceRegistrationCallback){this.pendingRegistration={licenseId:v,licenseKey:i,fingerprint:m};this.deviceRegistrationCallback({fingerprint:m,defaultName:E});L=true}else{this.registerDeviceAsync(v,i,m,E)}}const R={licenseKey:i,licenseId:v,valid:true,isPro:f==="pro",tier:f,expiresAt:n.data.attributes.expiry??null,cachedAt:T,lastValidatedAt:T,fingerprint:L?void 0:m,deviceName:L?void 0:E,quiet:B||void 0};const x=await this.saveCache(R,s);if(s!==this.generation||!x)return false;this.cachedLicense=x;this.applyTier(f);this.state.isValidating=false;this.state.expiresAt=R.expiresAt?new Date(R.expiresAt):null;this.setVerifiedAt(T);if(this.hold)await this.saveHold(null);if(s!==this.generation)return false;this.retryAttempt=0;this.emit({type:"validated",isPro:this.state.isPro});return true}catch(a){const l=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;this.state.isValidating=false;this.state.error=l;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:l});return false}}scheduleRetry(e){this.cancelRetry();const t=Q[this.retryAttempt];if(t===void 0)return;this.retryAttempt+=1;const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(e,{force:true,isRetry:true})},t);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}}async admitServiceKey(e,t){const i=await ye(e,{origin:_.origin});if(t!==this.generation)return false;if(!i.ok){this.lock();this.state.isValidating=false;this.state.error=i.detail;this.state.errorKind=i.reason==="network"?"transport":"verdict";this.emit({type:"error",isPro:false,error:i.detail});if(i.reason==="network")this.scheduleRetry(e);return false}const s=i.claims.exp*1e3;this.applyTier(i.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(s);this.setVerifiedAt(c());this.retryAttempt=0;this.scheduleRetryIn(e,Math.max(6e4,s-60*60*1e3-c()));this.emit({type:"validated",isPro:this.isPro()});return true}admitDevToken(e){const t=pe(e);if(!t.ok||!w()){const s=t.ok?ge:t.message;this.lock();this.state.isValidating=false;this.state.error=s;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:s});return false}const i=c();this.devToken={token:e,claims:t.claims};this.applyTier(t.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(t.claims.exp*1e3);this.setVerifiedAt(Math.min(i,t.claims.iat*1e3));this.retryAttempt=0;this.emit({type:"validated",isPro:this.isPro()});return true}async admitToken(e,t){const i=he(e);if(t!==this.generation)return false;if(!i){this.lock();this.state.isValidating=false;this.state.error="This key is not valid. Check that it was copied completely.";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const s=c();const r=this.cachedLicense?.fingerprint??await u(this.getOrCreateDeviceFingerprint(),P());if(t!==this.generation)return false;const o=await this.saveCache({licenseKey:e,licenseId:`token:${i.accountHash}`,valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:s,lastValidatedAt:s,fingerprint:r,deviceName:this.cachedLicense?.deviceName??V(),quiet:true},t);if(t!==this.generation||!o)return false;this.cachedLicense=o;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(s);this.retryAttempt=0;this.emit({type:"validated",isPro:false});return true}standDown(e,t,i,s){if(t!==this.generation)return false;this.state.isValidating=false;const r=this.cachedLicense;if(r&&r.licenseKey===e&&p(r)&&this.isCacheValid(r)){this.applyTier(g(r));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetryIn(e,s);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=i;this.state.errorKind="transport";this.scheduleRetryIn(e,s);this.emit({type:"error",isPro:this.state.isPro,error:i});return false}scheduleRetryIn(e,t){this.cancelRetry();const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(e,{force:true,isRetry:true})},Math.max(1,Math.min(t,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)h.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}cancelRetry(){if(this.retryTimer){clearTimeout(this.retryTimer);this.retryTimer=null}}async clearLicense(){this.generation+=1;this.cancelRetry();this.retryAttempt=0;this.configuredKey=null;this.state.licenseKey=null;this.lock();this.state.expiresAt=null;this.state.error=null;this.state.errorKind=null;this.cachedLicense=null;this.pendingRegistration=null;this.state.isValidating=false;this.emit({type:"deactivated",isPro:false});await this.clearCachedLicense();if(this.hold?.verdictAt!==void 0){await this.saveHold(this.hold.backoffUntil?{backoffUntil:this.hold.backoffUntil}:null)}}applyTier(e){this.state.tier=e;this.state.tierSource="key";this.state.isPro=e==="pro"}lock(){this.state.tier="free";this.state.tierSource="none";this.state.isPro=false;this.verifiedAt=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null}getTier(){return this.credential().tier}credential(){const e=this.keyTier();const t=this.sessionTier();if(t!==null&&(!this.hasKeyAccess()||t==="pro"&&e!=="pro")){return{source:"session",tier:t}}return{source:this.state.tierSource,tier:e}}keyTier(){if(!this.hasKeyAccess())return"free";if(this.state.expiresAt&&c()>=this.state.expiresAt.getTime())return"free";return this.state.tier}sessionTier(){const e=_.getStatus();if(e.state!=="active")return null;return e.claims.tier==="free"?"free":"pro"}isPro(){return this.getTier()==="pro"}hasEntitlement(e){return this.isPro()}getState(){const{source:e,tier:t}=this.credential();const i=this.getTeamAccess();return{...this.state,tier:t,tierSource:e,isPro:t==="pro",access:this.getAccountAccess(),teamRole:i.role,allowedTools:i.tools}}getTeamAccess(){const e=_.getStatus();if(e.state==="active")return H(e.claims);const t=this.devToken;if(t&&t.token===this.state.licenseKey&&this.state.tierSource==="key"&&c()<t.claims.exp*1e3&&this.hasKeyAccess()){return H(t.claims)}return Ae}getAccountAccess(){const e=this.getKeyAccess();if(e.status==="admitted")return e;const t=_.getStatus();if(t.state==="active")return{status:"admitted",reason:null,validUntil:t.validUntil};return e}getKeyAccess(){return ue({initialized:this.state.isInitialized,validating:this.state.isValidating,key:this.state.licenseKey,tierSource:this.state.tierSource,verifiedAt:this.verifiedAt})}hasAccountAccess(){return this.getAccountAccess().status==="admitted"}hasKeyAccess(){return this.getKeyAccess().status==="admitted"}setVerifiedAt(e){this.verifiedAt=e;if(this.expiryTimer)clearTimeout(this.expiryTimer);const t=e+b;const i=this.state.expiresAt?.getTime();const s=i&&i>c()?Math.min(t,i):t;const r=s-c();this.expiryTimer=setTimeout(()=>{this.expiryTimer=null;if(this.verifiedAt!==e)return;this.emit({type:"validated",isPro:this.isPro()});if(c()<t)this.setVerifiedAt(e)},Math.max(1,Math.min(r,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)h.__LICENSE_MANAGER_EXPIRY_TIMER__=this.expiryTimer}subscribe(e){this.listeners.add(e);return()=>this.listeners.delete(e)}onDeviceRegistrationNeeded(e){this.deviceRegistrationCallback=e;return()=>{this.deviceRegistrationCallback=null}}async completeDeviceRegistration(e){if(!this.pendingRegistration){console.warn("[Buoy] No pending device registration");return}const{licenseId:t,licenseKey:i,fingerprint:s}=this.pendingRegistration;const r=this.generation;const o=e.trim()||V();const A=G();try{await O(t,i,s,o,A)}catch(n){const a=n instanceof Error?n.message:String(n);if(a==="FINGERPRINT_TAKEN"||a==="MACHINE_LIMIT_EXCEEDED"){}else{console.warn("[Buoy] Device registration failed:",a);throw n}}if(r!==this.generation)return;if(this.cachedLicense?.licenseKey===i){const n=await this.saveCache({...this.cachedLicense,fingerprint:s,deviceName:o},r);if(r!==this.generation)return;if(n)this.cachedLicense=n}this.pendingRegistration=null}emit(e){const t=[...this.listeners];t.forEach(i=>{try{i(e)}catch(s){console.warn("[Buoy]","[React Buoy] License listener error:",s)}})}isCacheValid(e){const t=c();const i=t-e.cachedAt;if(!e.valid||!Number.isFinite(e.cachedAt)||i<0||i>=b){return false}return true}isCacheFresh(e){const t=this.isQuiet(e)?Z:J;return c()-(e.lastValidatedAt??0)<t}isQuiet(e){if(e.quiet!==void 0)return e.quiet;return g(e)==="free"&&!w()}async loadHold(){if(this.hold!==void 0)return this.hold;try{const e=await y();const t=await e.getItem(C);const i=t?JSON.parse(t):null;this.hold=i&&typeof i==="object"?i:null}catch{this.hold=null}return this.hold}async saveHold(e){this.hold=e;try{const t=await y();if(e)await t.setItem(C,JSON.stringify(e));else await t.removeItem(C)}catch{}}async persistCache(e){const t=U(e);const i=await y();await i.setItem(N,JSON.stringify(t));return t}saveCache(e,t){const i=this.persistence.catch(()=>{}).then(async()=>{if(t!==this.generation)return null;const s=await this.persistCache(e);return t===this.generation?s:null});this.persistence=i;return u(i,U(e))}async loadCachedLicense(){try{await this.persistence.catch(()=>{});const e=await y();const t=await e.getItem(N);if(!t)return null;const i=JSON.parse(t);return i}catch(e){console.warn("[Buoy] Error loading cached license:",e);return null}}getOrCreateDeviceFingerprint(){if(!this.fingerprintPromise){this.fingerprintPromise=(async()=>{const e=await y();const t=await e.getItem(K);if(t)return t;const i=this.cachedLicense?.fingerprint||P();await e.setItem(K,i);return i})()}return this.fingerprintPromise}async clearCachedLicense(){this.cachedLicense=null;const e=this.persistence.catch(()=>{}).then(async()=>{const t=await y();await t.removeItem(N)});this.persistence=e;await u(e.catch(()=>{}),void 0)}registerDeviceAsync(e,t,i,s){const r=G();O(e,t,i,s,r).catch(o=>{if(o.message!=="FINGERPRINT_TAKEN"&&o.message!=="MACHINE_LIMIT_EXCEEDED"){console.warn("[Buoy] Device registration failed (non-blocking):",o.message)}})}validateInBackground(e){void this.setLicenseKey(e,{force:true,isRetry:true})}refreshAccess(){this.emit({type:"validated",isPro:this.isPro()})}startRevalidationTimer(){if(!this.removeForegroundListener){this.removeForegroundListener=fe(()=>this.refreshAccess());if(typeof __DEV__!=="undefined"&&__DEV__)h.__LICENSE_MANAGER_FOREGROUND_OFF__=this.removeForegroundListener}if(this.revalidationTimer){clearInterval(this.revalidationTimer)}this.revalidationTimer=setInterval(()=>{if(!this.state.licenseKey||this.state.isValidating)return;const e=this.cachedLicense;if(e&&e.licenseKey===this.state.licenseKey&&this.isCacheFresh(e))return;this.validateInBackground(this.state.licenseKey)},q);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_TIMER__=this.revalidationTimer}}stopRevalidationTimer(){this.removeForegroundListener?.();this.removeForegroundListener=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null;if(this.revalidationTimer){clearInterval(this.revalidationTimer);this.revalidationTimer=null}this.cancelRetry()}async forceReregister(){if(this.cachedLicense){this.cachedLicense.fingerprint=void 0;this.cachedLicense.deviceName=void 0}this.fingerprintPromise=null;await this.clearCachedLicense();try{const e=await y();await e.removeItem(K)}catch{}}}export const LicenseManager=new Ee;const h=globalThis;if(typeof __DEV__!=="undefined"&&__DEV__){h.__LICENSE_MANAGER_FOREGROUND_OFF__?.();h.__LICENSE_MANAGER_FOREGROUND_OFF__=void 0;if(h.__LICENSE_MANAGER_EXPIRY_TIMER__)clearTimeout(h.__LICENSE_MANAGER_EXPIRY_TIMER__);if(h.__LICENSE_MANAGER_TIMER__){clearInterval(h.__LICENSE_MANAGER_TIMER__)}if(h.__LICENSE_MANAGER_RETRY_TIMER__){clearTimeout(h.__LICENSE_MANAGER_RETRY_TIMER__);h.__LICENSE_MANAGER_RETRY_TIMER__=void 0}}
|
|
16
|
+
*/import{getLicenseStorage as y}from"./storage";import{KEYGEN_CONFIG as q,LICENSE_STORAGE_KEY as N,LICENSE_CACHE_DURATION as O,LICENSE_REVALIDATION_INTERVAL as J,LICENSE_LAUNCH_VALIDATION_TTL as Q,LICENSE_TRANSIENT_RETRY_DELAYS as W,LICENSE_RATE_LIMIT_DEFAULT_WAIT as j,LICENSE_QUOTA_COOLDOWN as F,LICENSE_VERDICT_CACHE_DURATION as $,LICENSE_FLEET_MACHINE_THRESHOLD as Z,LICENSE_QUIET_VALIDATION_TTL as ee,LICENSE_HOLD_STORAGE_KEY as C,DEVICE_FINGERPRINT_STORAGE_KEY as w,DEVICE_FINGERPRINT_OWNER_STORAGE_KEY as b}from"./config.js";import{validateLicense as te,activateMachine as G,parseValidationResult as ie,isFatalLicenseError as se,isTransientLicenseError as re,isAcceptedValidation as ae,isRateLimited as ne,backoffAfter as ce,machineCount as oe}from"./api.js";import{generateUUID as K,getDeviceMetadata as U,getDefaultDeviceName as P,isDevBundle as V,getDeviceOwnerId as he}from"./fingerprint";import{hashDeviceMarker as le,resolveDeviceFingerprint as de}from"./fingerprintOwner.js";import{signCache as z,verifyCacheSignature as p}from"./cacheSignature.js";import{isBuoyToken as fe,verifyFreeToken as ue}from"./freeToken.js";import{resolveTier as ye,isRecognizedAccount as me}from"./tier.js";import{resolveAccountAccess as pe}from"./accountAccess.js";import{subscribeForeground as ge}from"./foreground";import{realNow as o}from"./realNow.js";import{SessionManager as g}from"./sessionManager.js";import{exchangeServiceKey as _e,isServiceKey as Ae,normalizeLicenseKey as H}from"./serviceKey.js";import{checkDevToken as ve,isDevToken as Ee,DEV_TOKEN_IN_RELEASE as Te}from"./devToken.js";const Re={role:null,tools:null};function Y(d){return{role:d.role??null,tools:d.tools??null}}async function f(d,t){let e;try{return await Promise.race([d,new Promise(i=>{e=setTimeout(()=>i(t),15e3)})])}finally{if(e)clearTimeout(e)}}function _(d){if(d.tier==="pro"||d.tier==="free")return d.tier;return d.isPro?"pro":"free"}class Le{state={isInitialized:false,isValidating:false,isPro:false,tier:"free",tierSource:"none",licenseKey:null,error:null,errorKind:null,expiresAt:null};listeners=new Set;revalidationTimer=null;cachedLicense=null;fingerprintPromise=null;fingerprintRestored=false;initPromise=null;generation=0;persistence=Promise.resolve();verifiedAt=null;expiryTimer=null;removeForegroundListener=null;sessionUnsubscribe=null;devToken=null;retryTimer=null;retryAttempt=0;deviceRegistrationCallback=null;pendingRegistration=null;async initialize(){if(this.initPromise)return this.initPromise;if(this.state.isInitialized)return;this.initPromise=this._doInitialize();return this.initPromise}async _doInitialize(){if(this.state.isInitialized)return;const t=this.generation;if(!this.sessionUnsubscribe){this.sessionUnsubscribe=g.subscribe(()=>this.emit({type:"validated",isPro:this.isPro()}))}await f(g.load().catch(()=>void 0),void 0);try{const e=await f(this.loadCachedLicense(),null);if(t!==this.generation){this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer();return}if(e&&(this.configuredKey===void 0||e.licenseKey===this.configuredKey)){const i=p(e);this.cachedLicense=e;this.state.licenseKey=e.licenseKey;if(i&&this.isCacheValid(e))this.applyTier(_(e));else this.lock();this.state.expiresAt=e.expiresAt?new Date(e.expiresAt):null;if(i&&this.isCacheValid(e))this.setVerifiedAt(e.cachedAt);if(this.configuredKey===void 0&&e.licenseKey&&!(i&&this.isCacheValid(e)&&this.isCacheFresh(e))){this.validateInBackground(e.licenseKey)}}this.state.isInitialized=true;this.emit({type:"initialized",isPro:this.state.isPro});this.startRevalidationTimer()}catch(e){console.warn("[Buoy]","[React Buoy] License initialization failed:",e);this.state.isInitialized=true;this.emit({type:"initialized",isPro:false})}}async configure(t){if(t===void 0){await this.initialize();return this.hasAccountAccess()}const e=H(t);const i=++this.generation;this.cancelRetry();this.configuredKey=e||null;if(this.state.licenseKey!==this.configuredKey)this.lock();this.state.licenseKey=this.configuredKey;this.state.isValidating=!!e;this.emit({type:"validating",isPro:this.isPro()});await this.initialize();if(i!==this.generation)return false;if(!e){await this.clearLicense();return false}return this.setLicenseKey(e)}async setLicenseKey(t,e){if(!t||t.trim().length===0){this.state.error="License key is required";this.state.errorKind="verdict";return false}const i=H(t);const s=++this.generation;this.cancelRetry();if(!e?.isRetry)this.retryAttempt=0;if(this.state.licenseKey!==i)this.lock();this.state.licenseKey=i;this.state.isValidating=true;this.state.error=null;this.state.errorKind=null;this.emit({type:"validating",isPro:this.isPro()});if(fe(i))return this.admitToken(i,s);if(Ae(i))return this.admitServiceKey(i,s);if(Ee(i))return this.admitDevToken(i);if(!this.cachedLicense){const a=await f(this.loadCachedLicense(),null);if(s!==this.generation)return false;if(a?.licenseKey===i){this.cachedLicense=a;if(p(a)&&this.isCacheValid(a)){this.applyTier(_(a));this.state.expiresAt=a.expiresAt?new Date(a.expiresAt):null;this.setVerifiedAt(a.cachedAt);this.emit({type:"validating",isPro:this.isPro()})}}}const r=this.cachedLicense;if(!e?.force&&r&&r.valid&&r.licenseKey===i&&r.fingerprint&&p(r)&&this.isCacheValid(r)&&this.isCacheFresh(r)){this.applyTier(_(r));this.state.licenseKey=i;this.state.isValidating=false;this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);this.emit({type:"validated",isPro:this.state.isPro});return true}const n=await f(this.loadHold(),null);if(s!==this.generation)return false;const A=(n?.backoffUntil??0)-o();if(A>0){return this.standDown(i,s,"License server is rate limited; retrying later.",A)}if(!e?.force&&n?.key===i&&n.verdictAt!==void 0&&o()-n.verdictAt>=0&&o()-n.verdictAt<$){this.lock();this.state.isValidating=false;this.state.error=n.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});return false}let c;try{c=await te(i)}catch(a){const l=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;if(re(a)){if(ne(a)){const u=Math.min(ce(a,F,j)*2**this.retryAttempt,F);this.retryAttempt+=1;await this.saveHold({...this.hold,backoffUntil:o()+u});if(s!==this.generation)return false;return this.standDown(i,s,l,u)}this.state.isValidating=false;if(this.cachedLicense&&this.cachedLicense.licenseKey===i&&p(this.cachedLicense)&&this.isCacheValid(this.cachedLicense)){this.applyTier(_(this.cachedLicense));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=this.cachedLicense.expiresAt?new Date(this.cachedLicense.expiresAt):null;this.setVerifiedAt(this.cachedLicense.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetry(i);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=l;this.state.errorKind="transport";this.scheduleRetry(i);this.emit({type:"error",isPro:this.state.isPro,error:l});return false}this.state.isValidating=false;this.state.error=l;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:l});return false}try{if(s!==this.generation)return false;const a=ie(c);const l=c.data?.relationships?.product?.data?.id;if((!l||l===q.productId)&&a.code==="EXPIRED"&&(me(c.data)||this.cachedLicense?.licenseKey===i&&p(this.cachedLicense)&&this.isCacheValid(this.cachedLicense))){const I=o();const M=await this.saveCache({licenseKey:i,licenseId:c.data?.id??"",valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:I,lastValidatedAt:I,fingerprint:this.cachedLicense?.licenseKey===i?this.cachedLicense.fingerprint:void 0},s);if(s!==this.generation||!M)return false;this.cachedLicense=M;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(I);this.emit({type:"validated",isPro:false});return true}if(se(a.code)||!ae(c)){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License could not be verified";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();await this.saveHold({key:i,code:a.code,detail:this.state.error,verdictAt:o()});return false}if(!c.data){this.lock();this.state.isValidating=false;this.state.error=a.detail||"License not found";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const u=ye(c.data);const E=c.data.id;const T=o();const D=oe(c)>=Z;const k=V();const B=k&&!D;const X=u==="free"&&(D||!k);let m=this.cachedLicense?.fingerprint;let v=this.cachedLicense?.deviceName;let S=false;if(!m){m=await f(this.getOrCreateDeviceFingerprint(),K());if(s!==this.generation)return false;v=P();S=B}let R=false;if(S){if(this.deviceRegistrationCallback){this.pendingRegistration={licenseId:E,licenseKey:i,fingerprint:m};this.deviceRegistrationCallback({fingerprint:m,defaultName:v});R=true}else{this.registerDeviceAsync(E,i,m,v)}}const L={licenseKey:i,licenseId:E,valid:true,isPro:u==="pro",tier:u,expiresAt:c.data.attributes.expiry??null,cachedAt:T,lastValidatedAt:T,fingerprint:R?void 0:m,deviceName:R?void 0:v,quiet:X||void 0};const x=await this.saveCache(L,s);if(s!==this.generation||!x)return false;this.cachedLicense=x;this.applyTier(u);this.state.isValidating=false;this.state.expiresAt=L.expiresAt?new Date(L.expiresAt):null;this.setVerifiedAt(T);if(this.hold)await this.saveHold(null);if(s!==this.generation)return false;this.retryAttempt=0;this.emit({type:"validated",isPro:this.state.isPro});return true}catch(a){const l=a instanceof Error?a.message:"Validation failed";if(s!==this.generation)return false;this.state.isValidating=false;this.state.error=l;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:l});return false}}scheduleRetry(t){this.cancelRetry();const e=W[this.retryAttempt];if(e===void 0)return;this.retryAttempt+=1;const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(t,{force:true,isRetry:true})},e);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}}async admitServiceKey(t,e){const i=await _e(t,{origin:g.origin});if(e!==this.generation)return false;if(!i.ok){this.lock();this.state.isValidating=false;this.state.error=i.detail;this.state.errorKind=i.reason==="network"?"transport":"verdict";this.emit({type:"error",isPro:false,error:i.detail});if(i.reason==="network")this.scheduleRetry(t);return false}const s=i.claims.exp*1e3;this.applyTier(i.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(s);this.setVerifiedAt(o());this.retryAttempt=0;this.scheduleRetryIn(t,Math.max(6e4,s-60*60*1e3-o()));this.emit({type:"validated",isPro:this.isPro()});return true}admitDevToken(t){const e=ve(t);if(!e.ok||!V()){const s=e.ok?Te:e.message;this.lock();this.state.isValidating=false;this.state.error=s;this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:s});return false}const i=o();this.devToken={token:t,claims:e.claims};this.applyTier(e.claims.tier==="free"?"free":"pro");this.state.isValidating=false;this.state.expiresAt=new Date(e.claims.exp*1e3);this.setVerifiedAt(Math.min(i,e.claims.iat*1e3));this.retryAttempt=0;this.emit({type:"validated",isPro:this.isPro()});return true}async admitToken(t,e){const i=ue(t);if(e!==this.generation)return false;if(!i){this.lock();this.state.isValidating=false;this.state.error="This key is not valid. Check that it was copied completely.";this.state.errorKind="verdict";this.emit({type:"error",isPro:false,error:this.state.error});await this.clearCachedLicense();return false}const s=o();const r=this.cachedLicense?.fingerprint??await f(this.getOrCreateDeviceFingerprint(),K());if(e!==this.generation)return false;const n=await this.saveCache({licenseKey:t,licenseId:`token:${i.accountHash}`,valid:true,isPro:false,tier:"free",expiresAt:null,cachedAt:s,lastValidatedAt:s,fingerprint:r,deviceName:this.cachedLicense?.deviceName??P(),quiet:true},e);if(e!==this.generation||!n)return false;this.cachedLicense=n;this.applyTier("free");this.state.isValidating=false;this.state.expiresAt=null;this.setVerifiedAt(s);this.retryAttempt=0;this.emit({type:"validated",isPro:false});return true}standDown(t,e,i,s){if(e!==this.generation)return false;this.state.isValidating=false;const r=this.cachedLicense;if(r&&r.licenseKey===t&&p(r)&&this.isCacheValid(r)){this.applyTier(_(r));this.state.error=null;this.state.errorKind=null;this.state.expiresAt=r.expiresAt?new Date(r.expiresAt):null;this.setVerifiedAt(r.cachedAt);if(this.keyTier()!=="pro")this.scheduleRetryIn(t,s);this.emit({type:"validated",isPro:this.state.isPro});return true}this.state.error=i;this.state.errorKind="transport";this.scheduleRetryIn(t,s);this.emit({type:"error",isPro:this.state.isPro,error:i});return false}scheduleRetryIn(t,e){this.cancelRetry();const i=this.generation;this.retryTimer=setTimeout(()=>{this.retryTimer=null;if(i!==this.generation)return;if(this.state.isValidating)return;void this.setLicenseKey(t,{force:true,isRetry:true})},Math.max(1,Math.min(e,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)h.__LICENSE_MANAGER_RETRY_TIMER__=this.retryTimer}cancelRetry(){if(this.retryTimer){clearTimeout(this.retryTimer);this.retryTimer=null}}async clearLicense(){this.generation+=1;this.cancelRetry();this.retryAttempt=0;this.configuredKey=null;this.state.licenseKey=null;this.lock();this.state.expiresAt=null;this.state.error=null;this.state.errorKind=null;this.cachedLicense=null;this.pendingRegistration=null;this.state.isValidating=false;this.emit({type:"deactivated",isPro:false});await this.clearCachedLicense();if(this.hold?.verdictAt!==void 0){await this.saveHold(this.hold.backoffUntil?{backoffUntil:this.hold.backoffUntil}:null)}}applyTier(t){this.state.tier=t;this.state.tierSource="key";this.state.isPro=t==="pro"}lock(){this.state.tier="free";this.state.tierSource="none";this.state.isPro=false;this.verifiedAt=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null}getTier(){return this.credential().tier}credential(){const t=this.keyTier();const e=this.sessionTier();if(e!==null&&(!this.hasKeyAccess()||e==="pro"&&t!=="pro")){return{source:"session",tier:e}}return{source:this.state.tierSource,tier:t}}keyTier(){if(!this.hasKeyAccess())return"free";if(this.state.expiresAt&&o()>=this.state.expiresAt.getTime())return"free";return this.state.tier}sessionTier(){const t=g.getStatus();if(t.state!=="active")return null;return t.claims.tier==="free"?"free":"pro"}isPro(){return this.getTier()==="pro"}hasEntitlement(t){return this.isPro()}getState(){const{source:t,tier:e}=this.credential();const i=this.getTeamAccess();return{...this.state,tier:e,tierSource:t,isPro:e==="pro",access:this.getAccountAccess(),teamRole:i.role,allowedTools:i.tools}}getTeamAccess(){const t=g.getStatus();if(t.state==="active")return Y(t.claims);const e=this.devToken;if(e&&e.token===this.state.licenseKey&&this.state.tierSource==="key"&&o()<e.claims.exp*1e3&&this.hasKeyAccess()){return Y(e.claims)}return Re}getAccountAccess(){const t=this.getKeyAccess();if(t.status==="admitted")return t;const e=g.getStatus();if(e.state==="active")return{status:"admitted",reason:null,validUntil:e.validUntil};return t}getKeyAccess(){return pe({initialized:this.state.isInitialized,validating:this.state.isValidating,key:this.state.licenseKey,tierSource:this.state.tierSource,verifiedAt:this.verifiedAt})}hasAccountAccess(){return this.getAccountAccess().status==="admitted"}hasKeyAccess(){return this.getKeyAccess().status==="admitted"}setVerifiedAt(t){this.verifiedAt=t;if(this.expiryTimer)clearTimeout(this.expiryTimer);const e=t+O;const i=this.state.expiresAt?.getTime();const s=i&&i>o()?Math.min(e,i):e;const r=s-o();this.expiryTimer=setTimeout(()=>{this.expiryTimer=null;if(this.verifiedAt!==t)return;this.emit({type:"validated",isPro:this.isPro()});if(o()<e)this.setVerifiedAt(t)},Math.max(1,Math.min(r,2147483647)));if(typeof __DEV__!=="undefined"&&__DEV__)h.__LICENSE_MANAGER_EXPIRY_TIMER__=this.expiryTimer}subscribe(t){this.listeners.add(t);return()=>this.listeners.delete(t)}onDeviceRegistrationNeeded(t){this.deviceRegistrationCallback=t;return()=>{this.deviceRegistrationCallback=null}}async completeDeviceRegistration(t){if(!this.pendingRegistration){console.warn("[Buoy] No pending device registration");return}const{licenseId:e,licenseKey:i,fingerprint:s}=this.pendingRegistration;const r=this.generation;const n=t.trim()||P();const A=U();try{await G(e,i,s,n,A)}catch(c){const a=c instanceof Error?c.message:String(c);if(a==="FINGERPRINT_TAKEN"||a==="MACHINE_LIMIT_EXCEEDED"){}else{console.warn("[Buoy] Device registration failed:",a);throw c}}if(r!==this.generation)return;if(this.cachedLicense?.licenseKey===i){const c=await this.saveCache({...this.cachedLicense,fingerprint:s,deviceName:n},r);if(r!==this.generation)return;if(c)this.cachedLicense=c}this.pendingRegistration=null}emit(t){const e=[...this.listeners];e.forEach(i=>{try{i(t)}catch(s){console.warn("[Buoy]","[React Buoy] License listener error:",s)}})}isCacheValid(t){const e=o();const i=e-t.cachedAt;if(!t.valid||!Number.isFinite(t.cachedAt)||i<0||i>=O){return false}return true}isCacheFresh(t){const e=this.isQuiet(t)?ee:Q;return o()-(t.lastValidatedAt??0)<e}isQuiet(t){if(t.quiet!==void 0)return t.quiet;return _(t)==="free"&&!V()}async loadHold(){if(this.hold!==void 0)return this.hold;try{const t=await y();const e=await t.getItem(C);const i=e?JSON.parse(e):null;this.hold=i&&typeof i==="object"?i:null}catch{this.hold=null}return this.hold}async saveHold(t){this.hold=t;try{const e=await y();if(t)await e.setItem(C,JSON.stringify(t));else await e.removeItem(C)}catch{}}async persistCache(t){const e=z(t);const i=await y();await i.setItem(N,JSON.stringify(e));return e}saveCache(t,e){const i=this.persistence.catch(()=>{}).then(async()=>{if(e!==this.generation)return null;const s=await this.persistCache(t);return e===this.generation?s:null});this.persistence=i;return f(i,z(t))}async loadCachedLicense(){try{await this.persistence.catch(()=>{});const t=await y();const e=await t.getItem(N);if(!e)return null;const i=JSON.parse(e);if(i.fingerprint){const s=await f(this.getOrCreateDeviceFingerprint(i.fingerprint).catch(()=>null),null);if(s&&this.fingerprintRestored&&i.fingerprint!==s){return{...i,fingerprint:void 0,deviceName:void 0}}}return i}catch(t){console.warn("[Buoy] Error loading cached license:",t);return null}}getOrCreateDeviceFingerprint(t){if(!this.fingerprintPromise){this.fingerprintPromise=(async()=>{const e=await y();const i=await e.getItem(w);const s=await e.getItem(b);const r=await f(he().catch(()=>null),null);const n=de({stored:i,storedOwner:s,marker:r?le(r):null,blobFingerprint:t??this.cachedLicense?.fingerprint,mint:K});this.fingerprintRestored=n.restored;if(n.changed){await e.setItem(w,n.fingerprint);if(n.owner)await e.setItem(b,n.owner)}return n.fingerprint})()}return this.fingerprintPromise}async clearCachedLicense(){this.cachedLicense=null;const t=this.persistence.catch(()=>{}).then(async()=>{const e=await y();await e.removeItem(N)});this.persistence=t;await f(t.catch(()=>{}),void 0)}registerDeviceAsync(t,e,i,s){const r=U();G(t,e,i,s,r).catch(n=>{if(n.message!=="FINGERPRINT_TAKEN"&&n.message!=="MACHINE_LIMIT_EXCEEDED"){console.warn("[Buoy] Device registration failed (non-blocking):",n.message)}})}validateInBackground(t){void this.setLicenseKey(t,{force:true,isRetry:true})}refreshAccess(){this.emit({type:"validated",isPro:this.isPro()})}startRevalidationTimer(){if(!this.removeForegroundListener){this.removeForegroundListener=ge(()=>this.refreshAccess());if(typeof __DEV__!=="undefined"&&__DEV__)h.__LICENSE_MANAGER_FOREGROUND_OFF__=this.removeForegroundListener}if(this.revalidationTimer){clearInterval(this.revalidationTimer)}this.revalidationTimer=setInterval(()=>{if(!this.state.licenseKey||this.state.isValidating)return;const t=this.cachedLicense;if(t&&t.licenseKey===this.state.licenseKey&&this.isCacheFresh(t))return;this.validateInBackground(this.state.licenseKey)},J);if(typeof __DEV__!=="undefined"&&__DEV__){global.__LICENSE_MANAGER_TIMER__=this.revalidationTimer}}stopRevalidationTimer(){this.removeForegroundListener?.();this.removeForegroundListener=null;if(this.expiryTimer)clearTimeout(this.expiryTimer);this.expiryTimer=null;if(this.revalidationTimer){clearInterval(this.revalidationTimer);this.revalidationTimer=null}this.cancelRetry()}async forceReregister(){if(this.cachedLicense){this.cachedLicense.fingerprint=void 0;this.cachedLicense.deviceName=void 0}this.fingerprintPromise=null;await this.clearCachedLicense();try{const t=await y();await t.removeItem(w)}catch{}}}export const LicenseManager=new Le;const h=globalThis;if(typeof __DEV__!=="undefined"&&__DEV__){h.__LICENSE_MANAGER_FOREGROUND_OFF__?.();h.__LICENSE_MANAGER_FOREGROUND_OFF__=void 0;if(h.__LICENSE_MANAGER_EXPIRY_TIMER__)clearTimeout(h.__LICENSE_MANAGER_EXPIRY_TIMER__);if(h.__LICENSE_MANAGER_TIMER__){clearInterval(h.__LICENSE_MANAGER_TIMER__)}if(h.__LICENSE_MANAGER_RETRY_TIMER__){clearTimeout(h.__LICENSE_MANAGER_RETRY_TIMER__);h.__LICENSE_MANAGER_RETRY_TIMER__=void 0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";export const BUOY_ACCOUNT_KEY_NAMES=["BUOY_LICENSE_KEY","BUOY_KEY","EXPO_PUBLIC_BUOY_KEY","VITE_BUOY_KEY","NEXT_PUBLIC_BUOY_KEY","REACT_APP_BUOY_KEY","licenseKey"];const _=/(^|_)BUOY_(LICENSE_)?KEY$/i;export function isBuoyAccountKeyName(e){return BUOY_ACCOUNT_KEY_NAMES.includes(e)||_.test(e)}export function maskBuoyAccountKey(e){if(!e)return e;return e.length>=16?`${e.slice(0,5)}\u2026\u2022\u2022\u2022\u2022 (hidden)`:"\u2022\u2022\u2022\u2022 (hidden)"}export function maskBuoyAccountKeys(e){let n;for(const[t,u]of Object.entries(e)){if(typeof u==="string"&&u&&isBuoyAccountKeyName(t)){n??={...e};n[t]=maskBuoyAccountKey(u)}}return n??e}
|
package/lib/module/config.js
CHANGED
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
* Pro is $9/mo, and is free every weekend for anyone holding a key —
|
|
15
15
|
* including a free one (`npx --package=@buoy-gg/core buoy login`). Buy a key at
|
|
16
16
|
* https://buoy.gg or use it free on Saturday and Sunday.
|
|
17
|
-
*/export const KEYGEN_CONFIG=Object.freeze({accountId:"b0eba0e8-e904-4906-b644-38f9aab57bed",productId:"bf67cb43-eeef-40ca-b308-e6e1b22c0eaa",apiUrl:"https://buoy.gg/api/license"});export{FREE_TOKEN_PUBLIC_KEY}from"./freeTokenKey.js";export{SESSION_TOKEN_PUBLIC_KEY}from"./sessionTokenKey.js";export const KEYGEN_POLICIES=Object.freeze({free:"394e3351-1249-4f73-807a-703408604c0e",solo:"fa5d3c8f-5379-40f1-b63e-ab8a974b2f28",business:"690c2212-8e54-426f-b4b4-002ee1c0ae2b"});export const LICENSE_CACHE_DURATION=30*24*60*60*1e3;export const LICENSE_REVALIDATION_INTERVAL=24*60*60*1e3;export const LICENSE_STORAGE_KEY="buoy-gg-license";export const DEVICE_FINGERPRINT_STORAGE_KEY="buoy-gg-device-fingerprint";export const LICENSE_LAUNCH_VALIDATION_TTL=60*60*1e3;export const LICENSE_TRANSIENT_RETRY_DELAYS=[5*1e3,20*1e3,60*1e3,5*60*1e3,15*60*1e3];export const LICENSE_RATE_LIMIT_DEFAULT_WAIT=60*1e3;export const LICENSE_QUOTA_COOLDOWN=60*60*1e3;export const LICENSE_VERDICT_CACHE_DURATION=24*60*60*1e3;export const LICENSE_FLEET_MACHINE_THRESHOLD=50;export const LICENSE_QUIET_VALIDATION_TTL=LICENSE_CACHE_DURATION;export const LICENSE_HOLD_STORAGE_KEY="buoy-gg-license-hold";
|
|
17
|
+
*/export const KEYGEN_CONFIG=Object.freeze({accountId:"b0eba0e8-e904-4906-b644-38f9aab57bed",productId:"bf67cb43-eeef-40ca-b308-e6e1b22c0eaa",apiUrl:"https://buoy.gg/api/license"});export{FREE_TOKEN_PUBLIC_KEY}from"./freeTokenKey.js";export{SESSION_TOKEN_PUBLIC_KEY}from"./sessionTokenKey.js";export const KEYGEN_POLICIES=Object.freeze({free:"394e3351-1249-4f73-807a-703408604c0e",solo:"fa5d3c8f-5379-40f1-b63e-ab8a974b2f28",business:"690c2212-8e54-426f-b4b4-002ee1c0ae2b"});export const LICENSE_CACHE_DURATION=30*24*60*60*1e3;export const LICENSE_REVALIDATION_INTERVAL=24*60*60*1e3;export const LICENSE_STORAGE_KEY="buoy-gg-license";export const DEVICE_FINGERPRINT_STORAGE_KEY="buoy-gg-device-fingerprint";export const DEVICE_FINGERPRINT_OWNER_STORAGE_KEY="buoy-gg-device-fingerprint-owner";export const LICENSE_LAUNCH_VALIDATION_TTL=60*60*1e3;export const LICENSE_TRANSIENT_RETRY_DELAYS=[5*1e3,20*1e3,60*1e3,5*60*1e3,15*60*1e3];export const LICENSE_RATE_LIMIT_DEFAULT_WAIT=60*1e3;export const LICENSE_QUOTA_COOLDOWN=60*60*1e3;export const LICENSE_VERDICT_CACHE_DURATION=24*60*60*1e3;export const LICENSE_FLEET_MACHINE_THRESHOLD=50;export const LICENSE_QUIET_VALIDATION_TTL=LICENSE_CACHE_DURATION;export const LICENSE_HOLD_STORAGE_KEY="buoy-gg-license-hold";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{NativeModules as
|
|
1
|
+
"use strict";import{NativeModules as o,Platform as e,TurboModuleRegistry as a}from"react-native";export function generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const t=Math.random()*16|0;const r=n==="x"?t:t&3|8;return r.toString(16)})}export function isDevBundle(){try{const n=o?.SourceCode;const t=n?.scriptURL??n?.getConstants?.()?.scriptURL;if(typeof t==="string"&&t.length>0)return/^https?:\/\//i.test(t)}catch{}return typeof __DEV__!=="undefined"&&__DEV__}export function isSimulator(){if(e.OS==="ios"){const n=e.constants;if(n?.interfaceIdiom==="simulator"){return true}if("isTesting"in e&&e.isTesting){return true}return false}if(e.OS==="android"){const n=e.constants;const t=String(n?.Brand||"").toLowerCase();const r=String(n?.Model||"").toLowerCase();const i=String(n?.Fingerprint||"").toLowerCase();const s=t.includes("generic")||r.includes("sdk")||r.includes("emulator")||r.includes("android sdk")||i.includes("generic");return s}return false}export function getDeviceMetadata(){const n={platform:e.OS,osVersion:String(e.Version),isSimulator:String(isSimulator())};if(e.OS==="android"){const t=e.constants;if(t?.Brand)n.brand=String(t.Brand);if(t?.Model)n.model=String(t.Model);if(t?.Manufacturer)n.manufacturer=String(t.Manufacturer)}if(e.OS==="ios"){const t=e.constants;if(t?.systemName)n.systemName=String(t.systemName);if(t?.interfaceIdiom)n.interfaceIdiom=String(t.interfaceIdiom)}return n}export function getDefaultDeviceName(){const n=e.OS==="ios"?"iOS":e.OS==="android"?"Android":e.OS;const t=isSimulator()?" Simulator":"";return`My ${n} Device${t}`}export async function getDeviceOwnerId(){try{if(e.OS==="android"){const n=a?.get?.("PlatformConstants");const t=o?.PlatformConstants;const r=(n?.getAndroidID??t?.getAndroidID)?.call(n?.getAndroidID?n:t);return typeof r==="string"&&r.length>0?r:null}if(e.OS==="ios"){const n=require("expo-application");const t=await(n?.getIosIdForVendorAsync?.()??null);return typeof t==="string"&&t.length>0?t:null}}catch{}return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{capacitorDebug as a}from"./capacitorHost.js";export function generateUUID(){if(typeof crypto!=="undefined"&&crypto.randomUUID){return crypto.randomUUID()}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const e=Math.random()*16|0;const r=n==="x"?e:e&3|8;return r.toString(16)})}export function isDevBundle(){const n=a();if(n!==null)return n;if(typeof __DEV__!=="undefined")return __DEV__;try{if(typeof navigator!=="undefined"&&/electron/i.test(navigator.userAgent))return true}catch{}return typeof process!=="undefined"&&process.env?.NODE_ENV!=="production"}export function isSimulator(){return false}function u(){if(typeof navigator==="undefined"){return"unknown"}const n=navigator.userAgent.toLowerCase();const e=navigator.platform?.toLowerCase()||"";if(n.includes("electron")){if(e.includes("mac")||n.includes("mac")){return"electron-macos"}if(e.includes("win")||n.includes("win")){return"electron-windows"}if(e.includes("linux")||n.includes("linux")){return"electron-linux"}return"electron"}if(e.includes("mac")||n.includes("mac")){return"macos"}if(e.includes("win")||n.includes("win")){return"windows"}if(e.includes("linux")||n.includes("linux")){return"linux"}if(/iphone|ipad|ipod/.test(n)){return"ios-web"}if(n.includes("android")){return"android-web"}return"web"}function s(){if(typeof navigator==="undefined"){return"unknown"}const n=navigator.userAgent;const e=n.match(/Mac OS X ([\d_.]+)/);if(e){return e[1].replace(/_/g,".")}const r=n.match(/Windows NT ([\d.]+)/);if(r){const t={"10.0":"10/11","6.3":"8.1","6.2":"8","6.1":"7"};return t[r[1]]||r[1]}if(n.includes("Linux")){return"Linux"}return"unknown"}function c(){if(typeof navigator==="undefined"){return{name:"unknown",version:"unknown"}}const n=navigator.userAgent;const e=n.match(/Electron\/([\d.]+)/);if(e){return{name:"Electron",version:e[1]}}const r=n.match(/Chrome\/([\d.]+)/);if(r&&!n.includes("Edg")){return{name:"Chrome",version:r[1]}}const t=n.match(/Edg\/([\d.]+)/);if(t){return{name:"Edge",version:t[1]}}const o=n.match(/Firefox\/([\d.]+)/);if(o){return{name:"Firefox",version:o[1]}}const i=n.match(/Version\/([\d.]+).*Safari/);if(i){return{name:"Safari",version:i[1]}}return{name:"unknown",version:"unknown"}}export function getDeviceMetadata(){const n={platform:u(),osVersion:s(),isSimulator:"false"};const e=c();n.browser=e.name;n.browserVersion=e.version;if(typeof window!=="undefined"&&window.screen){n.screenResolution=`${window.screen.width}x${window.screen.height}`}if(typeof navigator!=="undefined"&&navigator.language){n.language=navigator.language}try{n.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}return n}export function getDefaultDeviceName(){const n=u();const e=c();if(n.startsWith("electron")){const r=n.replace("electron-","").replace("electron","Desktop");return`${r.charAt(0).toUpperCase()+r.slice(1)} App`}if(e.name!=="unknown"){return`${e.name} Browser`}return"Web Browser"}
|
|
1
|
+
"use strict";import{capacitorDebug as a}from"./capacitorHost.js";export function generateUUID(){if(typeof crypto!=="undefined"&&crypto.randomUUID){return crypto.randomUUID()}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const e=Math.random()*16|0;const r=n==="x"?e:e&3|8;return r.toString(16)})}export function isDevBundle(){const n=a();if(n!==null)return n;if(typeof __DEV__!=="undefined")return __DEV__;try{if(typeof navigator!=="undefined"&&/electron/i.test(navigator.userAgent))return true}catch{}return typeof process!=="undefined"&&process.env?.NODE_ENV!=="production"}export function isSimulator(){return false}function u(){if(typeof navigator==="undefined"){return"unknown"}const n=navigator.userAgent.toLowerCase();const e=navigator.platform?.toLowerCase()||"";if(n.includes("electron")){if(e.includes("mac")||n.includes("mac")){return"electron-macos"}if(e.includes("win")||n.includes("win")){return"electron-windows"}if(e.includes("linux")||n.includes("linux")){return"electron-linux"}return"electron"}if(e.includes("mac")||n.includes("mac")){return"macos"}if(e.includes("win")||n.includes("win")){return"windows"}if(e.includes("linux")||n.includes("linux")){return"linux"}if(/iphone|ipad|ipod/.test(n)){return"ios-web"}if(n.includes("android")){return"android-web"}return"web"}function s(){if(typeof navigator==="undefined"){return"unknown"}const n=navigator.userAgent;const e=n.match(/Mac OS X ([\d_.]+)/);if(e){return e[1].replace(/_/g,".")}const r=n.match(/Windows NT ([\d.]+)/);if(r){const t={"10.0":"10/11","6.3":"8.1","6.2":"8","6.1":"7"};return t[r[1]]||r[1]}if(n.includes("Linux")){return"Linux"}return"unknown"}function c(){if(typeof navigator==="undefined"){return{name:"unknown",version:"unknown"}}const n=navigator.userAgent;const e=n.match(/Electron\/([\d.]+)/);if(e){return{name:"Electron",version:e[1]}}const r=n.match(/Chrome\/([\d.]+)/);if(r&&!n.includes("Edg")){return{name:"Chrome",version:r[1]}}const t=n.match(/Edg\/([\d.]+)/);if(t){return{name:"Edge",version:t[1]}}const o=n.match(/Firefox\/([\d.]+)/);if(o){return{name:"Firefox",version:o[1]}}const i=n.match(/Version\/([\d.]+).*Safari/);if(i){return{name:"Safari",version:i[1]}}return{name:"unknown",version:"unknown"}}export function getDeviceMetadata(){const n={platform:u(),osVersion:s(),isSimulator:"false"};const e=c();n.browser=e.name;n.browserVersion=e.version;if(typeof window!=="undefined"&&window.screen){n.screenResolution=`${window.screen.width}x${window.screen.height}`}if(typeof navigator!=="undefined"&&navigator.language){n.language=navigator.language}try{n.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}return n}export function getDefaultDeviceName(){const n=u();const e=c();if(n.startsWith("electron")){const r=n.replace("electron-","").replace("electron","Desktop");return`${r.charAt(0).toUpperCase()+r.slice(1)} App`}if(e.name!=="unknown"){return`${e.name} Browser`}return"Web Browser"}export async function getDeviceOwnerId(){return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export{generateUUID,isDevBundle,isSimulator,getDeviceMetadata,getDefaultDeviceName}from"./device-info";
|
|
1
|
+
"use strict";export{generateUUID,isDevBundle,isSimulator,getDeviceMetadata,getDefaultDeviceName,getDeviceOwnerId}from"./device-info";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export{generateUUID,isDevBundle,isSimulator,getDeviceMetadata,getDefaultDeviceName}from"./device-info.web.js";
|
|
1
|
+
"use strict";export{generateUUID,isDevBundle,isSimulator,getDeviceMetadata,getDefaultDeviceName,getDeviceOwnerId}from"./device-info.web.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";export function resolveDeviceFingerprint(n){const{stored:t,storedOwner:r,marker:e,blobFingerprint:i,mint:a}=n;const s=!!e&&!!r&&r!==e;if(s)return{fingerprint:a(),owner:e,restored:true,changed:true};const o=e??r;if(t)return{fingerprint:t,owner:o,restored:false,changed:o!==r};return{fingerprint:i||a(),owner:o,restored:false,changed:true}}export function hashDeviceMarker(n){let t=2166136261;let r=16777619;for(let e=0;e<n.length;e++){const i=n.charCodeAt(e);t=Math.imul(t^i,16777619)>>>0;r=Math.imul(r^i,1540483477)>>>0}return`v1:${t.toString(16).padStart(8,"0")}${r.toString(16).padStart(8,"0")}`}
|
package/lib/module/headless.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export{validateLicense,isAcceptedValidation,isTransientLicenseError,LicenseTransportError}from"./api.js";export{resolveTier,isRecognizedAccount}from"./tier.js";export{isBuoyToken,verifyFreeToken,mintFreeToken,accountHashFor,publicKeyFor}from"./freeToken.js";export{resolveAccountAccess}from"./accountAccess.js";export{signCache,verifyCacheSignature}from"./cacheSignature.js";export{LICENSE_CACHE_DURATION,LICENSE_REVALIDATION_INTERVAL,LICENSE_LAUNCH_VALIDATION_TTL,LICENSE_TRANSIENT_RETRY_DELAYS,KEYGEN_CONFIG}from"./config.js";export{createNodeSession,fileSessionStorage,fileLock,receiveCodeOnLoopback,defaultSessionFile,DESKTOP_AUDIENCE,CLI_AUDIENCE}from"./nodeSession.js";export{SessionError,SessionManagerImpl,SESSION_OFFLINE_GRACE_MS}from"./sessionManager.js";export{verifySessionToken,mintSessionToken}from"./sessionToken.js";export{exchangeServiceKey,isServiceKey,normalizeLicenseKey,sameLicenseKey,SERVICE_KEY_PREFIX,SERVICE_AUDIENCE}from"./serviceKey.js";export{checkDevToken,isDevToken,DEV_AUDIENCE}from"./devToken.js";
|
|
1
|
+
"use strict";export{validateLicense,isAcceptedValidation,isTransientLicenseError,LicenseTransportError}from"./api.js";export{resolveTier,isRecognizedAccount}from"./tier.js";export{isBuoyToken,verifyFreeToken,mintFreeToken,accountHashFor,publicKeyFor}from"./freeToken.js";export{resolveAccountAccess}from"./accountAccess.js";export{signCache,verifyCacheSignature}from"./cacheSignature.js";export{LICENSE_CACHE_DURATION,LICENSE_REVALIDATION_INTERVAL,LICENSE_LAUNCH_VALIDATION_TTL,LICENSE_TRANSIENT_RETRY_DELAYS,KEYGEN_CONFIG}from"./config.js";export{createNodeSession,fileSessionStorage,fileLock,receiveCodeOnLoopback,defaultSessionFile,DESKTOP_AUDIENCE,CLI_AUDIENCE}from"./nodeSession.js";export{SessionError,SessionManagerImpl,SESSION_OFFLINE_GRACE_MS}from"./sessionManager.js";export{verifySessionToken,mintSessionToken}from"./sessionToken.js";export{exchangeServiceKey,isServiceKey,normalizeLicenseKey,sameLicenseKey,SERVICE_KEY_PREFIX,SERVICE_AUDIENCE}from"./serviceKey.js";export{BUOY_ACCOUNT_KEY_NAMES,isBuoyAccountKeyName,maskBuoyAccountKey,maskBuoyAccountKeys}from"./accountKeyNames.js";export{checkDevToken,isDevToken,DEV_AUDIENCE}from"./devToken.js";
|
package/lib/module/index.js
CHANGED
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
* Pro is $9/mo, and is free every weekend for anyone holding a key —
|
|
16
16
|
* including a free one (`npx --package=@buoy-gg/core buoy login`). Buy a key at
|
|
17
17
|
* https://buoy.gg or use it free on Saturday and Sunday.
|
|
18
|
-
*/export{LicenseManager}from"./LicenseManager.js";export{DeviceRegistrationModal}from"./DeviceRegistrationModal.js";export{useLicense,useFeatureAccess,useIsPro,useProAccess,useTier}from"./hooks.js";export{useAccountAccess}from"./hooks.js";export{resolveAccountAccess}from"./accountAccess.js";export{LicenseTransportError,isTransientLicenseError}from"./api.js";export{SessionManager,SessionError}from"./sessionManager.js";export{useBuoySession}from"./hooks.js";export{isServiceKey,normalizeLicenseKey,sameLicenseKey}from"./serviceKey.js";export{isCapacitorNative,capacitorPlatform,capacitorDebug,resolveDevBuild}from"./capacitorHost.js";export{installCapacitorBridge,isCapacitorBridgeInstalled,interceptCapacitor,emitCapacitorEvent,capacitorListenerCount,hasCapacitorPlugin,capacitorPlugin,callCapacitorNative,callCapacitorAsApp,callCapacitorNativeCallback,listenCapacitorNative,makeCapacitorCallbackId,getCapacitorCalls,clearCapacitorCalls,subscribeCapacitorCalls,loadCapacitorAppHost,getCapacitorAppHost,colorSchemeQueryValue,getColorSchemeQueries}from"./capacitorBridge.js";export{isDevToken}from"./devToken.js";export{getSyncCredential,getTeamCredential}from"./syncCredential.js";export{isBuoyToken}from"./freeToken.js";export{isWeekendFreePro,useWeekendFreePro}from"./weekendPro.js";export async function setLicenseKey(e){const{LicenseManager:r}=await import("./LicenseManager");await r.initialize();return r.setLicenseKey(e)}function
|
|
18
|
+
*/export{LicenseManager}from"./LicenseManager.js";export{DeviceRegistrationModal}from"./DeviceRegistrationModal.js";export{useLicense,useFeatureAccess,useIsPro,useProAccess,useTier}from"./hooks.js";export{useAccountAccess}from"./hooks.js";export{resolveAccountAccess}from"./accountAccess.js";export{LicenseTransportError,isTransientLicenseError}from"./api.js";export{SessionManager,SessionError}from"./sessionManager.js";export{useBuoySession}from"./hooks.js";export{isServiceKey,normalizeLicenseKey,sameLicenseKey}from"./serviceKey.js";export{BUOY_ACCOUNT_KEY_NAMES,isBuoyAccountKeyName,maskBuoyAccountKey,maskBuoyAccountKeys}from"./accountKeyNames.js";export{isCapacitorNative,capacitorPlatform,capacitorDebug,resolveDevBuild}from"./capacitorHost.js";export{installCapacitorBridge,isCapacitorBridgeInstalled,interceptCapacitor,emitCapacitorEvent,capacitorListenerCount,hasCapacitorPlugin,capacitorPlugin,callCapacitorNative,callCapacitorAsApp,callCapacitorNativeCallback,listenCapacitorNative,makeCapacitorCallbackId,getCapacitorCalls,clearCapacitorCalls,subscribeCapacitorCalls,loadCapacitorAppHost,getCapacitorAppHost,colorSchemeQueryValue,getColorSchemeQueries}from"./capacitorBridge.js";export{isDevToken}from"./devToken.js";export{getSyncCredential,getTeamCredential}from"./syncCredential.js";export{isBuoyToken}from"./freeToken.js";export{isWeekendFreePro,useWeekendFreePro}from"./weekendPro.js";export async function setLicenseKey(e){const{LicenseManager:r}=await import("./LicenseManager");await r.initialize();return r.setLicenseKey(e)}function o(){const{isWeekendFreePro:e,weekendPassAppliesTo:r}=require("./weekendPro");const{LicenseManager:t}=require("./LicenseManager");return r(t.hasAccountAccess(),e())}export function isPro(){const{LicenseManager:e}=require("./LicenseManager");if(e.isPro())return true;return o()}export function hasEntitlement(e){const{LicenseManager:r}=require("./LicenseManager");if(r.hasEntitlement(e))return true;return o()}
|
package/lib/module/index.web.js
CHANGED
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
* Pro is $9/mo, and is free every weekend for anyone holding a key —
|
|
16
16
|
* including a free one (`npx --package=@buoy-gg/core buoy login`). Buy a key at
|
|
17
17
|
* https://buoy.gg or use it free on Saturday and Sunday.
|
|
18
|
-
*/import{LicenseManager as r}from"./LicenseManager.js";import{isWeekendFreePro as a,weekendPassAppliesTo as i}from"./weekendPro.js";export{LicenseManager}from"./LicenseManager.js";export{useLicense,useFeatureAccess,useIsPro,useProAccess,useTier}from"./hooks.js";export{useAccountAccess}from"./hooks.js";export{resolveAccountAccess}from"./accountAccess.js";export{LicenseTransportError,isTransientLicenseError}from"./api.js";export{SessionManager,SessionError}from"./sessionManager.js";export{useBuoySession}from"./hooks.js";export{isServiceKey,normalizeLicenseKey,sameLicenseKey}from"./serviceKey.js";export{isCapacitorNative,capacitorPlatform,capacitorDebug,resolveDevBuild}from"./capacitorHost.js";export{installCapacitorBridge,isCapacitorBridgeInstalled,interceptCapacitor,emitCapacitorEvent,capacitorListenerCount,hasCapacitorPlugin,capacitorPlugin,callCapacitorNative,callCapacitorAsApp,callCapacitorNativeCallback,listenCapacitorNative,makeCapacitorCallbackId,getCapacitorCalls,clearCapacitorCalls,subscribeCapacitorCalls,loadCapacitorAppHost,getCapacitorAppHost,colorSchemeQueryValue,getColorSchemeQueries}from"./capacitorBridge.js";export{isDevToken}from"./devToken.js";export{getSyncCredential,getTeamCredential}from"./syncCredential.js";export{isBuoyToken}from"./freeToken.js";export{isWeekendFreePro,useWeekendFreePro}from"./weekendPro.js";export async function setLicenseKey(e){const{LicenseManager:o}=await import("./LicenseManager");await o.initialize();return o.setLicenseKey(e)}function t(){return i(r.hasAccountAccess(),a())}export function isPro(){if(r.isPro())return true;return t()}export function hasEntitlement(e){if(r.hasEntitlement(e))return true;return t()}
|
|
18
|
+
*/import{LicenseManager as r}from"./LicenseManager.js";import{isWeekendFreePro as a,weekendPassAppliesTo as i}from"./weekendPro.js";export{LicenseManager}from"./LicenseManager.js";export{useLicense,useFeatureAccess,useIsPro,useProAccess,useTier}from"./hooks.js";export{useAccountAccess}from"./hooks.js";export{resolveAccountAccess}from"./accountAccess.js";export{LicenseTransportError,isTransientLicenseError}from"./api.js";export{SessionManager,SessionError}from"./sessionManager.js";export{useBuoySession}from"./hooks.js";export{isServiceKey,normalizeLicenseKey,sameLicenseKey}from"./serviceKey.js";export{BUOY_ACCOUNT_KEY_NAMES,isBuoyAccountKeyName,maskBuoyAccountKey,maskBuoyAccountKeys}from"./accountKeyNames.js";export{isCapacitorNative,capacitorPlatform,capacitorDebug,resolveDevBuild}from"./capacitorHost.js";export{installCapacitorBridge,isCapacitorBridgeInstalled,interceptCapacitor,emitCapacitorEvent,capacitorListenerCount,hasCapacitorPlugin,capacitorPlugin,callCapacitorNative,callCapacitorAsApp,callCapacitorNativeCallback,listenCapacitorNative,makeCapacitorCallbackId,getCapacitorCalls,clearCapacitorCalls,subscribeCapacitorCalls,loadCapacitorAppHost,getCapacitorAppHost,colorSchemeQueryValue,getColorSchemeQueries}from"./capacitorBridge.js";export{isDevToken}from"./devToken.js";export{getSyncCredential,getTeamCredential}from"./syncCredential.js";export{isBuoyToken}from"./freeToken.js";export{isWeekendFreePro,useWeekendFreePro}from"./weekendPro.js";export async function setLicenseKey(e){const{LicenseManager:o}=await import("./LicenseManager");await o.initialize();return o.setLicenseKey(e)}function t(){return i(r.hasAccountAccess(),a())}export function isPro(){if(r.isPro())return true;return t()}export function hasEntitlement(e){if(r.hasEntitlement(e))return true;return t()}
|
|
@@ -28,6 +28,8 @@ declare class LicenseManagerImpl {
|
|
|
28
28
|
private revalidationTimer;
|
|
29
29
|
private cachedLicense;
|
|
30
30
|
private fingerprintPromise;
|
|
31
|
+
/** This install's files were restored from another device (fingerprintOwner.ts). */
|
|
32
|
+
private fingerprintRestored;
|
|
31
33
|
private initPromise;
|
|
32
34
|
/**
|
|
33
35
|
* Bumped whenever the license is deliberately changed or cleared.
|
|
@@ -239,6 +241,11 @@ declare class LicenseManagerImpl {
|
|
|
239
241
|
* blob, so anything that cleared the blob gave the device a new identity —
|
|
240
242
|
* this adopts a pre-existing blob fingerprint on first read so upgrading
|
|
241
243
|
* doesn't mint a second machine record for the same install.
|
|
244
|
+
*
|
|
245
|
+
* An owner marker saved beside it says which device it belongs to. When the
|
|
246
|
+
* files were restored from ANOTHER phone's backup the marker won't match,
|
|
247
|
+
* and this device gets a new fingerprint of its own. A missing marker (an
|
|
248
|
+
* older build, or no device id) keeps the saved one.
|
|
242
249
|
*/
|
|
243
250
|
private getOrCreateDeviceFingerprint;
|
|
244
251
|
private clearCachedLicense;
|