@monerium/sdk-react-provider 0.0.9 → 0.0.10-beta.6

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/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Monerium SDK React Provider
2
2
 
3
+ ## Installation
4
+
5
+ ```
6
+ pnpm add @monerium/sdk-react-provider
7
+ ```
8
+
3
9
  # Usage
4
10
 
5
11
  Wrap the application with the provider and pass the configuration as props.
@@ -16,7 +22,11 @@ const root = createRoot(rootElement);
16
22
 
17
23
  root.render(
18
24
  <StrictMode>
19
- <MoneriumProvider clientId="f99e629b-6dca-11ee-8aa6-5273f65ed05b" redirectUrl="https://pntvgs.csb.app/" environment="sandbox">
25
+ <MoneriumProvider
26
+ clientId="f99e629b-6dca-11ee-8aa6-5273f65ed05b"
27
+ redirectUrl="https://pntvgs.csb.app/"
28
+ environment="sandbox"
29
+ >
20
30
  <App />
21
31
  </MoneriumProvider>
22
32
  </StrictMode>
@@ -29,7 +39,8 @@ Use the hook to access the Monerium SDK.
29
39
  import { useMonerium } from '@monerium/sdk-react-provider';
30
40
 
31
41
  export default function App() {
32
- const { authorize, isAuthorized, profile, balances, tokens, orders } = useMonerium();
42
+ const { authorize, isAuthorized, profile, balances, tokens, orders } =
43
+ useMonerium();
33
44
  return (
34
45
  <div className="App">
35
46
  {!isAuthorized && <button onClick={authorize}>Authorize</button>}
@@ -50,6 +61,6 @@ https://codesandbox.io/s/monerium-sdk-react-provider-pntvgs?file=/src/index.js
50
61
 
51
62
  ## Running unit tests
52
63
 
53
- Run `nx test sdk-react-provider` to execute the unit tests via [Vitest](https://vitest.dev/).
64
+ Run `turbo --filter @monerium/sdk-react-provider test` to execute the unit tests
54
65
 
55
66
  ####
package/dist/index.d.ts CHANGED
@@ -1,3 +1,35 @@
1
- export * from './lib/provider';
2
- export * from './lib/context';
3
- export * from './lib/hook';
1
+ import * as react from 'react';
2
+ import { FC, ReactNode } from 'react';
3
+ import { Profile, Balances, LinkAddress, NewOrder, Order, Token } from '@monerium/sdk';
4
+
5
+ interface MoneriumProviderProps {
6
+ children: ReactNode;
7
+ clientId?: string;
8
+ redirectUrl?: string;
9
+ environment?: 'sandbox' | 'production';
10
+ }
11
+ declare const MoneriumProvider: FC<MoneriumProviderProps>;
12
+
13
+ interface MoneriumContextValue {
14
+ authorize: () => Promise<void>;
15
+ isAuthorized: boolean;
16
+ profile: Profile | null;
17
+ balances: Balances[] | null;
18
+ loading: boolean;
19
+ loadingPlaceOrder: boolean;
20
+ loadingLinkAddress: boolean;
21
+ loadingBalances: boolean;
22
+ getBalances: () => Promise<void>;
23
+ linkAddress: (addressDetails: LinkAddress) => Promise<unknown>;
24
+ placeOrder: (orderDetails: NewOrder, supportingDocument?: File) => Promise<void>;
25
+ orders: Order[];
26
+ tokens: Token[];
27
+ error: unknown;
28
+ /** Is still checking if there is an active session */
29
+ loadingAuth: boolean;
30
+ }
31
+ declare const MoneriumContext: react.Context<MoneriumContextValue | null>;
32
+
33
+ declare function useMonerium(): MoneriumContextValue;
34
+
35
+ export { MoneriumContext, type MoneriumContextValue, MoneriumProvider, useMonerium };
package/dist/index.js CHANGED
@@ -1 +1,13 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const fe=require("react/jsx-runtime"),S=require("react"),ne=S.createContext(null);var ie=(i,e,t)=>{if(!e.has(i))throw TypeError("Cannot "+t)},m=(i,e,t)=>(ie(i,e,"read from private field"),t?t.call(i):e.get(i)),R=(i,e,t)=>{if(e.has(i))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(i):e.set(i,t)},C=(i,e,t,n)=>(ie(i,e,"write to private field"),n?n.call(i,t):e.set(i,t),t),T=(i,e,t)=>(ie(i,e,"access private method"),t);const Y=i=>{var e;return i&&((e=Object.entries(i))==null?void 0:e.length)>0?Object.entries(i).map(([t,n])=>`${encodeURIComponent(t)}=${encodeURIComponent(n)}`).join("&"):""},pe=i=>{switch(i){case 1:case 5:return"ethereum";case 100:case 10200:return"gnosis";case 137:case 80001:return"polygon";default:throw new Error(`Chain not supported: ${i}`)}},ge=i=>{switch(i){case 1:case 100:case 137:return"mainnet";case 5:return"goerli";case 10200:return"chiado";case 80001:return"mumbai";default:throw new Error(`Network not supported: ${i}`)}},ee={environments:{production:{api:"https://api.monerium.app",web:"https://monerium.app",wss:"wss://api.monerium.app"},sandbox:{api:"https://api.monerium.dev",web:"https://sandbox.monerium.dev",wss:"wss://api.monerium.dev"}}},N="monerium.sdk.code_verifier",te="monerium.sdk.refresh_token";var q=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function le(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}function ve(i){if(i.__esModule)return i;var e=i.default;if(typeof e=="function"){var t=function n(){if(this instanceof n){var o=[null];o.push.apply(o,arguments);var a=Function.bind.apply(e,o);return new a}return e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(i).forEach(function(n){var o=Object.getOwnPropertyDescriptor(i,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:function(){return i[n]}})}),t}var ue={exports:{}};function we(i){throw new Error('Could not dynamically require "'+i+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var oe={exports:{}};const ye={},me=Object.freeze(Object.defineProperty({__proto__:null,default:ye},Symbol.toStringTag,{value:"Module"})),_e=ve(me);var se;function de(){return se||(se=1,function(i,e){(function(t,n){i.exports=n()})(q,function(){var t=t||function(n,o){var a;if(typeof window<"u"&&window.crypto&&(a=window.crypto),typeof self<"u"&&self.crypto&&(a=self.crypto),typeof globalThis<"u"&&globalThis.crypto&&(a=globalThis.crypto),!a&&typeof window<"u"&&window.msCrypto&&(a=window.msCrypto),!a&&typeof q<"u"&&q.crypto&&(a=q.crypto),!a&&typeof we=="function")try{a=_e}catch{}var d=function(){if(a){if(typeof a.getRandomValues=="function")try{return a.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof a.randomBytes=="function")try{return a.randomBytes(4).readInt32LE()}catch{}}throw new Error("Native crypto module could not be used to get secure random number.")},O=Object.create||function(){function r(){}return function(s){var l;return r.prototype=s,l=new r,r.prototype=null,l}}(),f={},_=f.lib={},w=_.Base=function(){return{extend:function(r){var s=O(this);return r&&s.mixIn(r),(!s.hasOwnProperty("init")||this.init===s.init)&&(s.init=function(){s.$super.init.apply(this,arguments)}),s.init.prototype=s,s.$super=this,s},create:function(){var r=this.extend();return r.init.apply(r,arguments),r},init:function(){},mixIn:function(r){for(var s in r)r.hasOwnProperty(s)&&(this[s]=r[s]);r.hasOwnProperty("toString")&&(this.toString=r.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),v=_.WordArray=w.extend({init:function(r,s){r=this.words=r||[],s!=o?this.sigBytes=s:this.sigBytes=r.length*4},toString:function(r){return(r||h).stringify(this)},concat:function(r){var s=this.words,l=r.words,u=this.sigBytes,y=r.sigBytes;if(this.clamp(),u%4)for(var b=0;b<y;b++){var x=l[b>>>2]>>>24-b%4*8&255;s[u+b>>>2]|=x<<24-(u+b)%4*8}else for(var A=0;A<y;A+=4)s[u+A>>>2]=l[A>>>2];return this.sigBytes+=y,this},clamp:function(){var r=this.words,s=this.sigBytes;r[s>>>2]&=4294967295<<32-s%4*8,r.length=n.ceil(s/4)},clone:function(){var r=w.clone.call(this);return r.words=this.words.slice(0),r},random:function(r){for(var s=[],l=0;l<r;l+=4)s.push(d());return new v.init(s,r)}}),k=f.enc={},h=k.Hex={stringify:function(r){for(var s=r.words,l=r.sigBytes,u=[],y=0;y<l;y++){var b=s[y>>>2]>>>24-y%4*8&255;u.push((b>>>4).toString(16)),u.push((b&15).toString(16))}return u.join("")},parse:function(r){for(var s=r.length,l=[],u=0;u<s;u+=2)l[u>>>3]|=parseInt(r.substr(u,2),16)<<24-u%8*4;return new v.init(l,s/2)}},g=k.Latin1={stringify:function(r){for(var s=r.words,l=r.sigBytes,u=[],y=0;y<l;y++){var b=s[y>>>2]>>>24-y%4*8&255;u.push(String.fromCharCode(b))}return u.join("")},parse:function(r){for(var s=r.length,l=[],u=0;u<s;u++)l[u>>>2]|=(r.charCodeAt(u)&255)<<24-u%4*8;return new v.init(l,s)}},c=k.Utf8={stringify:function(r){try{return decodeURIComponent(escape(g.stringify(r)))}catch{throw new Error("Malformed UTF-8 data")}},parse:function(r){return g.parse(unescape(encodeURIComponent(r)))}},p=_.BufferedBlockAlgorithm=w.extend({reset:function(){this._data=new v.init,this._nDataBytes=0},_append:function(r){typeof r=="string"&&(r=c.parse(r)),this._data.concat(r),this._nDataBytes+=r.sigBytes},_process:function(r){var s,l=this._data,u=l.words,y=l.sigBytes,b=this.blockSize,x=b*4,A=y/x;r?A=n.ceil(A):A=n.max((A|0)-this._minBufferSize,0);var W=A*b,z=n.min(W*4,y);if(W){for(var L=0;L<W;L+=b)this._doProcessBlock(u,L);s=u.splice(0,W),l.sigBytes-=z}return new v.init(s,z)},clone:function(){var r=w.clone.call(this);return r._data=this._data.clone(),r},_minBufferSize:0});_.Hasher=p.extend({cfg:w.extend(),init:function(r){this.cfg=this.cfg.extend(r),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(r){return this._append(r),this._process(),this},finalize:function(r){r&&this._append(r);var s=this._doFinalize();return s},blockSize:16,_createHelper:function(r){return function(s,l){return new r.init(l).finalize(s)}},_createHmacHelper:function(r){return function(s,l){return new I.HMAC.init(r,l).finalize(s)}}});var I=f.algo={};return f}(Math);return t})}(oe)),oe.exports}(function(i,e){(function(t,n){i.exports=n(de())})(q,function(t){return function(){var n=t,o=n.lib,a=o.WordArray,d=n.enc;d.Base64url={stringify:function(f,_){_===void 0&&(_=!0);var w=f.words,v=f.sigBytes,k=_?this._safe_map:this._map;f.clamp();for(var h=[],g=0;g<v;g+=3)for(var c=w[g>>>2]>>>24-g%4*8&255,p=w[g+1>>>2]>>>24-(g+1)%4*8&255,I=w[g+2>>>2]>>>24-(g+2)%4*8&255,r=c<<16|p<<8|I,s=0;s<4&&g+s*.75<v;s++)h.push(k.charAt(r>>>6*(3-s)&63));var l=k.charAt(64);if(l)for(;h.length%4;)h.push(l);return h.join("")},parse:function(f,_){_===void 0&&(_=!0);var w=f.length,v=_?this._safe_map:this._map,k=this._reverseMap;if(!k){k=this._reverseMap=[];for(var h=0;h<v.length;h++)k[v.charCodeAt(h)]=h}var g=v.charAt(64);if(g){var c=f.indexOf(g);c!==-1&&(w=c)}return O(f,w,k)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_safe_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"};function O(f,_,w){for(var v=[],k=0,h=0;h<_;h++)if(h%4){var g=w[f.charCodeAt(h-1)]<<h%4*2,c=w[f.charCodeAt(h)]>>>6-h%4*2,p=g|c;v[k>>>2]|=p<<24-k%4*8,k++}return a.create(v,k)}}(),t.enc.Base64url})})(ue);var be=ue.exports;const ke=le(be);var he={exports:{}};(function(i,e){(function(t,n){i.exports=n(de())})(q,function(t){return function(n){var o=t,a=o.lib,d=a.WordArray,O=a.Hasher,f=o.algo,_=[],w=[];(function(){function h(I){for(var r=n.sqrt(I),s=2;s<=r;s++)if(!(I%s))return!1;return!0}function g(I){return(I-(I|0))*4294967296|0}for(var c=2,p=0;p<64;)h(c)&&(p<8&&(_[p]=g(n.pow(c,1/2))),w[p]=g(n.pow(c,1/3)),p++),c++})();var v=[],k=f.SHA256=O.extend({_doReset:function(){this._hash=new d.init(_.slice(0))},_doProcessBlock:function(h,g){for(var c=this._hash.words,p=c[0],I=c[1],r=c[2],s=c[3],l=c[4],u=c[5],y=c[6],b=c[7],x=0;x<64;x++){if(x<16)v[x]=h[g+x]|0;else{var A=v[x-15],W=(A<<25|A>>>7)^(A<<14|A>>>18)^A>>>3,z=v[x-2],L=(z<<15|z>>>17)^(z<<13|z>>>19)^z>>>10;v[x]=W+v[x-7]+L+v[x-16]}var X=l&u^~l&y,M=p&I^p&r^I&r,P=(p<<30|p>>>2)^(p<<19|p>>>13)^(p<<10|p>>>22),U=(l<<26|l>>>6)^(l<<21|l>>>11)^(l<<7|l>>>25),H=b+U+X+w[x]+v[x],J=P+M;b=y,y=u,u=l,l=s+H|0,s=r,r=I,I=p,p=H+J|0}c[0]=c[0]+p|0,c[1]=c[1]+I|0,c[2]=c[2]+r|0,c[3]=c[3]+s|0,c[4]=c[4]+l|0,c[5]=c[5]+u|0,c[6]=c[6]+y|0,c[7]=c[7]+b|0},_doFinalize:function(){var h=this._data,g=h.words,c=this._nDataBytes*8,p=h.sigBytes*8;return g[p>>>5]|=128<<24-p%32,g[(p+64>>>9<<4)+14]=n.floor(c/4294967296),g[(p+64>>>9<<4)+15]=c,h.sigBytes=g.length*4,this._process(),this._hash},clone:function(){var h=O.clone.call(this);return h._hash=this._hash.clone(),h}});o.SHA256=O._createHelper(k),o.HmacSHA256=O._createHmacHelper(k)}(Math),t.SHA256})})(he);var Se=he.exports;const Oe=le(Se),Ie=(i,e)=>{const{client_id:t,redirect_uri:n,scope:o,state:a,chainId:d,chain:O,network:f,address:_,signature:w}=i,v=_?{address:_,...w!==void 0?{signature:w}:{},...d!==void 0||O!==void 0?{chain:d?pe(d):O}:{},...d!==void 0||f!==void 0?{network:d?ge(d):f}:{}}:{};return Y({client_id:t,redirect_uri:n,...o!==void 0?{scope:o}:{},...a!==void 0?{state:a}:{},code_challenge:e,code_challenge_method:"S256",response_type:"code",...v})},xe=()=>{let i="";const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t=e.length;let n=0;for(;n<128;)i+=e.charAt(Math.floor(Math.random()*t)),n+=1;return i},Ae=i=>ke.stringify(Oe(i)),ae=(i,e)=>{const t=xe(),n=Ae(t);return sessionStorage.setItem(N,t||""),`${i}/auth?${Ie(e,n)}`},Me=()=>{const i=window.location.href,[e,t]=i.split("?");t&&window.history.replaceState(null,"",e)},ce=i=>i.code!=null,Ee=i=>i.refresh_token!=null,Be=i=>i.client_secret!=null,Pe=async(i,e,t,n)=>{const o=await fetch(`${i}`,{method:e,headers:n,body:t});let a;const d=await o.text();try{a=JSON.parse(d)}catch{throw d}if(!o.ok)throw a;return a},re=typeof window>"u";var j,Z,F,D,$,E,B,G,K,Q;class Ce{constructor(e){if(R(this,E),R(this,j,void 0),R(this,Z,void 0),R(this,F,void 0),R(this,D,void 0),R(this,$,void 0),R(this,G,void 0),R(this,K,void 0),R(this,Q,void 0),C(this,D,new Map),this.isAuthorized=!!this.bearerProfile,C(this,G,async(t,n,o)=>{const a=sessionStorage.getItem(N)||"";if(!a)throw new Error("Code verifier not found");return this.codeVerifier=a,sessionStorage.removeItem(N),await this.getBearerToken({code:o,redirect_uri:n,client_id:t,code_verifier:a})}),C(this,K,async({clientId:t,clientSecret:n})=>await this.getBearerToken({client_id:t,client_secret:n})),C(this,Q,async(t,n)=>await this.getBearerToken({refresh_token:n,client_id:t})),this.subscribeToOrderNotifications=()=>{var t,n;const o=`${m(this,j).wss}/profiles/${(t=this.bearerProfile)==null?void 0:t.profile}/orders?access_token=${(n=this.bearerProfile)==null?void 0:n.access_token}`,a=new WebSocket(o);return a.addEventListener("open",()=>{console.info(`Socket connected: ${o}`)}),a.addEventListener("error",d=>{throw console.error(d),new Error(`Socket error: ${o}`)}),a.addEventListener("message",d=>{var O;const f=JSON.parse(d.data);(O=m(this,D).get(f.meta.state))==null||O(f)}),a.addEventListener("close",()=>{console.info(`Socket connection closed: ${o}`)}),a},this.auth=async t=>await this.getBearerToken(t),this.getAuthFlowURI=t=>{const n=ae(m(this,j).api,t);return this.codeVerifier=sessionStorage.getItem(N),n},this.pkceRequest=t=>this.getAuthFlowURI(t),this.getEnvironment=()=>m(this,j),!e){C(this,j,ee.environments.sandbox);return}if(typeof e=="string")C(this,j,ee.environments[e]);else if(C(this,j,ee.environments[e.environment||"sandbox"]),re){const{clientId:t,clientSecret:n}=e;C(this,$,{clientId:t,clientSecret:n})}else{const{clientId:t,redirectUrl:n}=e;C(this,$,{clientId:t,redirectUrl:n})}}async authorize(e){var t,n;const o=(e==null?void 0:e.clientId)||((t=m(this,$))==null?void 0:t.clientId),a=(e==null?void 0:e.redirectUrl)||((n=m(this,$))==null?void 0:n.redirectUrl);if(!o)throw new Error("Missing ClientId");if(!a)throw new Error("Missing RedirectUrl");const d=ae(m(this,j).api,{client_id:o,redirect_uri:a,address:e==null?void 0:e.address,signature:e==null?void 0:e.signature,chainId:e==null?void 0:e.chainId});window.location.replace(d)}async connect(e){var t,n,o;const a=(e==null?void 0:e.clientId)||((t=m(this,$))==null?void 0:t.clientId);if(e!=null&&e.clientSecret||(n=m(this,$))!=null&&n.clientSecret){if(!re)throw new Error("Only use client credentials on server side");return await m(this,K).call(this,m(this,$)),!!this.bearerProfile}const d=(e==null?void 0:e.redirectUrl)||((o=m(this,$))==null?void 0:o.redirectUrl);if(!a)throw new Error("Missing ClientId");if(re)throw new Error("This only works on client side");const O=new URLSearchParams(window.location.search).get("code")||void 0,f=sessionStorage.getItem(te)||void 0;return O?await m(this,G).call(this,a,d,O):f&&await m(this,Q).call(this,a,f),!!this.bearerProfile}async getBearerToken(e){let t;if(ce(e))t={...e,grant_type:"authorization_code"};else if(Ee(e))t={...e,grant_type:"refresh_token"};else if(Be(e))t={...e,grant_type:"client_credentials"};else throw new Error("Authentication method could not be detected.");return await T(this,E,B).call(this,"post","auth/token",t,!0).then(n=>{var o;this.bearerProfile=n,this.isAuthorized=!!n,C(this,Z,`Bearer ${n==null?void 0:n.access_token}`),window.sessionStorage.setItem(te,((o=this.bearerProfile)==null?void 0:o.refresh_token)||"")}).catch(n=>{throw sessionStorage.removeItem(N),sessionStorage.removeItem(te),new Error(n==null?void 0:n.message)}),ce(e)&&Me(),this.bearerProfile}getAuthContext(){return T(this,E,B).call(this,"get","auth/context")}getProfile(e){return T(this,E,B).call(this,"get",`profiles/${e}`)}getBalances(e){return e?T(this,E,B).call(this,"get",`profiles/${e}/balances`):T(this,E,B).call(this,"get","balances")}getOrders(e){const t=Y(e);return T(this,E,B).call(this,"get",`orders?${t}`)}getOrder(e){return T(this,E,B).call(this,"get",`orders/${e}`)}getTokens(){return T(this,E,B).call(this,"get","tokens")}linkAddress(e,t){return T(this,E,B).call(this,"post",`profiles/${e}/addresses`,JSON.stringify(t))}placeOrder(e,t){const n={...e,kind:"redeem",currency:"eur"};return t?T(this,E,B).call(this,"post",`profiles/${t}/orders`,JSON.stringify(n)):T(this,E,B).call(this,"post","orders",JSON.stringify(n))}uploadSupportingDocument(e){const t=Y(e);return T(this,E,B).call(this,"post","files/supporting-document",t,!0)}async connectOrderSocket(){var e;(e=this.bearerProfile)!=null&&e.access_token&&m(this,D).size>0&&C(this,F,this.subscribeToOrderNotifications())}async disconnect(){var e;sessionStorage.removeItem(N),m(this,D).clear(),(e=m(this,F))==null||e.close()}subscribeOrders(e,t){m(this,D).set(e,t)}unsubscribeOrders(e){var t;m(this,D).delete(e),m(this,D).size===0&&((t=m(this,F))==null||t.close(),C(this,F,void 0))}}j=new WeakMap,Z=new WeakMap,F=new WeakMap,D=new WeakMap,$=new WeakMap,E=new WeakSet,B=async function(i,e,t,n){return Pe(`${m(this,j).api}/${e}`,i,n?Y(t):t,{Authorization:m(this,Z)||"","Content-Type":`application/${n?"x-www-form-urlencoded":"json"}`})},G=new WeakMap,K=new WeakMap,Q=new WeakMap;const Te=({children:i,clientId:e="f99e629b-6dca-11ee-8aa6-5273f65ed05b",redirectUrl:t="http://localhost:5173",environment:n="sandbox"})=>{const[o,a]=S.useState(),[d,O]=S.useState(!1),[f,_]=S.useState(null),[w,v]=S.useState(null),[k,h]=S.useState(!1),[g,c]=S.useState(!1),[p,I]=S.useState(!1),[r,s]=S.useState(!1),[l,u]=S.useState(null),[y,b]=S.useState([]),[x,A]=S.useState([]);S.useEffect(()=>{const M=new Ce({environment:n,clientId:e,redirectUrl:t});a(M)},[]),S.useEffect(()=>((async()=>{o&&O(await o.getAccess())})(),()=>{o&&o.disconnect()}),[o]),S.useEffect(()=>{(async()=>{if(o&&d)try{h(!0);const P=await o.getAuthContext(),U=await o.getProfile(P.defaultProfile),H=await o.getBalances(),J=await o.getOrders(),V=await o.getTokens();_(U),v(H),b(J),A(V)}catch(P){console.error("Error fetching data:",P),u(P)}finally{h(!1)}})()},[o,d]);const W=S.useCallback(async()=>{try{o&&await o.authorize()}catch(M){console.error("Error during authorization:",M),u(M)}},[o]),z=S.useCallback(async()=>{if(o&&d)try{s(!0);const M=await o.getBalances();v(M)}catch(M){console.error("Error getting balances:",M),u(M)}finally{s(!1)}},[o,d]),L=S.useCallback(async(M,P)=>{if(o&&d)try{c(!0);let U;parseInt(M.amount)>15e3&&P&&(U=(await o.uploadSupportingDocument(P)).id);const H={...M,documentId:U},J=await o.placeOrder(H);b(V=>[...V,J])}catch(U){console.error("Error placing order:",U),u(U)}finally{c(!1)}},[o,d]),X=S.useCallback(async M=>{if(o&&d&&f)try{return I(!0),await o.linkAddress(f.id,M)}catch(P){console.error("Error linking address:",P),u(P)}finally{I(!1)}},[o,d,f]);return fe.jsx(ne.Provider,{value:{authorize:W,isAuthorized:d,profile:f,balances:w,loading:k,loadingPlaceOrder:g,loadingLinkAddress:p,loadingBalances:r,getBalances:z,linkAddress:X,placeOrder:L,orders:y,tokens:x,error:l},children:i})};function ze(){const i=S.useContext(ne);if(i===null)throw new Error("useMonerium must be used within a MoneriumProvider");return i}exports.MoneriumContext=ne;exports.MoneriumProvider=Te;exports.useMonerium=ze;
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var sdk = require('@monerium/sdk');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ var c=react.createContext(null);var ae=({children:i,clientId:A="f99e629b-6dca-11ee-8aa6-5273f65ed05b",redirectUrl:O="http://localhost:5173",environment:b="sandbox"})=>{let[e,y]=react.useState(),[t,C]=react.useState(!1),[l,M]=react.useState(null),[v,L]=react.useState(null),[B,g]=react.useState(!1),[D,p]=react.useState(!1),[E,h]=react.useState(!1),[z,k]=react.useState(!1),[N,s]=react.useState(null),[T,P]=react.useState([]),[F,I]=react.useState([]),[V,R]=react.useState(!0);react.useEffect(()=>{let r=new sdk.MoneriumClient({environment:b,clientId:A,redirectUrl:O});y(r);},[]),react.useEffect(()=>((async()=>{if(e)try{C(await e.getAccess());}catch(o){console.error("Failed to get access:",o);}finally{R(!1);}})(),()=>{e&&e.disconnect();}),[e]),react.useEffect(()=>{(async()=>{if(e&&t)try{g(!0);let[o]=await Promise.all([e.getAuthContext(),w()]),[a,u]=await Promise.all([e.getProfile(o.defaultProfile),e.getTokens()]),f=await e.getOrders();M(a),P(f),I(u);}catch(o){console.error("Error fetching data:",o),s(o);}finally{g(!1);}})();},[e,t]);let S=react.useCallback(async()=>{try{e&&await e.authorize();}catch(r){console.error("Error during authorization:",r),s(r);}},[e]),w=react.useCallback(async()=>{if(e&&t)try{k(!0);let r=await e.getBalances();L(r);}catch(r){console.error("Error getting balances:",r),s(r);}finally{k(!1);}},[e,t]),U=react.useCallback(async(r,o)=>{if(e&&t)try{p(!0);let a;parseInt(r.amount)>15e3&&o&&(a=(await e.uploadSupportingDocument(o)).id);let u={...r,documentId:a},f=await e.placeOrder(u);P(x=>[...x,f]);}catch(a){console.error("Error placing order:",a),s(a);}finally{p(!1);}},[e,t]),q=react.useCallback(async r=>{if(e&&t&&l)try{return h(!0),await e.linkAddress(l.id,r)}catch(o){console.error("Error linking address:",o),s(o);}finally{h(!1);}},[e,t,l]);return jsxRuntime.jsx(c.Provider,{value:{authorize:S,isAuthorized:t,profile:l,balances:v,loading:B,loadingPlaceOrder:D,loadingLinkAddress:E,loadingBalances:z,getBalances:w,linkAddress:q,placeOrder:U,orders:T,tokens:F,error:N,loadingAuth:V},children:i})};function ue(){let i=react.useContext(c);if(i===null)throw new Error("useMonerium must be used within a MoneriumProvider");return i}
8
+
9
+ exports.MoneriumContext = c;
10
+ exports.MoneriumProvider = ae;
11
+ exports.useMonerium = ue;
12
+ //# sourceMappingURL=out.js.map
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvcHJvdmlkZXIudHN4IiwiLi4vc3JjL2xpYi9jb250ZXh0LnRzeCIsIi4uL3NyYy9saWIvaG9vay50c3giXSwibmFtZXMiOlsidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsIk1vbmVyaXVtQ2xpZW50IiwiY3JlYXRlQ29udGV4dCIsIk1vbmVyaXVtQ29udGV4dCIsImpzeCIsIk1vbmVyaXVtUHJvdmlkZXIiLCJjaGlsZHJlbiIsImNsaWVudElkIiwicmVkaXJlY3RVcmwiLCJlbnZpcm9ubWVudCIsIm1vbmVyaXVtIiwic2V0TW9uZXJpdW0iLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJwcm9maWxlIiwic2V0UHJvZmlsZSIsImJhbGFuY2VzIiwic2V0QmFsYW5jZXMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImxvYWRpbmdQbGFjZU9yZGVyIiwic2V0TG9hZGluZ1BsYWNlT3JkZXIiLCJsb2FkaW5nTGlua0FkZHJlc3MiLCJzZXRMb2FkaW5nTGlua0FkZHJlc3MiLCJsb2FkaW5nQmFsYW5jZXMiLCJzZXRMb2FkaW5nQmFsYW5jZXMiLCJlcnJvciIsInNldEVycm9yIiwib3JkZXJzIiwic2V0T3JkZXJzIiwidG9rZW5zIiwic2V0VG9rZW5zIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInNkayIsImF1dGhDdHgiLCJnZXRCYWxhbmNlcyIsInByb2ZpbGVEYXRhIiwidG9rZW5zRGF0YSIsIm9yZGVyc0RhdGEiLCJlcnIiLCJhdXRob3JpemUiLCJwbGFjZU9yZGVyIiwib3JkZXJEZXRhaWxzIiwic3VwcG9ydGluZ0RvY3VtZW50IiwiZG9jdW1lbnRJZCIsIm5ld09yZGVyRGV0YWlscyIsIm5ld09yZGVyIiwicHJldk9yZGVycyIsImxpbmtBZGRyZXNzIiwiYWRkcmVzc0RldGFpbHMiLCJ1c2VDb250ZXh0IiwidXNlTW9uZXJpdW0iLCJjb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUF3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LEVBQWdCLFNBQWhCLENBQ0MsTUFBTyxDQUNMLFVBQUFzQyxFQUNBLGFBQUE3QixFQUNBLFFBQUFFLEVBQ0EsU0FBQUUsRUFDQSxRQUFBRSxFQUNBLGtCQUFBRSxFQUNBLG1CQUFBRSxFQUNBLGdCQUFBRSxFQUNBLFlBQUFZLEVBQ0EsWUFBQWEsRUFDQSxXQUFBUCxFQUNBLE9BQUFkLEVBQ0EsT0FBQUUsRUFDQSxNQUFBSixFQUNBLFlBQUFNLENBQ0YsRUFFQyxTQUFBMUIsRUFDSCxDQUVKLEVFN01BLE9BQVMsY0FBQTZDLE1BQWtCLFFBSXBCLFNBQVNDLElBQW9DLENBQ2xELElBQU1DLEVBQVVGLEVBQVdoRCxDQUFlLEVBRTFDLEdBQUlrRCxJQUFZLEtBQ2QsTUFBTSxJQUFJLE1BQU0sb0RBQW9ELEVBRXRFLE9BQU9BLENBQ1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGQywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtcbiAgQmFsYW5jZXMsXG4gIExpbmtBZGRyZXNzLFxuICBNb25lcml1bUNsaWVudCxcbiAgTmV3T3JkZXIsXG4gIE9yZGVyLFxuICBQcm9maWxlLFxuICBUb2tlbixcbn0gZnJvbSAnQG1vbmVyaXVtL3Nkayc7XG5cbmltcG9ydCB7IE1vbmVyaXVtQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5cbmludGVyZmFjZSBNb25lcml1bVByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgcmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50PzogJ3NhbmRib3gnIHwgJ3Byb2R1Y3Rpb24nO1xufVxuXG5leHBvcnQgY29uc3QgTW9uZXJpdW1Qcm92aWRlcjogRkM8TW9uZXJpdW1Qcm92aWRlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGllbnRJZCA9ICdmOTllNjI5Yi02ZGNhLTExZWUtOGFhNi01MjczZjY1ZWQwNWInLFxuICByZWRpcmVjdFVybCA9ICdodHRwOi8vbG9jYWxob3N0OjUxNzMnLFxuICBlbnZpcm9ubWVudCA9ICdzYW5kYm94Jyxcbn0pID0+IHtcbiAgY29uc3QgW21vbmVyaXVtLCBzZXRNb25lcml1bV0gPSB1c2VTdGF0ZTxNb25lcml1bUNsaWVudD4oKTtcbiAgY29uc3QgW2lzQXV0aG9yaXplZCwgc2V0SXNBdXRob3JpemVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3Byb2ZpbGUsIHNldFByb2ZpbGVdID0gdXNlU3RhdGU8UHJvZmlsZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYmFsYW5jZXMsIHNldEJhbGFuY2VzXSA9IHVzZVN0YXRlPEJhbGFuY2VzW10gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZGluZ1BsYWNlT3JkZXIsIHNldExvYWRpbmdQbGFjZU9yZGVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2xvYWRpbmdMaW5rQWRkcmVzcywgc2V0TG9hZGluZ0xpbmtBZGRyZXNzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2xvYWRpbmdCYWxhbmNlcywgc2V0TG9hZGluZ0JhbGFuY2VzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IHVua25vd24gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW29yZGVycywgc2V0T3JkZXJzXSA9IHVzZVN0YXRlPE9yZGVyW10+KFtdKTtcbiAgY29uc3QgW3Rva2Vucywgc2V0VG9rZW5zXSA9IHVzZVN0YXRlPFRva2VuW10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmdBdXRoLCBzZXRMb2FkaW5nQXV0aF0gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBTREtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZGsgPSBuZXcgTW9uZXJpdW1DbGllbnQoe1xuICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgY2xpZW50SWQsXG4gICAgICByZWRpcmVjdFVybCxcbiAgICB9KTtcbiAgICBzZXRNb25lcml1bShzZGspO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKG1vbmVyaXVtKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IG1vbmVyaXVtLmdldEFjY2VzcygpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGFjY2VzczonLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0TG9hZGluZ0F1dGgoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbm5lY3QoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAobW9uZXJpdW0pIHtcbiAgICAgICAgbW9uZXJpdW0uZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFttb25lcml1bV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZmV0Y2hEYXRhID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKG1vbmVyaXVtICYmIGlzQXV0aG9yaXplZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgY29uc3QgW2F1dGhDdHhdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgbW9uZXJpdW0uZ2V0QXV0aENvbnRleHQoKSxcbiAgICAgICAgICAgIGdldEJhbGFuY2VzKCksXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBjb25zdCBbcHJvZmlsZURhdGEsIHRva2Vuc0RhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgbW9uZXJpdW0uZ2V0UHJvZmlsZShhdXRoQ3R4LmRlZmF1bHRQcm9maWxlKSxcbiAgICAgICAgICAgIG1vbmVyaXVtLmdldFRva2VucygpLFxuICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgY29uc3Qgb3JkZXJzRGF0YSA9IGF3YWl0IG1vbmVyaXVtLmdldE9yZGVycygpO1xuXG4gICAgICAgICAgc2V0UHJvZmlsZShwcm9maWxlRGF0YSk7XG4gICAgICAgICAgc2V0T3JkZXJzKG9yZGVyc0RhdGEpO1xuICAgICAgICAgIHNldFRva2Vucyh0b2tlbnNEYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YTonLCBlcnIpO1xuICAgICAgICAgIHNldEVycm9yKGVycik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZmV0Y2hEYXRhKCk7XG4gIH0sIFttb25lcml1bSwgaXNBdXRob3JpemVkXSk7XG5cbiAgY29uc3QgYXV0aG9yaXplID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAobW9uZXJpdW0pIHtcbiAgICAgICAgYXdhaXQgbW9uZXJpdW0uYXV0aG9yaXplKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgYXV0aG9yaXphdGlvbjonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9XG4gIH0sIFttb25lcml1bV0pO1xuXG4gIGNvbnN0IGdldEJhbGFuY2VzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChtb25lcml1bSAmJiBpc0F1dGhvcml6ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmdCYWxhbmNlcyh0cnVlKTtcbiAgICAgICAgY29uc3QgYmFsYW5jZXMgPSBhd2FpdCBtb25lcml1bS5nZXRCYWxhbmNlcygpO1xuICAgICAgICBzZXRCYWxhbmNlcyhiYWxhbmNlcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBiYWxhbmNlczonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZ0JhbGFuY2VzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFttb25lcml1bSwgaXNBdXRob3JpemVkXSk7XG5cbiAgY29uc3QgcGxhY2VPcmRlciA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChvcmRlckRldGFpbHM6IE5ld09yZGVyLCBzdXBwb3J0aW5nRG9jdW1lbnQ/OiBGaWxlKSA9PiB7XG4gICAgICBpZiAobW9uZXJpdW0gJiYgaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0TG9hZGluZ1BsYWNlT3JkZXIodHJ1ZSk7XG5cbiAgICAgICAgICBsZXQgZG9jdW1lbnRJZDtcbiAgICAgICAgICBpZiAocGFyc2VJbnQob3JkZXJEZXRhaWxzLmFtb3VudCkgPiAxNTAwMCAmJiBzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwbG9hZGVkRG9jdW1lbnQgPVxuICAgICAgICAgICAgICBhd2FpdCBtb25lcml1bS51cGxvYWRTdXBwb3J0aW5nRG9jdW1lbnQoc3VwcG9ydGluZ0RvY3VtZW50KTtcbiAgICAgICAgICAgIGRvY3VtZW50SWQgPSB1cGxvYWRlZERvY3VtZW50LmlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5ld09yZGVyRGV0YWlscyA9IHtcbiAgICAgICAgICAgIC4uLm9yZGVyRGV0YWlscyxcbiAgICAgICAgICAgIGRvY3VtZW50SWQ6IGRvY3VtZW50SWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IG5ld09yZGVyID0gYXdhaXQgbW9uZXJpdW0ucGxhY2VPcmRlcihuZXdPcmRlckRldGFpbHMpO1xuICAgICAgICAgIHNldE9yZGVycygocHJldk9yZGVycykgPT4gWy4uLnByZXZPcmRlcnMsIG5ld09yZGVyXSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBsYWNpbmcgb3JkZXI6JywgZXJyKTtcbiAgICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldExvYWRpbmdQbGFjZU9yZGVyKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW21vbmVyaXVtLCBpc0F1dGhvcml6ZWRdXG4gICk7XG5cbiAgY29uc3QgbGlua0FkZHJlc3MgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoYWRkcmVzc0RldGFpbHM6IExpbmtBZGRyZXNzKSA9PiB7XG4gICAgICBpZiAobW9uZXJpdW0gJiYgaXNBdXRob3JpemVkICYmIHByb2ZpbGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nTGlua0FkZHJlc3ModHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IG1vbmVyaXVtLmxpbmtBZGRyZXNzKHByb2ZpbGUuaWQsIGFkZHJlc3NEZXRhaWxzKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB5b3VyIHN0YXRlIG9yIGRvIHNvbWV0aGluZyB3aXRoIGxpbmtlZEFkZHJlc3NcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbGlua2luZyBhZGRyZXNzOicsIGVycik7XG4gICAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nTGlua0FkZHJlc3MoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbbW9uZXJpdW0sIGlzQXV0aG9yaXplZCwgcHJvZmlsZV1cbiAgKTtcblxuICAvL1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgYXV0aG9yaXplLFxuICAgICAgICBpc0F1dGhvcml6ZWQsXG4gICAgICAgIHByb2ZpbGUsXG4gICAgICAgIGJhbGFuY2VzLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBsb2FkaW5nUGxhY2VPcmRlcixcbiAgICAgICAgbG9hZGluZ0xpbmtBZGRyZXNzLFxuICAgICAgICBsb2FkaW5nQmFsYW5jZXMsXG4gICAgICAgIGdldEJhbGFuY2VzLFxuICAgICAgICBsaW5rQWRkcmVzcyxcbiAgICAgICAgcGxhY2VPcmRlcixcbiAgICAgICAgb3JkZXJzLFxuICAgICAgICB0b2tlbnMsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBsb2FkaW5nQXV0aCxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvTW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7XG4gIEJhbGFuY2VzLFxuICBMaW5rQWRkcmVzcyxcbiAgTmV3T3JkZXIsXG4gIE9yZGVyLFxuICBQcm9maWxlLFxuICBUb2tlbixcbn0gZnJvbSAnQG1vbmVyaXVtL3Nkayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9uZXJpdW1Db250ZXh0VmFsdWUge1xuICBhdXRob3JpemU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGlzQXV0aG9yaXplZDogYm9vbGVhbjtcbiAgcHJvZmlsZTogUHJvZmlsZSB8IG51bGw7XG4gIGJhbGFuY2VzOiBCYWxhbmNlc1tdIHwgbnVsbDtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgbG9hZGluZ1BsYWNlT3JkZXI6IGJvb2xlYW47XG4gIGxvYWRpbmdMaW5rQWRkcmVzczogYm9vbGVhbjtcbiAgbG9hZGluZ0JhbGFuY2VzOiBib29sZWFuO1xuICBnZXRCYWxhbmNlczogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgbGlua0FkZHJlc3M6IChhZGRyZXNzRGV0YWlsczogTGlua0FkZHJlc3MpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHBsYWNlT3JkZXI6IChcbiAgICBvcmRlckRldGFpbHM6IE5ld09yZGVyLFxuICAgIHN1cHBvcnRpbmdEb2N1bWVudD86IEZpbGVcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvcmRlcnM6IE9yZGVyW107XG4gIHRva2VuczogVG9rZW5bXTtcbiAgZXJyb3I6IHVua25vd247XG4gIC8qKiBJcyBzdGlsbCBjaGVja2luZyBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgc2Vzc2lvbiAqL1xuICBsb2FkaW5nQXV0aDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1vbmVyaXVtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8TW9uZXJpdW1Db250ZXh0VmFsdWUgfCBudWxsPihudWxsKTtcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IE1vbmVyaXVtQ29udGV4dCwgTW9uZXJpdW1Db250ZXh0VmFsdWUgfSBmcm9tICcuL2NvbnRleHQnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTW9uZXJpdW0oKTogTW9uZXJpdW1Db250ZXh0VmFsdWUge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VNb25lcml1bSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuIl19