define("FeatureAccess/feature",["UI/Base","Types/object","Feature/featureSubscription","Env/Env","EngineUser/Info","Controls-DataEnv/slice","Compiler/IR","Browser/Transport","Browser/Storage","Application/Initializer","Application/Env","require","exports"],(function(e,t,r,a,i,s,n,o,u,c,f,l,_){Object.defineProperty(_,"__esModule",{value:true}),_["FeatureAccess/_feature/Const"]=true;var g=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:true}),t.FEATURE_BITMAP_ID=t.FEATURE_CACHE_VERSION=t.FEATURE_KEY=t.FEATURE_ACCESS_KEY=t.UNKNOWN_SPECIFICATION=t.FeatureSource=t.FeatureState=t.SpecificationFlags=t.Specification=void 0;const r="0:a:1800";t.UNKNOWN_SPECIFICATION=r;const a="FEATUREACCESS";t.FEATURE_ACCESS_KEY=a;const i="STORE";t.FEATURE_KEY=i;const s="feature_cache_version";t.FEATURE_CACHE_VERSION=s;const n="__sbis__f_bitmaps";var o,u,c,f;return t.FEATURE_BITMAP_ID=n,function(e){e["empty"]="a",e["client"]="c",e["user"]="u",e["archive"]="p"}(o||(t.Specification=o={})),function(e){e[e["r"]=1]="r",e[e["f"]=2]="f",e[e["u"]=4]="u",e[e["a"]=8]="a",e[e["g"]=16]="g",e[e["d"]=32]="d",e[e["v"]=64]="v"}(u||(t.SpecificationFlags=u={})),function(e){e[e["on"]=1]="on",e[e["off"]=0]="off",e[e["unknown"]=void 0]="unknown"}(c||(t.FeatureState=c={})),function(e){e[e["local"]=0]="local",e[e["remote"]=1]="remote",e[e["default"]=void 0]="default"}(f||(t.FeatureSource=f={})),t}(l,{});_["wml!FeatureAccess/_feature/Container/Container"]=true;var h=function(e){"use strict";var t=["_checkRequiredToggle","_features","content","_options","getValue"];return e.g({v:1,m:"wml!FeatureAccess/_feature/Container/Container",t:[e.r(((e,t)=>[e.m(t,0)?[e.P(t,e.m(t,1),{K:"0_0_",O:{featureValue:e.m(t,2),features:e.m(t,3)},m:"attribute",c:true})]:[e.g(t,"invisible-node",{K:"1_0_",r:true,c:true})]]))],p:t.slice(0,2),e:[(e,r,a)=>e.c(a,r,[t[0]],[e.g(r,[t[1]])]),(e,r)=>e.g(r,[t[3],t[2]]),(e,r)=>e.C(r,[t[1],0,t[4]]),(e,r)=>e.g(r,[t[1]])]})}(n);_["FeatureAccess/_feature/Feature2"]=true;var d=function(e,t,r,a,i){"use strict";Object.defineProperty(t,"__esModule",{value:true}),t.MS_PER_SECONDS=void 0,t.MS_PER_SECONDS=1e3;class s{constructor(e,r,a,s,n){if(this._name=e,!r||!r.s)return void(this._state=Number(n));this._value=r.r.v,this._flags=r.r.o&&i.base64.decode(r.r.o,"NOCONVERT"),this._specification=this._parseSpecification(r.s);const o=this._evalState(r,this._specification,a);if("number"===typeof o)this._state=o;else if("object"===typeof o){if(this._state=o.s,void 0!==o.v)this._value=o.v;if(void 0!==o.o)this._flags=i.base64.decode(o.o,"NOCONVERT")}this._cacheLifeTime=r.i*t.MS_PER_SECONDS,this._receivedTime=s||new Date}isOn(){return Boolean(this._state)}getValue(){return this._value}getSpecification(){return this._specification}getCacheLifeTime(){return this._cacheLifeTime}getReceivedTime(){return this._receivedTime}getState(){return this._state}getName(){return this._name}getUserInfo(){if(s.preventAuth)return;const[e,t]=a.Info.getSessionValue();if(e&&t)return{client:e.toString(),user:t.toString()};return}getFlag(e){if("string"!==typeof this._flags)return;const t=Math.floor(e/8),r=this._flags.charCodeAt(t);if(isNaN(r))return;const a=undefined;return Boolean(r&128>>e%8)}_parseSpecification(e){let t="";const a=8,i=16,s=16,n=16;if(e.length!==n)return"";const o=parseInt(e.slice(a,i),s);return Object.keys(r.SpecificationFlags).filter((e=>"string"===typeof e)).forEach((e=>{if(r.SpecificationFlags[e]&o)t+=e})),t}_evalState(e,t,a){var i;const s=t;if(!s.length)return r.FeatureState.off;if(null===(i=this.getUserInfo())||void 0===i?void 0:i.user)return e.r.s;if(s.includes("f")&&e.f)if(e.f.m){const t=this.getUserInfo();if(t&&t.client&&parseInt(t.client,10)<e.f.m)return r.FeatureState.off}else return e.f.s;return e.r.s}_findState(e,t){const r=parseInt(e,10);for(const e of t)for(const t of Object.keys(e)){const a=undefined;if(r===parseInt(t,16))return e[t]}return null}}return s.preventAuth=false,t.default=s,t}(l,{},g,i,o);_["FeatureAccess/_feature/Store"]=true;var S=function(e,t,r,a,i,s,n,o,u,c,f,l){"use strict";Object.defineProperty(t,"__esModule",{value:true}),t.Store=t.StorageData=void 0;const _=new a.LocalStorage(f.FEATURE_ACCESS_KEY);class g{constructor(){this._store={featureStorage:new h},(0,r.getStateReceiver)().register(f.FEATURE_ACCESS_KEY,this._store.featureStorage)}get(e){return this._store.featureStorage.getState()[e]}set(e,t){const r=this._store.featureStorage.getState();return r[e]=t,this._store.featureStorage.setState(r),true}getState(){return this._store.featureStorage.getState()}remove(e){return}getKeys(){const e=(0,r.getStore)(f.FEATURE_ACCESS_KEY).getState(),t=[];return Object.keys(e).forEach((r=>{t.push(e[r])})),t}toObject(){return(0,r.getStore)(f.FEATURE_ACCESS_KEY).getState()}}t.StorageData=g;class h{constructor(){this.state={}}getState(){return this.state}setState(e){this.state=e}}class d{constructor(){this.preventServerSubscription=false,this.clearCacheCallback=null,this._bitmapStore={},this._bitmapInfoStore={}}_init(){if(!((0,r.getStore)(f.FEATURE_ACCESS_KEY)instanceof g))if((0,r.setStore)(f.FEATURE_ACCESS_KEY,new g),i.constants.isBrowserPlatform){const e=(0,r.getStore)(f.FEATURE_ACCESS_KEY).getState();let t=_.getItem(f.FEATURE_KEY);if(!t||"object"!==typeof t)t={};if(Object.keys(e).forEach((r=>{t[r]=e[r]})),_.setItem(f.FEATURE_KEY,t),!this.preventServerSubscription&&s.Subscription)(0,n.then)((()=>{s.Subscription.subscribe(this._onToggleClearCache),_.subscribe("onRemove",((e,t)=>{if(t===f.FEATURE_KEY)c.cookie.set(f.FEATURE_CACHE_VERSION,null)}))}))}}_onToggleClearCache(e,t){const r=0,a=-1;if(!t||t.length===r)if(this.clearCacheCallback)this.clearCacheCallback();else _.setItem(f.FEATURE_KEY,{});else{const e=_.getItem(f.FEATURE_KEY)||{};Object.keys(e).forEach((r=>{if(r.indexOf(t)!==a)delete e[r]})),_.setItem(f.FEATURE_KEY,e)}}_checkValidateCache(e){if(!e)return;const t=new l.default("",e.rawData),r=t.getCacheLifeTime();if((new Date).getTime()-new Date(e.timeReceipt).getTime()>r)e.invalidation=t.getSpecification();return e}get(e){let t;if(this._init(),!i.constants.isBrowserPlatform)t=(0,r.getStore)(f.FEATURE_ACCESS_KEY).get(e);else{const r=_.getItem(f.FEATURE_KEY);if(t=r&&r[e],t)return this._checkValidateCache(JSON.parse(t))}if(t)return JSON.parse(t);return}set(e,t){this._init();const a={rawData:t,timeReceipt:new Date},s=JSON.stringify(a);if(!i.constants.isBrowserPlatform)(0,r.getStore)(f.FEATURE_ACCESS_KEY).set(e,s);else{const t=_.getItem(f.FEATURE_KEY)||{};t[e]=s,_.setItem(f.FEATURE_KEY,t)}}getBitmapInfo(){const e=f.FEATURE_BITMAP_ID,[t,r]=o.Info.getSessionValue().map((e=>e.toString())),a=t+r;if(this._bitmapInfoStore[a])return this._bitmapInfoStore[a];const i={client:t,user:r};let s="";if(t)s+=`&client=${t}`;if(r)s+=`&user=${r}`;const n=`/feature/${e}/Feature/Get/?version=2&name=${e}`;return this._bitmapInfoStore[a]={featureId:e,stateUrl:`${n}${s}`,mappingUrl:`${n}&client=-1&user=-1`,userInfo:i,mappingUserInfo:{user:"-1",client:"-1"}}}getBitmapData(e=false){const{stateUrl:t,mappingUrl:a}=this.getBitmapInfo();if(!e&&this._bitmapStore[t])return this._bitmapStore[t];const i=this.get(t),s=this.get(a);if(!i||!s)return null;const n=new l.default("bitmapFeature",i.rawData),o=new l.default("mappingFeature",s.rawData);if("string"!==typeof n.getValue()||"string"!==typeof o.getValue())return null;const _=JSON.parse(n.getValue()),g=JSON.parse(o.getValue());if(!g[_.n])return null;const h={...g[_.n]};if(_.idx)Object.keys(h).filter((e=>_.idx.includes(h[e]))).forEach((e=>{delete h[e]}));if(c.cookie.get(f.FEATURE_CACHE_VERSION)===_.n)(0,r.getStore)(f.FEATURE_ACCESS_KEY).remove(a);return c.cookie.set(f.FEATURE_CACHE_VERSION,_.n),this._bitmapStore[t]={verison:_.n,mapping:h,bitmap:u.base64.decode(_.b,"NOCONVERT"),time:new Date(i.timeReceipt),invalidation:n.getCacheLifeTime()}}getBitmapValue(e){this._init();const t=this.getBitmapData();if(!t)return false;const{bitmap:r,mapping:a}=t,i=a[e];if(isNaN(i))return false;const s=Math.floor(i/8),n=r.charCodeAt(s);if(isNaN(n))return false;const o=undefined;return Boolean(n&128>>i%8)}}return t.Store=d,t.default=new d,t}(l,{},f,u,a,r,c,i,o,f,g,d);_["FeatureAccess/_feature/Loader"]=true;var p=function(e,t,r,a,i,s,n,o){"use strict";Object.defineProperty(t,"__esModule",{value:true});class u{constructor(){this._forceBrowserTransport=false,this._invalidationTimer=null,this._clearCacheCallback=()=>{const e=a.default.getBitmapData();if(e&&!this._invalidationTimer)this._invalidationTimer=setTimeout(this._invalidateBitmap,Math.random()*e.invalidation)},this._invalidateBitmap=async()=>{this._invalidationTimer=null;const e=a.default.getBitmapData(),{featureId:t,userInfo:r,mappingUserInfo:s}=a.default.getBitmapInfo(),n=await this._fetchFeature(t,i.FeatureSource.remote,r),o=undefined;if(JSON.parse(n.getValue()).n!==e.verison)await this._fetchFeature(t,i.FeatureSource.remote,s);a.default.getBitmapData(true)}}require(e,t){const a=[];return e.forEach((e=>{a.push(this._load(e,t&&i.FeatureSource.remote))})),Promise.all(a).then((e=>e)).catch((()=>(s.IoC.resolve("ILogger").error(`Ошибка FeatureAccess/feature:require. Сервис не доступен.`),e.map((e=>new r.default(e))))))}get(e){a.default.clearCacheCallback=this._clearCacheCallback;const t=undefined;return this.requireLocal(e).map((e=>{if(!e.getSpecification())return a.default.getBitmapValue(e.getName());else return e.isOn()}))}requireLocal(e){return e.map((e=>this._loadLocal(e)))}preventServerSubscription(){a.default.preventServerSubscription=true}preventAuth(){r.default.preventAuth=true}forceBrowserTransport(e){this._forceBrowserTransport=true}_getBitmapState(e,t){const r=a.default.getBitmapData();if(r&&r.time>t)return a.default.getBitmapValue(e)}async _load(e,t){const a=new r.default(e);return this._fetchFeature(e,t,a.getUserInfo())}_loadLocal(e){const t=new r.default(e);return this._fetchFeature(e,i.FeatureSource.local,t.getUserInfo())}_fetchFeature(e,t,o){let u="";const{user:c,client:f}=o||{};if(f)u+=`&client=${f}`;if(c)u+=`&user=${c}`;const l=`/feature/${e}/Feature/Get/?version=2&name=${e}${u}`;if(t!==i.FeatureSource.remote){const s=a.default.get(l);if(s&&s.rawData){let a;if(t===i.FeatureSource.local||"string"!==typeof s.invalidation){const t=new Date(s.timeReceipt);if("object"===typeof s.rawData)a=new r.default(e,s.rawData,o,t,this._getBitmapState(e,t));else a=new r.default(e,JSON.parse(s.rawData),o,t,this._getBitmapState(e,t))}if(t===i.FeatureSource.local)return a;if(a)return Promise.resolve(a)}}if(t===i.FeatureSource.local)return new r.default(e,void 0,void 0,new Date(0),this._getBitmapState(e,new Date(0)));return this._fetch(l,e,o,this._forceBrowserTransport).then((async t=>{try{const i="string"===typeof t?JSON.parse(t):t;if(!i.s)s.IoC.resolve("ILogger").error(`Ошибка FeatureAccess/feature:require ${e}. `+"Не удалось получить спецификацию из: "+t);return a.default.set(l,i),new r.default(e,i,o)}catch{if(s.IoC.resolve("ILogger").error(`Ошибка FeatureAccess/feature:require ${e}. `+"Не удалось разобрать ответ: "+t),!n.constants.isBrowserPlatform)try{const t=await this._fetch(l,e,o,true),i=JSON.parse(t);return a.default.set(l,i),new r.default(e,i,o)}catch{return new r.default(e)}return new r.default(e)}})).catch((()=>(s.IoC.resolve("ILogger").error(`Ошибка FeatureAccess/feature:require ${e}. Сервис не доступен.`),new r.default(e))))}_fetch(e,t,r,a=false){if(a||n.constants.isBrowserPlatform)return s.IoC.resolve("ITransport",{method:"GET",dataType:"json",url:e}).execute().then((e=>{if("string"===typeof e)return s.IoC.resolve("ILogger").warn("Ошибка FeatureAccess/feature:require. "+'Неожиданный тип ответа: "string".\n'+e),JSON.parse(e).result;return e.result}));else{const e="user",a=undefined,i={version:2,name:t};if(r)i["account"]=r.client,i[e]=r.user;const u=2;return new o.RPCJSON({serviceUrl:n.constants.appRoot}).callMethod("JSFeature.Get",i,false,u).then((e=>e)).catch((e=>(s.IoC.resolve("ILogger").warn(`Ошибка FeatureAccess/feature:require ${t}. `+"RPCJSON: "+e.message),"{}")))}}async loadBitmapData(){const{featureId:e,userInfo:t,mappingUserInfo:r}=a.default.getBitmapInfo();await Promise.all([this._fetchFeature(e,i.FeatureSource.remote,t),this._fetchFeature(e,i.FeatureSource.remote,r)]),a.default.getBitmapData(true)}}return t.default=new u,t}(l,{},d,S,g,a,a,o),E=p;_["FeatureAccess/_feature/Container"]=true;var m=function(e,t,r,a,i,s){"use strict";Object.defineProperty(t,"__esModule",{value:true});class n extends r.Control{constructor(){super(...arguments),this._template=s}_beforeMount(e){const t=a.default.requireLocal(e.idFeature);this._idFeature=e.idFeature,this._features=t}_beforeUpdate(e){if(!this._features||!(0,i.isEqual)(this._idFeature,e.idFeature))a.default.require(e.idFeature).then((t=>{this._idFeature=e.idFeature,this._features=t}))}_checkRequiredToggle(e){if("Any"===this._options.requiredToggle)return true;const t="Off"===this._options.requiredToggle?false:true;return e.every((e=>e.isOn()===t))}}return n.defaultProps={requiredToggle:"On"},t.default=n,t}(l,{},e,p,t,h),F=m;_["FeatureAccess/_feature/Factory"]=true;var v=function(e,t,r,a,i,s){"use strict";Object.defineProperty(t,"__esModule",{value:true});class n extends r.Slice{_initState(e){return this._state=e,Object.freeze({})}get(e){return a.default.get(e)}}return t.default={async loadData(){const e=undefined;if(!i.default.get(s.FEATURE_BITMAP_ID))await a.default.loadBitmapData();return{dataFactoryName:"FeatureAccess/feature:Factory"}},slice:n},t}(l,{},s,p,S,g),C=v;return _.Factory=_.Container=_.Feature=void 0,_.Feature=E.default,_.Container=F.default,_.Factory=C.default,_}));