-
+
\ No newline at end of file
diff --git a/404.html b/404.html
index 5431f1c..fbb3c98 100644
--- a/404.html
+++ b/404.html
@@ -1,6 +1,6 @@
-
-
+
\ No newline at end of file
diff --git a/_payload.js b/_payload.js
index e889979..83ba74b 100644
--- a/_payload.js
+++ b/_payload.js
@@ -1 +1 @@
-export default {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}]},prerenderedAt:1667989024991}
\ No newline at end of file
+export default {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}]},prerenderedAt:1668068039116}
\ No newline at end of file
diff --git a/api/_content/cache.json b/api/_content/cache.json
index 3beba1c..74ee02d 100644
--- a/api/_content/cache.json
+++ b/api/_content/cache.json
@@ -1 +1 @@
-{"generatedAt":1667989031507,"generateTime":70,"contents":[{"_path":"/blockchain/common-typescript-examples","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Common Typescript Examples","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// URL of your node"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://...'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-52c610"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ecc854"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-732e69"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-ecc854"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b6c97"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// first we need to authorize"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// then we can get wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getCurrentAddressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getTransactionCount"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" gasLimit: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" nonce: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"EthUtil"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"Transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"sign"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"serialize"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"this"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"`0x${"}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-00f7a0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-00f7a0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'hex'"}]},{"type":"element","tag":"span","props":{"class":"ct-00f7a0"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"estimateFee"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"asciiToHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"fromWei"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-316544"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"())"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"multiply"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-316544"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"()))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'accountsChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'chainChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"handler"}]},{"type":"element","tag":"span","props":{"class":"ct-50efd0"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'wallet_watchAsset'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" params: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" type: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ERC20'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" options: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" address: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'0xb60e8dd61c5d32be8058bb8eb970870f07233155'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'FOO'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ccdd"},"children":[{"type":"text","value":"18"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" image: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://foo.io/token-image.svg'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-52c610"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-732e69"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'FOO successfully added to wallet!'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-316544"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'Something went wrong.'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getChainID"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'eth_chainId'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'wallet_switchEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" params: [{ chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }], "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"switchError"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// This error code indicates that the chain has not been added to MetaMask."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ccdd"},"children":[{"type":"text","value":"4902"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'wallet_addEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" params: [{ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" chainName: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'Ropsten Test Network'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" nativeCurrency: { "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" name: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ccdd"},"children":[{"type":"text","value":"18"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" rpcUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"], "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" blockExplorerUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://ropsten.etherscan.io'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }] ,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"addError"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// handle \"add\" error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// handle other \"switch\" errors"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e2ccdd{color:#79C0FF}.ct-50efd0{color:#C9D1D9}.ct-316544{color:#79C0FF}.ct-00f7a0{color:#A5D6FF}.ct-3b6c97{color:#79C0FF}.ct-732e69{color:#FFA657}.ct-ecc854{color:#FF7B72}.ct-52c610{color:#D2A8FF}.ct-a561b5{color:#C9D1D9}.ct-e4f0fc{color:#FF7B72}.ct-803092{color:#D2A8FF}.ct-7d50a2{color:#79C0FF}.ct-cc666e{color:#FF7B72}.ct-c661a8{color:#8B949E}.ct-18eb89{color:#A5D6FF}.ct-95374b{color:#C9D1D9}.ct-0de14f{color:#C9D1D9}.ct-5b3668{color:#FF7B72}.light .ct-5b3668{color:#859900}.light .ct-0de14f{color:#657B83}.light .ct-95374b{color:#268BD2}.light .ct-18eb89{color:#2AA198}.light .ct-c661a8{color:#93A1A1}.light .ct-cc666e{color:#073642}.light .ct-7d50a2{color:#268BD2}.light .ct-803092{color:#268BD2}.light .ct-e4f0fc{color:#073642}.light .ct-a561b5{color:#657B83}.light .ct-52c610{color:#268BD2}.light .ct-ecc854{color:#859900}.light .ct-732e69{color:#657B83}.light .ct-3b6c97{color:#859900}.light .ct-00f7a0{color:#657B83}.light .ct-316544{color:#859900}.light .ct-50efd0{color:#859900}.light .ct-e2ccdd{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"connecting-to-node","depth":2,"text":"Connecting to node"},{"id":"getting-wallet-balance","depth":2,"text":"Getting wallet balance"},{"id":"getting-wallet-address","depth":2,"text":"Getting wallet address"},{"id":"sending-transaction","depth":2,"text":"Sending transaction"},{"id":"estimating-transaction-fee","depth":2,"text":"Estimating transaction FEE"},{"id":"subscribing-to-wallet-address-change","depth":2,"text":"Subscribing to wallet address change"},{"id":"watching-network-change","depth":2,"text":"Watching network change"},{"id":"adding-custom-token-to-wallet","depth":2,"text":"Adding custom token to wallet"},{"id":"changing-network-to-custom","depth":2,"text":"Changing network to custom"}]}},"_type":"markdown","_id":"content:Blockchain:Common typescript examples.md","_source":"content","_file":"Blockchain/Common typescript examples.md","_extension":"md"},{"_path":"/blockchain/smart-contracts","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Smart Contracts","description":"For common functions see Common typescript examples.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'web3-eth-contract'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"abi"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"object"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a12cef"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cffc8d"},"children":[{"type":"text","value":"JSON"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a12cef"},"children":[{"type":"text","value":"parse"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// ABI of contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// address for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ({}) "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// Calling write method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// authorizing with Metamask"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// getting wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// calling \"store\" store method for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// payload should include `from` address, that matches"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// current user's wallet"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'Parameter'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"send"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" from: "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b684a9"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// calling read method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// this method can return data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"retrieve"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b684a9"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// ABI контракта"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// contract address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// account's private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// write-methods requires private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"privateKeyToAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" to: "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"encodeABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" gas: "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"({ from: "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"signTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"rawTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"requests"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"balanceOf"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getStaked"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"call"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"any"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"[]) "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getWeb3NoAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"BatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"map"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"add"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"execute"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b684a9"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"all"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-533c8a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'YOUR_RPC_ENDPOINT_HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'YOUR ABI HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'YOUR CONTRACT ADDRESS HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"referralProgramContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"events"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"RegisterUser"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-ba2d26"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"`| UserRegistered | events | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"boolean"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5f6d82"},"children":[{"type":"text","value":"RegisterUserResponseInterface"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"`| ONCE | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-ba2d26"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5f6d82"},"children":[{"type":"text","value":"ErrnoException"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" value: [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"events"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"str"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" address: ["}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'address-1'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'address-2'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"//Only get events from specific addresses"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" topics: [] "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"//What topics to subscribe to"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'logs'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"nr"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"//example options(optional)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// only get events where transfer value was 1000 or 1337"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" value: ["}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'1000'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'1337'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// number | \"earliest\" | \"pending\" | \"latest\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" toBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'latest'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getPastEvents"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'Transfer'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"results"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-5f6d82{color:#FFA657}.ct-ba2d26{color:#A5D6FF}.ct-533c8a{color:#79C0FF}.ct-b684a9{color:#79C0FF}.ct-953a98{color:#79C0FF}.ct-af446c{color:#79C0FF}.ct-26a53b{color:#FF7B72}.ct-e665d0{color:#8B949E}.ct-7ab598{color:#FFA657}.ct-b8e2c1{color:#D2A8FF}.ct-cffc8d{color:#79C0FF}.ct-a12cef{color:#79C0FF}.ct-ea53a5{color:#79C0FF}.ct-9f43a9{color:#FFA657}.ct-dc5090{color:#FF7B72}.ct-fbab5e{color:#D2A8FF}.ct-15a02b{color:#C9D1D9}.ct-937517{color:#FF7B72}.ct-5650de{color:#A5D6FF}.ct-5fb697{color:#C9D1D9}.ct-66597a{color:#C9D1D9}.ct-84ece2{color:#FF7B72}.light .ct-84ece2{color:#859900}.light .ct-66597a{color:#657B83}.light .ct-5fb697{color:#268BD2}.light .ct-5650de{color:#2AA198}.light .ct-937517{color:#073642}.light .ct-15a02b{color:#657B83}.light .ct-fbab5e{color:#268BD2}.light .ct-dc5090{color:#859900}.light .ct-9f43a9{color:#657B83}.light .ct-ea53a5{color:#859900}.light .ct-a12cef{color:#268BD2}.light .ct-cffc8d{color:#657B83}.light .ct-b8e2c1{color:#268BD2}.light .ct-7ab598{color:#657B83}.light .ct-e665d0{color:#93A1A1}.light .ct-26a53b{color:#073642}.light .ct-af446c{color:#268BD2}.light .ct-953a98{color:#D33682}.light .ct-b684a9{color:#859900}.light .ct-533c8a{color:#B58900}.light .ct-ba2d26{color:#2AA198}.light .ct-5f6d82{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"getting-smart-contract-instance","depth":2,"text":"Getting smart contract instance"},{"id":"executing-contract-method","depth":2,"text":"Executing contract method","children":[{"id":"example-for-metamask-without-private-key","depth":3,"text":"Example for #Metamask without private key"},{"id":"nodejs-and-react-native-example","depth":3,"text":"Node.js and React Native example"},{"id":"calling-a-batch-of-contracts-methods","depth":3,"text":"Calling a batch of contract's methods"}]},{"id":"subscribing-to-smart-contract-events","depth":2,"text":"Subscribing to smart contract events","children":[{"id":"by-accessing-contractevents","depth":3,"text":"By accessing contract.events"},{"id":"with-filtering","depth":3,"text":"With filtering"},{"id":"common-subscribe-method","depth":3,"text":"Common Subscribe method"},{"id":"getting-event-history","depth":3,"text":"Getting event history"}]}]}},"_type":"markdown","_id":"content:Blockchain:Smart contracts.md","_source":"content","_file":"Blockchain/Smart contracts.md","_extension":"md"},{"_path":"/css/automatic-grid-like-masonry-with-pure-css","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Automatic Grid Like Masonry With Pure CSS","description":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04cdd5"},"children":[{"type":"text","value":"$cell: "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"250"}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04cdd5"},"children":[{"type":"text","value":"$gap: "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"20"}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".grid"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"display"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-3cd20c"},"children":[{"type":"text","value":"grid"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-template-columns"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-621784"},"children":[{"type":"text","value":"repeat"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"auto-fit"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-621784"},"children":[{"type":"text","value":"minmax"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"$cell"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-80bfbe"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-3451a2"},"children":[{"type":"text","value":"fr"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-auto-rows"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"256"}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-auto-flow"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-3cd20c"},"children":[{"type":"text","value":"row"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cd20c"},"children":[{"type":"text","value":"dense"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-column-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-row-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".h-2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// takes 2 columns"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-column-end"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".v-2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// takes 2 rows"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-row-end"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".full-width"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// height: 1 row"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".top-right"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// height here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"-2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// width here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-d3fe3c{color:#8B949E}.ct-8f9e10{color:#79C0FF}.ct-3451a2{color:#FF7B72}.ct-80bfbe{color:#79C0FF}.ct-815e2d{color:#FFA657}.ct-621784{color:#79C0FF}.ct-3cd20c{color:#79C0FF}.ct-60b55e{color:#79C0FF}.ct-4a8b8f{color:#C9D1D9}.ct-20d114{color:#79C0FF}.ct-a9e8e9{color:#C9D1D9}.ct-ecfd74{color:#FF7B72}.ct-99ada1{color:#79C0FF}.ct-04cdd5{color:#FFA657}.light .ct-04cdd5{color:#657B83}.light .ct-99ada1{color:#D33682}.light .ct-ecfd74{color:#859900}.light .ct-a9e8e9{color:#657B83}.light .ct-20d114{color:#93A1A1}.light .ct-4a8b8f{color:#657B83}.light .ct-60b55e{color:#859900}.light .ct-3cd20c{color:#657B83}.light .ct-621784{color:#268BD2}.light .ct-815e2d{color:#657B83}.light .ct-80bfbe{color:#D33682}.light .ct-3451a2{color:#859900}.light .ct-8f9e10{color:#859900}.light .ct-d3fe3c{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"basic-elements-with-double-height-or-width","depth":3,"text":"Basic elements with double height or width"},{"id":"header-that-fills-all-columns","depth":3,"text":"Header, that fills all columns"},{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner","depth":3,"text":"Stamp element, that takes 3 rows in the top right corner"}]}},"_type":"markdown","_id":"content:CSS:Automatic Grid like Masonry with pure CSS.md","_source":"content","_file":"CSS/Automatic Grid like Masonry with pure CSS.md","_extension":"md"},{"_path":"/css/sass-nth-child-iterate-mixin","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Sass Nth Child Iterate Mixin","description":"Say, we need to color n items by specific colors, which depend on its position. #SCSS supports iteration over lists for that purposes:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-78d561"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85c0d9"},"children":[{"type":"text","value":"color-per-child"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-78d561"},"children":[{"type":"text","value":"@each"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-78d561"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad16d4"},"children":[{"type":"text","value":"&"}]},{"type":"element","tag":"span","props":{"class":"ct-ff2dca"},"children":[{"type":"text","value":":nth-child"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"#{"}]},{"type":"element","tag":"span","props":{"class":"ct-0590fc"},"children":[{"type":"text","value":"index"}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"(($colors), ($color))}"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5f6e85"},"children":[{"type":"text","value":"color"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9f574b"},"children":[{"type":"text","value":".item"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f005ac"},"children":[{"type":"text","value":"@include"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3e505e"},"children":[{"type":"text","value":"color_per_child"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#ded187"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#dbde87"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#bade87"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#9cde87"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#87deaa"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b03ccc{color:#79C0FF}.ct-3e505e{color:#D2A8FF}.ct-f005ac{color:#FF7B72}.ct-9f574b{color:#79C0FF}.ct-59c4a2{color:#C9D1D9}.ct-5f6e85{color:#79C0FF}.ct-0590fc{color:#79C0FF}.ct-ff2dca{color:#79C0FF}.ct-ad16d4{color:#7EE787}.ct-2270c7{color:#FFA657}.ct-85c0d9{color:#D2A8FF}.ct-4a01b1{color:#C9D1D9}.ct-78d561{color:#FF7B72}.light .ct-78d561{color:#859900}.light .ct-4a01b1{color:#657B83}.light .ct-85c0d9{color:#268BD2}.light .ct-2270c7{color:#657B83}.light .ct-ad16d4{color:#268BD2}.light .ct-ff2dca{color:#93A1A1}.light .ct-0590fc{color:#268BD2}.light .ct-5f6e85{color:#859900}.light .ct-59c4a2{color:#657B83}.light .ct-9f574b{color:#93A1A1}.light .ct-f005ac{color:#859900}.light .ct-3e505e{color:#268BD2}.light .ct-b03ccc{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Sass nth-child iterate mixin.md","_source":"content","_file":"CSS/Sass nth-child iterate mixin.md","_extension":"md"},{"_path":"/css/test-if-browser-supports-css-rules","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Test If Browser Supports CSS Rules","description":"To test if browser supports some #CSS rules, do following:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-747a85"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-df79b9"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1c9a55"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8efaba"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":": blur(5px);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-46d403"},"children":[{"type":"text","value":"can_backdrop"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-347d2b"},"children":[{"type":"text","value":"-webkit-backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-6b2723"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-f79b21"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-73c01d"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":")) "}]},{"type":"element","tag":"span","props":{"class":"ct-625845"},"children":[{"type":"text","value":"or"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-747a85"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-df79b9"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1c9a55"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@content"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-625845{color:#79C0FF}.ct-73c01d{color:#FF7B72}.ct-f79b21{color:#79C0FF}.ct-6b2723{color:#79C0FF}.ct-347d2b{color:#79C0FF}.ct-d590c2{color:#C9D1D9}.ct-46d403{color:#D2A8FF}.ct-8efaba{color:#7EE787}.ct-1c9a55{color:#79C0FF}.ct-df79b9{color:#79C0FF}.ct-747a85{color:#79C0FF}.ct-00ce74{color:#C9D1D9}.ct-ca30ca{color:#FF7B72}.light .ct-ca30ca{color:#859900}.light .ct-00ce74{color:#657B83}.light .ct-747a85{color:#859900}.light .ct-df79b9{color:#268BD2}.light .ct-1c9a55{color:#D33682}.light .ct-8efaba{color:#268BD2}.light .ct-46d403{color:#268BD2}.light .ct-d590c2{color:#657B83}.light .ct-347d2b{color:#859900}.light .ct-6b2723{color:#268BD2}.light .ct-f79b21{color:#D33682}.light .ct-73c01d{color:#859900}.light .ct-625845{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Test if browser supports CSS rules.md","_source":"content","_file":"CSS/Test if browser supports CSS rules.md","_extension":"md"},{"_path":"/docker/building-static-pages-with-docker","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Building Static Pages With Docker","description":"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:"}]},{"type":"element","tag":"code","props":{"code":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html\n","language":"Dockerfile"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:"}]},{"type":"element","tag":"code","props":{"code":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html\n","language":"Dockerfile"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html"}]}]}]}]}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Building static pages with Docker.md","_source":"content","_file":"Docker/Building static pages with Docker.md","_extension":"md"},{"_path":"/docker/drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Drone Ci","description":"Can be used with Private docker registry to deploy things using #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"drone repo update $1 --trusted=true && drone repo info $1\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"build-master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"plugins/docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"when"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"branch"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"dockerfile"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"Dockerfile"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"tag"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"${DRONE_BRANCH}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"global_docker_login"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"global_docker_password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"global_docker_registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"repo"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"docker_repo"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"drone"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone/drone:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_ID=secret_id"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_SECRET=client_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_SERVER_HOST=drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_USER_CREATE=\"username:user,admin:true\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_SERVER_PROTO=https"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_TLS_AUTOCERT=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_GIT_ALWAYS_AUTH=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_LOGS_DEBUG=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_LOGS_TRACE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"./data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"8090:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"drone-agent"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone__agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone/agent:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_RPC_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-99ea24"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" DRONE_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-99ea24"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" DRONE_TOKEN=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":"drone info"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":"drone repo update "}]},{"type":"element","tag":"span","props":{"class":"ct-284309"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-444ee1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" --trusted=true "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5f5f"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" drone repo info "}]},{"type":"element","tag":"span","props":{"class":"ct-284309"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-444ee1"},"children":[{"type":"text","value":"1"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-bd5f5f{color:#FF7B72}.ct-444ee1{color:#C9D1D9}.ct-284309{color:#C9D1D9}.ct-99ea24{color:#FF7B72}.ct-7193cf{color:#A5D6FF}.ct-da43a2{color:#C9D1D9}.ct-fb65a1{color:#7EE787}.light .ct-fb65a1{color:#268BD2}.light .ct-da43a2{color:#657B83}.light .ct-7193cf{color:#2AA198}.light .ct-99ea24{color:#073642}.light .ct-284309{color:#859900}.light .ct-444ee1{color:#268BD2}.light .ct-bd5f5f{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"pushing-to-private-docker_registry","depth":2,"text":"Pushing to private docker_registry"},{"id":"docker-compose-file-for-drone-ci","depth":2,"text":"Docker-compose file for drone-ci"},{"id":"caching-builds","depth":2,"text":"Caching builds"},{"id":"get-user-info","depth":2,"text":"Get user info"},{"id":"mark-user-as-trusted","depth":2,"text":"Mark user as trusted"}]}},"_type":"markdown","_id":"content:Docker:Drone-ci.md","_source":"content","_file":"Docker/Drone-ci.md","_extension":"md"},{"_path":"/docker/github-pages-with-drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Github Pages With Drone Ci","description":"To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"node:16"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"commands"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"yarn"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"yarn generate"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"rm -rf ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"mv ./.output/public ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"touch ./docs/.nojekyll"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"publish"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"plugins/gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"target_branch"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"github_username"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"github_token"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-09ba81{color:#A5D6FF}.ct-1e1301{color:#C9D1D9}.ct-a3e2c3{color:#7EE787}.light .ct-a3e2c3{color:#268BD2}.light .ct-1e1301{color:#657B83}.light .ct-09ba81{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"additional-reading","depth":2,"text":"Additional reading"}]}},"_type":"markdown","_id":"content:Docker:Github pages with drone-ci.md","_source":"content","_file":"Docker/Github pages with drone-ci.md","_extension":"md"},{"_path":"/docker/private-docker-registry","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Private Docker Registry","description":"Suitable to work with Drone-ci for hosting private #docker images.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --entrypoint htpasswd registry:2 \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -Bbn user mypassword "}]},{"type":"element","tag":"span","props":{"class":"ct-9a510f"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" auth/registry.password"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"docker__registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"registry:2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"5000:5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_AUTH=htpasswd"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_REALM=Registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_HTTP_SECRET=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_STORAGE_DELETE_ENABLED=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"./registry/auth:/auth"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"./registry/data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"ui"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"docker__ui"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"parabuzzle/craneoperator:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"80:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_HOST=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_PORT=5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_PROTOCOL=http"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"ALLOW_REGISTRY_LOGIN=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_ALLOW_DELETE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"USERNAME=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"PASSWORD=password"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-612ed3"},"children":[{"type":"text","value":"# Try this first"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --rm anoxis/registry-cli \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -r https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -l user:password \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --delete \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --num 2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-612ed3"},"children":[{"type":"text","value":"# Then this "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":"docker run -it \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -v /path/to/registry/data:/registry \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -e REGISTRY_URL=https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -e DRY_RUN="}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -e REGISTRY_AUTH="}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"\"user:password\""}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" mortensrasmussen/docker-registry-manifest-cleanup"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-612ed3{color:#8B949E}.ct-eee4f4{color:#A5D6FF}.ct-1c98f9{color:#7EE787}.ct-9a510f{color:#FF7B72}.ct-2b1875{color:#C9D1D9}.light .ct-2b1875{color:#657B83}.light .ct-9a510f{color:#859900}.light .ct-1c98f9{color:#268BD2}.light .ct-eee4f4{color:#2AA198}.light .ct-612ed3{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"sample-docker-compose-for-custom-docker-registry","depth":2,"text":"Sample docker-compose for custom docker registry"},{"id":"squash-layers-on-registry","depth":2,"text":"Squash layers on registry"}]}},"_type":"markdown","_id":"content:Docker:Private docker registry.md","_source":"content","_file":"Docker/Private docker registry.md","_extension":"md"},{"_path":"/docker/refresh-containers-on-pull","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Containers On Pull","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"watchtower"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"docker__watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"v2tec/watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"/home/user/.docker/config.json:/config.json"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"--interval 60 image_1 image_2"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-572788{color:#A5D6FF}.ct-d8ca28{color:#C9D1D9}.ct-ff98de{color:#7EE787}.light .ct-ff98de{color:#268BD2}.light .ct-d8ca28{color:#657B83}.light .ct-572788{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-watchtower","depth":2,"text":"Setting up watchtower"}]}},"_type":"markdown","_id":"content:Docker:Refresh containers on pull.md","_source":"content","_file":"Docker/Refresh containers on pull.md","_extension":"md"},{"_path":"/docker/seed-dump-inside-docker","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Seed Dump Inside Docker","description":"If you need to seed .sql dump in #docker container, just run this command. Also you can try to rsync file with SSH to get it from remote host.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bd9672"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bd9672"},"children":[{"type":"text","value":"# usage: ./script.sh \"/path/to/dump.sql\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bd9672"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"DUMP_PATH="}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"CONTAINER="}]},{"type":"element","tag":"span","props":{"class":"ct-ab3f0c"},"children":[{"type":"text","value":"\"db\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"USER=root"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"PASSWORD=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"DB=database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"cat "}]},{"type":"element","tag":"span","props":{"class":"ct-ab3f0c"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"DUMP_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-ab3f0c"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fdd24"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-862a36"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" -i "}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"CONTAINER"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" mysql -u"}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" -p"}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"DB"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-862a36{color:#79C0FF}.ct-1fdd24{color:#FF7B72}.ct-ab3f0c{color:#A5D6FF}.ct-8376c3{color:#C9D1D9}.ct-5a1c83{color:#C9D1D9}.ct-3ec785{color:#C9D1D9}.ct-bd9672{color:#8B949E}.light .ct-bd9672{color:#93A1A1}.light .ct-3ec785{color:#657B83}.light .ct-5a1c83{color:#859900}.light .ct-8376c3{color:#268BD2}.light .ct-ab3f0c{color:#2AA198}.light .ct-1fdd24{color:#859900}.light .ct-862a36{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Seed dump inside docker.md","_source":"content","_file":"Docker/Seed dump inside docker.md","_extension":"md"},{"_path":"/docker/wait-for-mysql","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Mysql","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8507"},"children":[{"type":"text","value":"# Waits for mysql to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70b749"},"children":[{"type":"text","value":"wait_for_mysql"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" query="}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\"SELECT count(*) FROM users\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-4a8507"},"children":[{"type":"text","value":"# 3 minutes limit"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-e57ca8"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" mysql --user="}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" -e "}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-26517c"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e57ca8"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\"[Error] can't properly query MySQL after "}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e57ca8"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8507"},"children":[{"type":"text","value":"# usage: wait_for_mysql miin-mysql-dev root password database"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-26517c{color:#79C0FF}.ct-c3bb0d{color:#C9D1D9}.ct-e55956{color:#C9D1D9}.ct-e57ca8{color:#79C0FF}.ct-1fbf9b{color:#FF7B72}.ct-a50f05{color:#A5D6FF}.ct-5ccace{color:#C9D1D9}.ct-70b749{color:#D2A8FF}.ct-4a8507{color:#8B949E}.light .ct-4a8507{color:#93A1A1}.light .ct-70b749{color:#268BD2}.light .ct-5ccace{color:#657B83}.light .ct-a50f05{color:#2AA198}.light .ct-1fbf9b{color:#859900}.light .ct-e57ca8{color:#268BD2}.light .ct-e55956{color:#859900}.light .ct-c3bb0d{color:#268BD2}.light .ct-26517c{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for mysql.md","_source":"content","_file":"Docker/Wait for mysql.md","_extension":"md"},{"_path":"/docker/wait-for-redis","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Redis","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-63ea10"},"children":[{"type":"text","value":"# Waits for redis to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9439e0"},"children":[{"type":"text","value":"wait_for_redis"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-63ea10"},"children":[{"type":"text","value":"# 3 minutes"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-db192f"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" redis-cli -h localhost -p 6379 -a "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" ping "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\"PONG\""}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":"/dev/null "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"2>&1;"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-203c5d"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db192f"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\"[Error] can't properly ping Redis container after "}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db192f"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-63ea10"},"children":[{"type":"text","value":"# usage: wait_for_redis miin-redis-dev password"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-203c5d{color:#79C0FF}.ct-0fe3ba{color:#C9D1D9}.ct-a015fb{color:#C9D1D9}.ct-95138e{color:#A5D6FF}.ct-db192f{color:#79C0FF}.ct-222421{color:#FF7B72}.ct-26852d{color:#C9D1D9}.ct-9439e0{color:#D2A8FF}.ct-63ea10{color:#8B949E}.light .ct-63ea10{color:#93A1A1}.light .ct-9439e0{color:#268BD2}.light .ct-26852d{color:#657B83}.light .ct-222421{color:#859900}.light .ct-db192f{color:#268BD2}.light .ct-95138e{color:#2AA198}.light .ct-a015fb{color:#859900}.light .ct-0fe3ba{color:#268BD2}.light .ct-203c5d{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for redis.md","_source":"content","_file":"Docker/Wait for redis.md","_extension":"md"},{"_path":"/frontend/react-native/oauth2-login","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"OAuth2 Login","description":"Use #oauth2 login with React-Native","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-a522f0"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'react-native-app-auth'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6090e9"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f2d25a"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" issuer: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'https://accounts.google.com'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}.apps.googleusercontent.com`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`com.yourapp:/oauth2redirect/google`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'openid'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'profile'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-04bda7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"});"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-6090e9"},"children":[{"type":"text","value":"// better hide it somehow"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'com.yourapp'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f2d25a"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" serviceConfiguration: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" authorizationEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/authorize?response_type=code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}&redirect_uri=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6090e9"},"children":[{"type":"text","value":"// TODO: replace it with your own backend to secure client_secret:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" tokenEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}&client_secret=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'login:info'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'login:avatar'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-04bda7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f2d25a"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a522f0"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a522f0"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-04bda7{color:#79C0FF}.ct-f2d25a{color:#D2A8FF}.ct-6090e9{color:#8B949E}.ct-eff6f2{color:#79C0FF}.ct-6fad42{color:#FF7B72}.ct-a5991f{color:#A5D6FF}.ct-a522f0{color:#C9D1D9}.ct-b99985{color:#C9D1D9}.ct-73c90c{color:#FF7B72}.light .ct-73c90c{color:#859900}.light .ct-b99985{color:#657B83}.light .ct-a522f0{color:#268BD2}.light .ct-a5991f{color:#2AA198}.light .ct-6fad42{color:#073642}.light .ct-eff6f2{color:#268BD2}.light .ct-6090e9{color:#93A1A1}.light .ct-f2d25a{color:#268BD2}.light .ct-04bda7{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"common-oauth2-providers","depth":2,"text":"Common OAuth2 providers","children":[{"id":"example-for-google","depth":3,"text":"Example for #Google"},{"id":"example-for-yandex","depth":3,"text":"Example for #Yandex"}]},{"id":"apple-id-login","depth":2,"text":"Apple ID login"}]}},"_type":"markdown","_id":"content:Frontend:React Native:OAuth2 login.md","_source":"content","_file":"Frontend/React Native/OAuth2 login.md","_extension":"md"},{"_path":"/frontend/react-native/preserve-flatlist-scroll-position-in-react-native","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Preserve FlatList Scroll Position In React Native","description":"Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6f3ac"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-12be29"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"; }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84cdd7"},"children":[{"type":"text","value":"SomeList"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" ({ "}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// set it to `true` before interaction and back to `false` right after"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"NativeSyntheticEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"NativeScrollEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":">) "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"nativeEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"contentOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"y"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85ddd9"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84cdd7"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a8bed"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a8bed"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"scrollToOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" offset: "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" animated: "}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// onInteraction wraps interaction to preserve scroll position"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"onInteraction"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"500"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"setSelectedSubThemes"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-0a347b"},"children":[{"type":"text","value":"FlatList"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// ...required FlatList options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"/>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-0a347b{color:#FFA657}.ct-7a8bed{color:#79C0FF}.ct-85ddd9{color:#79C0FF}.ct-79eccc{color:#C9D1D9}.ct-4ce872{color:#79C0FF}.ct-51c814{color:#79C0FF}.ct-286615{color:#79C0FF}.ct-239076{color:#FFA657}.ct-cb4a15{color:#FFA657}.ct-97ed5c{color:#FF7B72}.ct-84cdd7{color:#D2A8FF}.ct-5370b0{color:#C9D1D9}.ct-1287c4{color:#FF7B72}.ct-12be29{color:#79C0FF}.ct-6a2abe{color:#D2A8FF}.ct-fd34a7{color:#FF7B72}.ct-d6f3ac{color:#FFA657}.ct-b7cc7c{color:#C9D1D9}.ct-158371{color:#FF7B72}.ct-ef8184{color:#8B949E}.light .ct-ef8184{color:#93A1A1}.light .ct-158371{color:#073642}.light .ct-b7cc7c{color:#657B83}.light .ct-d6f3ac{color:#268BD2}.light .ct-fd34a7{color:#859900}.light .ct-6a2abe{color:#268BD2}.light .ct-12be29{color:#859900}.light .ct-1287c4{color:#073642}.light .ct-5370b0{color:#657B83}.light .ct-84cdd7{color:#268BD2}.light .ct-97ed5c{color:#859900}.light .ct-cb4a15{color:#268BD2}.light .ct-239076{color:#657B83}.light .ct-286615{color:#268BD2}.light .ct-51c814{color:#D33682}.light .ct-4ce872{color:#B58900}.light .ct-79eccc{color:#268BD2}.light .ct-85ddd9{color:#268BD2}.light .ct-7a8bed{color:#859900}.light .ct-0a347b{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React Native:Preserve FlatList scroll position in React Native.md","_source":"content","_file":"Frontend/React Native/Preserve FlatList scroll position in React Native.md","_extension":"md"},{"_path":"/frontend/react-native/useful-comands","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Useful Comands","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"adb logcat com.application:I \"*:S\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"keytool -printcert -jarfile \"$1\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"adb logcat com.application:I "}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\"*:S\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"keytool -printcert -jarfile "}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"npx react-native bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --platform android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --dev "}]},{"type":"element","tag":"span","props":{"class":"ct-b926df"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --entry-file index.js \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --bundle-output android/app/src/main/assets/index.android.bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --assets-dest android/app/src/main/res/"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b926df"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" android "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" ./gradlew assembleDebug"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a892e"},"children":[{"type":"text","value":"# do your stuff"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"./gradlew clean"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b926df"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" ./android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" ./gradlew assembleRelease \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" adb install ./app/build/outputs/apk/release/app-release.apk"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a892e"},"children":[{"type":"text","value":"# ios "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"xcrun simctl openurl booted "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a892e"},"children":[{"type":"text","value":"# android"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"adb shell am start -W -a android.intent.action.VIEW -d "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"com.application"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"PACKAGE="}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\"com.application\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"adb shell pm set-app-links --package "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"PACKAGE"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" 0 all "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" adb shell pm verify-app-links --re-verify "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"PACKAGE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8a892e{color:#8B949E}.ct-5c177d{color:#FF7B72}.ct-b926df{color:#79C0FF}.ct-6b5a48{color:#C9D1D9}.ct-7889bd{color:#C9D1D9}.ct-3e9e6a{color:#A5D6FF}.ct-bef157{color:#C9D1D9}.light .ct-bef157{color:#657B83}.light .ct-3e9e6a{color:#2AA198}.light .ct-7889bd{color:#859900}.light .ct-6b5a48{color:#268BD2}.light .ct-b926df{color:#268BD2}.light .ct-5c177d{color:#859900}.light .ct-8a892e{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"show-android-logcat","depth":2,"text":"Show android logcat"},{"id":"get-apks-sha-256","depth":2,"text":"Get .apk's SHA-256"},{"id":"assemble-debug-release-on-android","depth":2,"text":"Assemble debug release on Android"},{"id":"send-release-to-android-device","depth":2,"text":"Send release to Android device"},{"id":"deep-links","depth":2,"text":"Deep links","children":[{"id":"open-deep-links","depth":3,"text":"Open deep links"},{"id":"reverify-links-on-android","depth":3,"text":"Reverify links on Android"}]}]}},"_type":"markdown","_id":"content:Frontend:React Native:Useful comands.md","_source":"content","_file":"Frontend/React Native/Useful comands.md","_extension":"md"},{"_path":"/frontend/react/axios-refresh-token-on-react","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios Refresh Token On React","description":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"axios\""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"React"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed108b"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1dc01d"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-ff8723"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-ff8723"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afe614"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-ff8723"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afe614"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" client: "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a16956"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-a16956"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" )."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"<() "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":">(() "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-606e86"},"children":[{"type":"text","value":"// TODO: implement me"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"not implemented\""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-606e86"},"children":[{"type":"text","value":"// append `access` token to all requests"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"`Bearer ${"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-a0b720"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-606e86"},"children":[{"type":"text","value":"// refreshing interceptor"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad1994"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f5cc3b"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"Bearer \""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"{{ "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }}"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":""}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useAPI"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-f5cc3b{color:#79C0FF}.ct-ad1994{color:#79C0FF}.ct-a0b720{color:#A5D6FF}.ct-606e86{color:#8B949E}.ct-a16956{color:#FFA657}.ct-bbdc67{color:#79C0FF}.ct-408400{color:#79C0FF}.ct-758597{color:#FF7B72}.ct-16e1fa{color:#D2A8FF}.ct-afe614{color:#79C0FF}.ct-ff8723{color:#FF7B72}.ct-0eccdd{color:#FFA657}.ct-1dc01d{color:#79C0FF}.ct-ed108b{color:#FFA657}.ct-741684{color:#C9D1D9}.ct-5dfb4e{color:#FF7B72}.ct-3b53e6{color:#A5D6FF}.ct-7cb9ef{color:#C9D1D9}.ct-7d345b{color:#C9D1D9}.ct-e23f63{color:#FF7B72}.light .ct-e23f63{color:#859900}.light .ct-7d345b{color:#657B83}.light .ct-7cb9ef{color:#268BD2}.light .ct-3b53e6{color:#2AA198}.light .ct-5dfb4e{color:#073642}.light .ct-741684{color:#657B83}.light .ct-ed108b{color:#268BD2}.light .ct-1dc01d{color:#657B83}.light .ct-0eccdd{color:#657B83}.light .ct-ff8723{color:#859900}.light .ct-afe614{color:#859900}.light .ct-16e1fa{color:#268BD2}.light .ct-758597{color:#073642}.light .ct-408400{color:#859900}.light .ct-bbdc67{color:#268BD2}.light .ct-a16956{color:#268BD2}.light .ct-606e86{color:#93A1A1}.light .ct-a0b720{color:#657B83}.light .ct-ad1994{color:#D33682}.light .ct-f5cc3b{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios refresh token on React.md","_source":"content","_file":"Frontend/React/Axios refresh token on React.md","_extension":"md"},{"_path":"/frontend/react/axios-with-abortcontroller","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios With AbortController","description":"If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7ad05"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7ad05"},"children":[{"type":"text","value":"'axios'"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useGetUsers"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"());"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a7ad05"},"children":[{"type":"text","value":"\"/\""}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-484999"},"children":[{"type":"text","value":"// params and props here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" signal: "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"signal"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"data"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"abort"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-484999"},"children":[{"type":"text","value":"// controller should be rewritten or all requests will fail"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-484999{color:#8B949E}.ct-49d14d{color:#D2A8FF}.ct-a40d0a{color:#79C0FF}.ct-72e4c5{color:#FF7B72}.ct-a7ad05{color:#A5D6FF}.ct-7726fe{color:#C9D1D9}.ct-49df39{color:#C9D1D9}.ct-199340{color:#FF7B72}.light .ct-199340{color:#859900}.light .ct-49df39{color:#657B83}.light .ct-7726fe{color:#268BD2}.light .ct-a7ad05{color:#2AA198}.light .ct-72e4c5{color:#073642}.light .ct-a40d0a{color:#268BD2}.light .ct-49d14d{color:#268BD2}.light .ct-484999{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios with AbortController.md","_source":"content","_file":"Frontend/React/Axios with AbortController.md","_extension":"md"},{"_path":"/frontend/vue/adding-global-properties-to-component","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Adding Global Properties To Component","description":"The topic's fully covered in the official documentation and in Add global variable to window.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-22614b"},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5dae07"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b55f51"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dae07"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d36ee8"},"children":[{"type":"text","value":"'axios'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-074500"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-074500"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d36ee8"},"children":[{"type":"text","value":"'vue'"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-074500"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fc9c7"},"children":[{"type":"text","value":"ComponentCustomProperties"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7aaab2"},"children":[{"type":"text","value":"$translate"}]},{"type":"element","tag":"span","props":{"class":"ct-fa4db5"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-a606d0"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-fa4db5"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10a450"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-63c33d"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10a450"},"children":[{"type":"text","value":"string"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-63c33d{color:#FF7B72}.ct-10a450{color:#79C0FF}.ct-a606d0{color:#FFA657}.ct-fa4db5{color:#FF7B72}.ct-7aaab2{color:#D2A8FF}.ct-6e6f7c{color:#C9D1D9}.ct-4fc9c7{color:#FFA657}.ct-074500{color:#FF7B72}.ct-d36ee8{color:#A5D6FF}.ct-b55f51{color:#C9D1D9}.ct-7f1b4a{color:#C9D1D9}.ct-5dae07{color:#FF7B72}.ct-22614b{color:#8B949E}.light .ct-22614b{color:#93A1A1}.light .ct-5dae07{color:#859900}.light .ct-7f1b4a{color:#657B83}.light .ct-b55f51{color:#268BD2}.light .ct-d36ee8{color:#2AA198}.light .ct-074500{color:#073642}.light .ct-4fc9c7{color:#268BD2}.light .ct-6e6f7c{color:#657B83}.light .ct-7aaab2{color:#268BD2}.light .ct-fa4db5{color:#859900}.light .ct-a606d0{color:#657B83}.light .ct-10a450{color:#859900}.light .ct-63c33d{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Adding global properties to component.md","_source":"content","_file":"Frontend/Vue/Adding global properties to component.md","_extension":"md"},{"_path":"/frontend/vue/make-nuxt-handle-obsidian-highlights","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Make Nuxt Handle Obsidian Highlights","description":"By default Nuxt Content Plugin not handling highlight links. To fix that we will create Nitro plugin:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-998ff9"},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26d123"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26d123"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1ffb28"},"children":[{"type":"text","value":"defineNitroPlugin"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":"((nitroApp) "}]},{"type":"element","tag":"span","props":{"class":"ct-30d538"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ba2ca"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"nitroApp"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"hooks"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b2cb40"},"children":[{"type":"text","value":"hook"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3aff06"},"children":[{"type":"text","value":"\"content:file:beforeParse\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"_id"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b2cb40"},"children":[{"type":"text","value":"endsWith"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3aff06"},"children":[{"type":"text","value":"\".md\""}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b2cb40"},"children":[{"type":"text","value":"replace"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc7369"},"children":[{"type":"text","value":"/==("}]},{"type":"element","tag":"span","props":{"class":"ct-c58450"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"^"}]},{"type":"element","tag":"span","props":{"class":"ct-c58450"},"children":[{"type":"text","value":"=]"}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-cc7369"},"children":[{"type":"text","value":")==/"}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"gs"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3aff06"},"children":[{"type":"text","value":"`$1`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6ba2ca"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-6ba2ca"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c58450{color:#79C0FF}.ct-cc7369{color:#A5D6FF}.ct-1a5275{color:#FF7B72}.ct-3aff06{color:#A5D6FF}.ct-b2cb40{color:#D2A8FF}.ct-8c1cf5{color:#C9D1D9}.ct-4be8d0{color:#C9D1D9}.ct-6ba2ca{color:#C9D1D9}.ct-30d538{color:#FF7B72}.ct-1ffb28{color:#D2A8FF}.ct-2e1b59{color:#FFA657}.ct-26d123{color:#FF7B72}.ct-998ff9{color:#8B949E}.light .ct-998ff9{color:#93A1A1}.light .ct-26d123{color:#859900}.light .ct-2e1b59{color:#657B83}.light .ct-1ffb28{color:#268BD2}.light .ct-30d538{color:#073642}.light .ct-6ba2ca{color:#657B83}.light .ct-4be8d0{color:#657B83}.light .ct-8c1cf5{color:#268BD2}.light .ct-b2cb40{color:#268BD2}.light .ct-3aff06{color:#2AA198}.light .ct-1a5275{color:#859900}.light .ct-cc7369{color:#D30102}.light .ct-c58450{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Make Nuxt handle Obsidian highlights.md","_source":"content","_file":"Frontend/Vue/Make Nuxt handle Obsidian highlights.md","_extension":"md"},{"_path":"/git/force-git-to-use-https","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Force Git To Use HTTPS","description":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[url \"https://github.com\"]\n insteadOf = git://github.com\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":"[url "}]},{"type":"element","tag":"span","props":{"class":"ct-708ecc"},"children":[{"type":"text","value":"\"https://github.com\""}]},{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":" insteadOf "}]},{"type":"element","tag":"span","props":{"class":"ct-576914"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":" git:"}]},{"type":"element","tag":"span","props":{"class":"ct-b38bad"},"children":[{"type":"text","value":"//github.com"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b38bad{color:#8B949E}.ct-576914{color:#FF7B72}.ct-708ecc{color:#A5D6FF}.ct-04d8c6{color:#C9D1D9}.light .ct-04d8c6{color:#657B83}.light .ct-708ecc{color:#2AA198}.light .ct-576914{color:#859900}.light .ct-b38bad{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Force git to use HTTPS.md","_source":"content","_file":"Git/Force git to use HTTPS.md","_extension":"md"},{"_path":"/git/git-aliases-and-useful-commands","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Git Aliases And Useful Commands","description":"Shorthands for #git commands can be specified. Should be placed at ~/.gitconfig.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n"}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"[alias]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" flush "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" git clean"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"branches branch "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"v master "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" xargs git branch "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"D"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" lol "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" log "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"oneline "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"graph"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" l "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" lol"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" c "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" cv "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"no"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"verify "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" push"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" pf "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"force"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"with"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"lease"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" ignore"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"now "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" update"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"index "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"skip"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"worktree"}]}]}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-2f457a{color:#FF7B72}.ct-47fb06{color:#C9D1D9}.light .ct-47fb06{color:#657B83}.light .ct-2f457a{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Git aliases and useful commands.md","_source":"content","_file":"Git/Git aliases and useful commands.md","_extension":"md"},{"_path":"/graphql/apollo-client-pagination","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Apollo Client Pagination","description":"Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"listItems"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"filter"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"sort"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"limit"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"): "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"input"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-119237"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-119237"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": ["}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Item"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Int"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'@apollo/client'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" cache: "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"({ "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed0f73"},"children":[{"type":"text","value":"TypePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" Query: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" fields: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// query name"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" listItems: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// apollo will serialize and use keyArgs as unique"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// identifier in cache for every query"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// consider choosing the right fields, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// i.e. limit and offset won't work here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" keyArgs: ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'sort'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// primitive type"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'filter'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", ["}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'name'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'type'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// nested fields of `filter`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" merge: "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cd2e25"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-37dac2"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-cd2e25"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// no existing data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// If hook was called multiple times"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// merge cache and incoming data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// apply latest result for totalCount"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-37dac2{color:#D2A8FF}.ct-cd2e25{color:#FF7B72}.ct-ed0f73{color:#FFA657}.ct-c6945a{color:#8B949E}.ct-e2f93d{color:#79C0FF}.ct-30a16c{color:#FF7B72}.ct-31d304{color:#A5D6FF}.ct-08b114{color:#C9D1D9}.ct-5073b9{color:#FF7B72}.ct-119237{color:#79C0FF}.ct-a8f707{color:#79C0FF}.ct-17a66d{color:#FFA657}.ct-12c795{color:#C9D1D9}.ct-fb815a{color:#D2A8FF}.ct-178b32{color:#C9D1D9}.ct-88d46c{color:#FF7B72}.light .ct-88d46c{color:#859900}.light .ct-178b32{color:#657B83}.light .ct-fb815a{color:#268BD2}.light .ct-12c795{color:#657B83}.light .ct-17a66d{color:#657B83}.light .ct-a8f707{color:#859900}.light .ct-119237{color:#859900}.light .ct-5073b9{color:#859900}.light .ct-08b114{color:#268BD2}.light .ct-31d304{color:#2AA198}.light .ct-30a16c{color:#073642}.light .ct-e2f93d{color:#268BD2}.light .ct-c6945a{color:#93A1A1}.light .ct-ed0f73{color:#268BD2}.light .ct-cd2e25{color:#073642}.light .ct-37dac2{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Apollo Client pagination.md","_source":"content","_file":"GraphQL/Apollo Client pagination.md","_extension":"md"},{"_path":"/graphql/refresh-token-in-apollo-client","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Token In Apollo Client","description":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"createApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"authorization"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3dfd25"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"<"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" >,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"ApolloClientBase"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" link: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"ApolloLink"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"setContext"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"HttpLink"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" uri: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" fetch: "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ]),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3dfd25"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** Checks if GraphQl errors has unauthenticated error */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<{ "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"ErrorCode"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" }>)"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"isArray"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"some"}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d2617a"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// Distinguish unauthorized error here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** Detects if customFetch is sending refresh request */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"operationName"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"'RefreshToken'"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" { accessToken: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ) "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Response"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// already refreshing token, wait for it and then use refreshed token"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// or use empty authorization if refreshing failed"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3dfd25"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":">)?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// check for unauthorized errors, if not present, just return result"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ok: "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// If unauthorized, refresh token and try again"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// can't refresh token. logging out"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// success or any non-auth error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// wait for other request's refreshing query to finish, when retry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e490f1{color:#A5D6FF}.ct-885872{color:#79C0FF}.ct-d2617a{color:#79C0FF}.ct-1d23eb{color:#FFA657}.ct-d7c44a{color:#79C0FF}.ct-2d0f13{color:#C9D1D9}.ct-ac7490{color:#8B949E}.ct-3dfd25{color:#FFA657}.ct-eaf795{color:#FF7B72}.ct-20119f{color:#D2A8FF}.ct-137cc3{color:#79C0FF}.ct-84995a{color:#79C0FF}.ct-374fca{color:#FF7B72}.ct-826560{color:#FFA657}.ct-f8c9d0{color:#C9D1D9}.ct-1a32a5{color:#D2A8FF}.ct-e7fdeb{color:#FF7B72}.ct-19862f{color:#C9D1D9}.ct-6d61d7{color:#FF7B72}.light .ct-6d61d7{color:#859900}.light .ct-19862f{color:#657B83}.light .ct-e7fdeb{color:#073642}.light .ct-1a32a5{color:#268BD2}.light .ct-f8c9d0{color:#657B83}.light .ct-826560{color:#657B83}.light .ct-374fca{color:#859900}.light .ct-84995a{color:#859900}.light .ct-137cc3{color:#859900}.light .ct-20119f{color:#268BD2}.light .ct-eaf795{color:#073642}.light .ct-3dfd25{color:#268BD2}.light .ct-ac7490{color:#93A1A1}.light .ct-2d0f13{color:#268BD2}.light .ct-d7c44a{color:#B58900}.light .ct-1d23eb{color:#268BD2}.light .ct-d2617a{color:#D33682}.light .ct-885872{color:#268BD2}.light .ct-e490f1{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Refresh token in Apollo client.md","_source":"content","_file":"GraphQL/Refresh token in Apollo client.md","_extension":"md"},{"_path":"/linux/gitea-for-git-hosting","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Gitea For Git Hosting","description":"Self-hosted #git repositories with gitea and #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"gitea"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"external"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c68ffc"},"children":[{"type":"text","value":"false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"gitea/gitea:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"USER_UID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"USER_GID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"./var/lib/gitea:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"./etc/gitea:/etc/gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"/etc/timezone:/etc/timezone:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"/etc/localtime:/etc/localtime:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"\"3000:3000\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"\"222:22\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c68ffc{color:#79C0FF}.ct-f868d0{color:#A5D6FF}.ct-1d1885{color:#C9D1D9}.ct-dfedfa{color:#7EE787}.light .ct-dfedfa{color:#268BD2}.light .ct-1d1885{color:#657B83}.light .ct-f868d0{color:#2AA198}.light .ct-c68ffc{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-with-docker-compose","depth":2,"text":"Setting up with docker-compose"}]}},"_type":"markdown","_id":"content:Linux:Gitea for git hosting.md","_source":"content","_file":"Linux/Gitea for git hosting.md","_extension":"md"},{"_path":"/linux/google-photos-alternative-with-photoprism","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Google Photos Alternative With Photoprism","description":"Photo Prism is a free alternative to Google photos, can be set up with #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"'3.5'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"photoprism"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism__app"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism/photoprism:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"depends_on"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"mariadb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"2342:2342"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01eeba"},"children":[{"type":"text","value":"# HTTP port (host:container)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_ADMIN_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"password\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"https://service.url/\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_ORIGINALS_LIMIT"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-ae9c82"},"children":[{"type":"text","value":"5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_HTTP_COMPRESSION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"gzip\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DEBUG"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_PUBLIC"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_READONLY"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_EXPERIMENTAL"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CHOWN"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_WEBDAV"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_SETTINGS"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_TENSORFLOW"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_FACES"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CLASSIFICATION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DARKTABLE_PRESETS"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DETECT_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_UPLOAD_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"true\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_DRIVER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_SERVER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"mariadb:3306\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_NAME"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"photoprism\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"root\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"insecure\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_TITLE"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"PhotoPrism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_CAPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"Browse Your Life\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_DESCRIPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_AUTHOR"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"HOME"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"working_dir"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./data/originals:/photoprism/originals\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./data/imports:/photoprism/import\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./data/storage:/photoprism/storage\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"mariadb"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism__db"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"mariadb:10.6"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./database:/var/lib/mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01eeba"},"children":[{"type":"text","value":"# Important, don't remove"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_ROOT_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"insecure"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_DATABASE"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"insecure"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-ae9c82{color:#79C0FF}.ct-01eeba{color:#8B949E}.ct-bd827c{color:#A5D6FF}.ct-9246a2{color:#C9D1D9}.ct-058624{color:#7EE787}.light .ct-058624{color:#268BD2}.light .ct-9246a2{color:#657B83}.light .ct-bd827c{color:#2AA198}.light .ct-01eeba{color:#93A1A1}.light .ct-ae9c82{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"docker-compose-file-to-run-it","depth":2,"text":"Docker compose file to run it"}]}},"_type":"markdown","_id":"content:Linux:Google photos alternative with Photoprism.md","_source":"content","_file":"Linux/Google photos alternative with Photoprism.md","_extension":"md"},{"_path":"/linux/resume-or-start-screen-session","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Resume Or Start Screen Session","description":"Running this script will enter currently running screen session or will start new one.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":"( screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-ec43e4"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":" ( screen -d bash "}]},{"type":"element","tag":"span","props":{"class":"ct-ec43e4"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":" screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-ec43e4"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":" screen -SAm bash bash ) )"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-ec43e4{color:#FF7B72}.ct-db49b0{color:#C9D1D9}.light .ct-db49b0{color:#657B83}.light .ct-ec43e4{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Resume or start screen session.md","_source":"content","_file":"Linux/Resume or start screen session.md","_extension":"md"},{"_path":"/linux/rsync-file-with-ssh","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Rsync File With SSH","description":"Downloads file from #SSH with rsync and puts it in current folder.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-06a595"},"children":[{"type":"text","value":"#!/bin/bash"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"PORT=22"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"HOST=example.com"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"REMOTE_PATH=/tmp"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"REMOTE_FILE=sample.text"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"DEST_PATH=./"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"rsync -a -e "}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\"ssh -p "}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"PORT"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" -P -v \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"HOST"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"REMOTE_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"REMOTE_FILE"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"DEST_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-00a1d6{color:#C9D1D9}.ct-49822f{color:#C9D1D9}.ct-20787d{color:#A5D6FF}.ct-ff3e51{color:#C9D1D9}.ct-06a595{color:#8B949E}.light .ct-06a595{color:#93A1A1}.light .ct-ff3e51{color:#657B83}.light .ct-20787d{color:#2AA198}.light .ct-49822f{color:#859900}.light .ct-00a1d6{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Rsync file with SSH.md","_source":"content","_file":"Linux/Rsync file with SSH.md","_extension":"md"},{"_path":"/linux/setting-up-nginx","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Setting Up NGINX","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2944ef"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84152a"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# First attempt to serve request as file, then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# as directory, then fall back to displaying a 404."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b7659c"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-05c5ce"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" https://next.vault48.org"}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/fullchain.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/privkey.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2944ef"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84152a"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"http://127.0.0.1:8080;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-71145b{color:#C9D1D9}.ct-cd729e{color:#C9D1D9}.ct-05c5ce{color:#79C0FF}.ct-e9f30b{color:#FF7B72}.ct-b7659c{color:#FF7B72}.ct-84152a{color:#FFA657}.ct-2944ef{color:#FF7B72}.ct-f39477{color:#C9D1D9}.ct-1fab34{color:#8B949E}.ct-19a258{color:#C9D1D9}.ct-40c19d{color:#FF7B72}.light .ct-40c19d{color:#073642}.light .ct-19a258{color:#657B83}.light .ct-1fab34{color:#93A1A1}.light .ct-f39477{color:#657B83}.light .ct-2944ef{color:#073642}.light .ct-84152a{color:#657B83}.light .ct-b7659c{color:#657B83}.light .ct-e9f30b{color:#859900}.light .ct-05c5ce{color:#D33682}.light .ct-cd729e{color:#859900}.light .ct-71145b{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"fallback-url-for-spa-s","depth":2,"text":"Fallback url for SPA-s"},{"id":"set-up-for-uploads","depth":2,"text":"Set up for uploads"},{"id":"reverse-proxy-for-https","depth":2,"text":"Reverse proxy for https"}]}},"_type":"markdown","_id":"content:Linux:Setting up NGINX.md","_source":"content","_file":"Linux/Setting up NGINX.md","_extension":"md"},{"_path":"/linux/ssh","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"SSH","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"config-aliases-for-ssh-hosts"},"children":[{"type":"text","value":"Config aliases for #SSH hosts"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"#SSH config can be used to made aliases for different hosts. Should be put at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.ssh/config"}]},{"type":"text","value":". To simply call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ssh router"}]},{"type":"text","value":" without parameters, use this:"}]},{"type":"element","tag":"code","props":{"code":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"config-aliases-for-ssh-hosts"},"children":[{"type":"text","value":"Config aliases for #SSH hosts"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"#SSH config can be used to made aliases for different hosts. Should be put at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.ssh/config"}]},{"type":"text","value":". To simply call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ssh router"}]},{"type":"text","value":" without parameters, use this:"}]},{"type":"element","tag":"code","props":{"code":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522"}]}]}]}]}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"config-aliases-for-ssh-hosts","depth":2,"text":"Config aliases for #SSH hosts"}]}},"_type":"markdown","_id":"content:Linux:SSH.md","_source":"content","_file":"Linux/SSH.md","_extension":"md"},{"_path":"/obsidian/self-hosted-obsidian-sync-with-couchdb","_dir":"obsidian","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Self Hosted Obsidian Sync With CouchDB","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"'3'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"couchserver"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"obsidian__database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"couchdb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"\"5984:5984\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"COUCHDB_USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"COUCHDB_PASSWORD=somepassword"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"./couchdb/dbdata:/opt/couchdb/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"./couchdb/local.ini:/opt/couchdb/etc/local.ini"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a9183"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"[::]:80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c98f47"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" https://"}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a9183"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/fullchain.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-3e4da5"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/privkey.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-3e4da5"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1c9154"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9bcf8f"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-1c9154"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-575709"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-1c9154"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"http://127.0.0.1:5984;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-575709{color:#FFA657}.ct-9bcf8f{color:#FF7B72}.ct-1c9154{color:#C9D1D9}.ct-3e4da5{color:#8B949E}.ct-53198e{color:#C9D1D9}.ct-ecb71a{color:#C9D1D9}.ct-c98f47{color:#79C0FF}.ct-774e7e{color:#FF7B72}.ct-4a9183{color:#FF7B72}.ct-7a29d8{color:#A5D6FF}.ct-f38bb7{color:#C9D1D9}.ct-a62c85{color:#7EE787}.light .ct-a62c85{color:#268BD2}.light .ct-f38bb7{color:#657B83}.light .ct-7a29d8{color:#2AA198}.light .ct-4a9183{color:#073642}.light .ct-774e7e{color:#859900}.light .ct-c98f47{color:#D33682}.light .ct-ecb71a{color:#859900}.light .ct-53198e{color:#268BD2}.light .ct-3e4da5{color:#93A1A1}.light .ct-1c9154{color:#657B83}.light .ct-9bcf8f{color:#073642}.light .ct-575709{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-environment","depth":2,"text":"Setting up environment"},{"id":"setting-up-obsidian","depth":2,"text":"Setting up Obsidian"}]}},"_type":"markdown","_id":"content:Obsidian:Self-hosted Obsidian sync with CouchDB.md","_source":"content","_file":"Obsidian/Self-hosted Obsidian sync with CouchDB.md","_extension":"md"},{"_path":"/sql/mysql-and-mariadb-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"MySQL And MariaDB Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"...\nbind-address = 0.0.0.0\n...\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"FLUSH PRIVILEGES;\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"sudo apt install mariadb-server"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"sudo mysql_secure_installation"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"bind-"}]},{"type":"element","tag":"span","props":{"class":"ct-310db6"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":" = 0.0.0.0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"FLUSH PRIVILEGES;"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-310db6{color:#FF7B72}.ct-32a261{color:#C9D1D9}.light .ct-32a261{color:#657B83}.light .ct-310db6{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-mariadb-on-ubuntu-2004-lts","depth":2,"text":"Install MariaDB on Ubuntu 20.04 LTS"},{"id":"access-database-from-outside","depth":2,"text":"Access Database from outside"},{"id":"create-administrative-user","depth":2,"text":"Create Administrative User"}]}},"_type":"markdown","_id":"content:SQL:MySQL and MariaDB setup.md","_source":"content","_file":"SQL/MySQL and MariaDB setup.md","_extension":"md"},{"_path":"/sql/postgress-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Postgress Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"local all postgres md5\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo systemctl restart postgresql\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo apt install -y postgresql postgresql-contrib postgresql-client"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo systemctl status postgresql.service"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo -u postgres psql"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"Type "}]},{"type":"element","tag":"span","props":{"class":"ct-497724"},"children":[{"type":"text","value":"\"help\""}]},{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7b5636"},"children":[{"type":"text","value":"for"}]},{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":" help."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"postgres="}]},{"type":"element","tag":"span","props":{"class":"ct-b71d77"},"children":[{"type":"text","value":"#"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ddcc7a"},"children":[{"type":"text","value":"local"}]},{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":" all postgres peer"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"local all postgres md5"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo systemctl restart postgresql"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-ddcc7a{color:#FF7B72}.ct-b71d77{color:#8B949E}.ct-7b5636{color:#FF7B72}.ct-497724{color:#A5D6FF}.ct-0fb960{color:#C9D1D9}.light .ct-0fb960{color:#657B83}.light .ct-497724{color:#2AA198}.light .ct-7b5636{color:#859900}.light .ct-b71d77{color:#93A1A1}.light .ct-ddcc7a{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-postgresql-12-on-ubuntu-2004-lts","depth":2,"text":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"},{"id":"initial-database-connection","depth":2,"text":"Initial database connection"},{"id":"set-password-for-postgres-database-user","depth":2,"text":"Set password for postgres database user","children":[{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password","depth":3,"text":"Update pg_hba.conf to allow postgres user connections with password"}]},{"id":"creation-of-additional-database-users","depth":2,"text":"Creation of additional database users"},{"id":"creation-of-additional-databases","depth":2,"text":"Creation of additional databases"}]}},"_type":"markdown","_id":"content:SQL:Postgress setup.md","_source":"content","_file":"SQL/Postgress setup.md","_extension":"md"},{"_path":"/typescript/add-global-variable-to-window","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Add Global Variable To Window","description":"Sometimes you want to add global variable to your window. That thing's called global module augmentation.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"global"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27a704"},"children":[{"type":"text","value":"Window"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69799c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// Sample.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"class"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27a704"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// nothing :-)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// fancyThings.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27a704"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69799c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./fancyThings\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bc9c15"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"(); "}]},{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// ok"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-bc9c15{color:#79C0FF}.ct-cc6c44{color:#A5D6FF}.ct-a6e8e9{color:#8B949E}.ct-69799c{color:#79C0FF}.ct-7a5e28{color:#FF7B72}.ct-b8c1d3{color:#D2A8FF}.ct-27a704{color:#FFA657}.ct-6f68a3{color:#C9D1D9}.ct-70ba16{color:#C9D1D9}.ct-f46b0b{color:#FF7B72}.light .ct-f46b0b{color:#073642}.light .ct-70ba16{color:#657B83}.light .ct-6f68a3{color:#268BD2}.light .ct-27a704{color:#268BD2}.light .ct-b8c1d3{color:#268BD2}.light .ct-7a5e28{color:#859900}.light .ct-69799c{color:#859900}.light .ct-a6e8e9{color:#93A1A1}.light .ct-cc6c44{color:#2AA198}.light .ct-bc9c15{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"augmenting-existing-interface","depth":2,"text":"Augmenting existing interface"}]}},"_type":"markdown","_id":"content:Typescript:Add global variable to window.md","_source":"content","_file":"Typescript/Add global variable to window.md","_extension":"md"},{"_path":"/typescript/flatten-object-with-periods","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Flatten Object With Periods","description":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'./en.json'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"typeof"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b0a50d"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd90c5"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9d1d29"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-c39fb5"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-9d1d29"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ddf795"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c39fb5"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-9d1d29"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ddf795"},"children":[{"type":"text","value":"TranslateOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-b0a50d"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"I18nLib"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49a6c2"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// plural object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"''"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" { ["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"-?:"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]>> }["}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// Fix it for you plural form"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'one'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'few'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'many'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"}${''"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'.'}${"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"4"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":">];"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-49fc29{color:#A5D6FF}.ct-87bd42{color:#79C0FF}.ct-303a3b{color:#79C0FF}.ct-bff26a{color:#8B949E}.ct-49a6c2{color:#D2A8FF}.ct-ddf795{color:#FFA657}.ct-c39fb5{color:#FFA657}.ct-9d1d29{color:#FF7B72}.ct-dd90c5{color:#D2A8FF}.ct-94a616{color:#C9D1D9}.ct-b0a50d{color:#FF7B72}.ct-04960c{color:#FFA657}.ct-7a9043{color:#FF7B72}.ct-494636{color:#A5D6FF}.ct-f14d0f{color:#C9D1D9}.ct-df5c8f{color:#C9D1D9}.ct-a198cf{color:#FF7B72}.light .ct-a198cf{color:#859900}.light .ct-df5c8f{color:#657B83}.light .ct-f14d0f{color:#268BD2}.light .ct-494636{color:#2AA198}.light .ct-7a9043{color:#073642}.light .ct-04960c{color:#268BD2}.light .ct-b0a50d{color:#073642}.light .ct-94a616{color:#657B83}.light .ct-dd90c5{color:#268BD2}.light .ct-9d1d29{color:#859900}.light .ct-c39fb5{color:#657B83}.light .ct-ddf795{color:#268BD2}.light .ct-49a6c2{color:#268BD2}.light .ct-bff26a{color:#93A1A1}.light .ct-303a3b{color:#859900}.light .ct-87bd42{color:#D33682}.light .ct-49fc29{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Flatten object with periods.md","_source":"content","_file":"Typescript/Flatten object with periods.md","_extension":"md"},{"_path":"/typescript/type-guards","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Type Guards","description":"Useful for type checking at compile and run time:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-138491"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b796fd"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-15dca2"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-948562"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-948562"},"children":[{"type":"text","value":"Bird"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-15dca2"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":"is"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-948562"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f94cce"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9418c1"},"children":[{"type":"text","value":"undefined"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-85c28d"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-80cbd7"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"getSmallPet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"fly"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-371350{color:#D2A8FF}.ct-80cbd7{color:#79C0FF}.ct-85c28d{color:#FF7B72}.ct-9418c1{color:#79C0FF}.ct-f94cce{color:#FFA657}.ct-915af4{color:#C9D1D9}.ct-4141b8{color:#FF7B72}.ct-f75c61{color:#C9D1D9}.ct-948562{color:#FFA657}.ct-f21965{color:#FF7B72}.ct-15dca2{color:#FFA657}.ct-b796fd{color:#D2A8FF}.ct-6efcfa{color:#C9D1D9}.ct-138491{color:#FF7B72}.light .ct-138491{color:#073642}.light .ct-6efcfa{color:#657B83}.light .ct-b796fd{color:#268BD2}.light .ct-15dca2{color:#657B83}.light .ct-f21965{color:#859900}.light .ct-948562{color:#268BD2}.light .ct-f75c61{color:#657B83}.light .ct-4141b8{color:#859900}.light .ct-915af4{color:#268BD2}.light .ct-f94cce{color:#268BD2}.light .ct-9418c1{color:#B58900}.light .ct-85c28d{color:#073642}.light .ct-80cbd7{color:#268BD2}.light .ct-371350{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Type guards.md","_source":"content","_file":"Typescript/Type guards.md","_extension":"md"}],"navigation":[{"title":"Blockchain","_path":"/blockchain","children":[{"title":"Common Typescript Examples","_path":"/blockchain/common-typescript-examples"},{"title":"Smart Contracts","_path":"/blockchain/smart-contracts"}]},{"title":"Css","_path":"/css","children":[{"title":"Automatic Grid Like Masonry With Pure CSS","_path":"/css/automatic-grid-like-masonry-with-pure-css"},{"title":"Sass Nth Child Iterate Mixin","_path":"/css/sass-nth-child-iterate-mixin"},{"title":"Test If Browser Supports CSS Rules","_path":"/css/test-if-browser-supports-css-rules"}]},{"title":"Docker","_path":"/docker","children":[{"title":"Building Static Pages With Docker","_path":"/docker/building-static-pages-with-docker"},{"title":"Drone Ci","_path":"/docker/drone-ci"},{"title":"Github Pages With Drone Ci","_path":"/docker/github-pages-with-drone-ci"},{"title":"Private Docker Registry","_path":"/docker/private-docker-registry"},{"title":"Refresh Containers On Pull","_path":"/docker/refresh-containers-on-pull"},{"title":"Seed Dump Inside Docker","_path":"/docker/seed-dump-inside-docker"},{"title":"Wait For Mysql","_path":"/docker/wait-for-mysql"},{"title":"Wait For Redis","_path":"/docker/wait-for-redis"}]},{"title":"Frontend","_path":"/frontend","children":[{"title":"React Native","_path":"/frontend/react-native","children":[{"title":"OAuth2 Login","_path":"/frontend/react-native/oauth2-login"},{"title":"Preserve FlatList Scroll Position In React Native","_path":"/frontend/react-native/preserve-flatlist-scroll-position-in-react-native"},{"title":"Useful Comands","_path":"/frontend/react-native/useful-comands"}]},{"title":"React","_path":"/frontend/react","children":[{"title":"Axios Refresh Token On React","_path":"/frontend/react/axios-refresh-token-on-react"},{"title":"Axios With AbortController","_path":"/frontend/react/axios-with-abortcontroller"}]},{"title":"Vue","_path":"/frontend/vue","children":[{"title":"Adding Global Properties To Component","_path":"/frontend/vue/adding-global-properties-to-component"},{"title":"Make Nuxt Handle Obsidian Highlights","_path":"/frontend/vue/make-nuxt-handle-obsidian-highlights"}]}]},{"title":"Git","_path":"/git","children":[{"title":"Force Git To Use HTTPS","_path":"/git/force-git-to-use-https"},{"title":"Git Aliases And Useful Commands","_path":"/git/git-aliases-and-useful-commands"}]},{"title":"Graphql","_path":"/graphql","children":[{"title":"Apollo Client Pagination","_path":"/graphql/apollo-client-pagination"},{"title":"Refresh Token In Apollo Client","_path":"/graphql/refresh-token-in-apollo-client"}]},{"title":"Linux","_path":"/linux","children":[{"title":"Gitea For Git Hosting","_path":"/linux/gitea-for-git-hosting"},{"title":"Google Photos Alternative With Photoprism","_path":"/linux/google-photos-alternative-with-photoprism"},{"title":"Resume Or Start Screen Session","_path":"/linux/resume-or-start-screen-session"},{"title":"Rsync File With SSH","_path":"/linux/rsync-file-with-ssh"},{"title":"Setting Up NGINX","_path":"/linux/setting-up-nginx"},{"title":"SSH","_path":"/linux/ssh"}]},{"title":"Obsidian","_path":"/obsidian","children":[{"title":"Self Hosted Obsidian Sync With CouchDB","_path":"/obsidian/self-hosted-obsidian-sync-with-couchdb"}]},{"title":"Sql","_path":"/sql","children":[{"title":"MySQL And MariaDB Setup","_path":"/sql/mysql-and-mariadb-setup"},{"title":"Postgress Setup","_path":"/sql/postgress-setup"}]},{"title":"Typescript","_path":"/typescript","children":[{"title":"Add Global Variable To Window","_path":"/typescript/add-global-variable-to-window"},{"title":"Flatten Object With Periods","_path":"/typescript/flatten-object-with-periods"},{"title":"Type Guards","_path":"/typescript/type-guards"}]}]}
\ No newline at end of file
+{"generatedAt":1668068044815,"generateTime":72,"contents":[{"_path":"/blockchain/common-typescript-examples","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Common Typescript Examples","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// URL of your node"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://...'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6309ee"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f71c1f"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-c6b204"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-f71c1f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef543d"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// first we need to authorize"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// then we can get wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getCurrentAddressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getTransactionCount"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" gasLimit: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" nonce: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"EthUtil"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"Transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"sign"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"serialize"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"this"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"`0x${"}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-ce625f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-ce625f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'hex'"}]},{"type":"element","tag":"span","props":{"class":"ct-ce625f"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"estimateFee"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"asciiToHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"fromWei"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9578c3"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"())"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"multiply"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-9578c3"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"()))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'accountsChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'chainChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"handler"}]},{"type":"element","tag":"span","props":{"class":"ct-cee4e9"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'wallet_watchAsset'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" params: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" type: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ERC20'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" options: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" address: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'0xb60e8dd61c5d32be8058bb8eb970870f07233155'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'FOO'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-067f5c"},"children":[{"type":"text","value":"18"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" image: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://foo.io/token-image.svg'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-6309ee"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-c6b204"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'FOO successfully added to wallet!'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9578c3"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'Something went wrong.'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getChainID"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'eth_chainId'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'wallet_switchEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" params: [{ chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }], "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"switchError"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// This error code indicates that the chain has not been added to MetaMask."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-067f5c"},"children":[{"type":"text","value":"4902"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'wallet_addEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" params: [{ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" chainName: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'Ropsten Test Network'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" nativeCurrency: { "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" name: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-067f5c"},"children":[{"type":"text","value":"18"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" rpcUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"], "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" blockExplorerUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://ropsten.etherscan.io'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }] ,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"addError"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// handle \"add\" error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// handle other \"switch\" errors"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-067f5c{color:#79C0FF}.ct-cee4e9{color:#C9D1D9}.ct-9578c3{color:#79C0FF}.ct-ce625f{color:#A5D6FF}.ct-ef543d{color:#79C0FF}.ct-c6b204{color:#FFA657}.ct-f71c1f{color:#FF7B72}.ct-6309ee{color:#D2A8FF}.ct-0a9a1b{color:#C9D1D9}.ct-04c9e4{color:#FF7B72}.ct-db878d{color:#D2A8FF}.ct-e3fc83{color:#79C0FF}.ct-b77883{color:#FF7B72}.ct-ce3254{color:#8B949E}.ct-a5a580{color:#A5D6FF}.ct-608a65{color:#C9D1D9}.ct-eb82b7{color:#C9D1D9}.ct-2fda6e{color:#FF7B72}.light .ct-2fda6e{color:#859900}.light .ct-eb82b7{color:#657B83}.light .ct-608a65{color:#268BD2}.light .ct-a5a580{color:#2AA198}.light .ct-ce3254{color:#93A1A1}.light .ct-b77883{color:#073642}.light .ct-e3fc83{color:#268BD2}.light .ct-db878d{color:#268BD2}.light .ct-04c9e4{color:#073642}.light .ct-0a9a1b{color:#657B83}.light .ct-6309ee{color:#268BD2}.light .ct-f71c1f{color:#859900}.light .ct-c6b204{color:#657B83}.light .ct-ef543d{color:#859900}.light .ct-ce625f{color:#657B83}.light .ct-9578c3{color:#859900}.light .ct-cee4e9{color:#859900}.light .ct-067f5c{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"connecting-to-node","depth":2,"text":"Connecting to node"},{"id":"getting-wallet-balance","depth":2,"text":"Getting wallet balance"},{"id":"getting-wallet-address","depth":2,"text":"Getting wallet address"},{"id":"sending-transaction","depth":2,"text":"Sending transaction"},{"id":"estimating-transaction-fee","depth":2,"text":"Estimating transaction FEE"},{"id":"subscribing-to-wallet-address-change","depth":2,"text":"Subscribing to wallet address change"},{"id":"watching-network-change","depth":2,"text":"Watching network change"},{"id":"adding-custom-token-to-wallet","depth":2,"text":"Adding custom token to wallet"},{"id":"changing-network-to-custom","depth":2,"text":"Changing network to custom"}]}},"_type":"markdown","_id":"content:Blockchain:Common typescript examples.md","_source":"content","_file":"Blockchain/Common typescript examples.md","_extension":"md"},{"_path":"/blockchain/smart-contracts","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Smart Contracts","description":"For common functions see Common typescript examples.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'web3-eth-contract'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"abi"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"object"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69cd54"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-650e82"},"children":[{"type":"text","value":"JSON"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-69cd54"},"children":[{"type":"text","value":"parse"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// ABI of contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// address for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ({}) "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// Calling write method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// authorizing with Metamask"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// getting wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// calling \"store\" store method for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// payload should include `from` address, that matches"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// current user's wallet"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'Parameter'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"send"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" from: "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed3166"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// calling read method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// this method can return data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"retrieve"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed3166"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// ABI контракта"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// contract address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// account's private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// write-methods requires private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"privateKeyToAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" to: "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"encodeABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" gas: "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"({ from: "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"signTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"rawTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"requests"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"balanceOf"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getStaked"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"call"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"any"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"[]) "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getWeb3NoAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"BatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"map"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"add"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"execute"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed3166"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"all"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b75af6"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'YOUR_RPC_ENDPOINT_HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'YOUR ABI HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'YOUR CONTRACT ADDRESS HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"referralProgramContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"events"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"RegisterUser"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a93773"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"`| UserRegistered | events | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"boolean"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fa3c"},"children":[{"type":"text","value":"RegisterUserResponseInterface"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"`| ONCE | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a93773"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fa3c"},"children":[{"type":"text","value":"ErrnoException"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" value: [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"events"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"str"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" address: ["}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'address-1'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'address-2'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"//Only get events from specific addresses"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" topics: [] "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"//What topics to subscribe to"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'logs'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"nr"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"//example options(optional)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// only get events where transfer value was 1000 or 1337"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" value: ["}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'1000'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'1337'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// number | \"earliest\" | \"pending\" | \"latest\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" toBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'latest'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getPastEvents"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'Transfer'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"results"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-34fa3c{color:#FFA657}.ct-a93773{color:#A5D6FF}.ct-b75af6{color:#79C0FF}.ct-ed3166{color:#79C0FF}.ct-4b5458{color:#79C0FF}.ct-01dfb8{color:#79C0FF}.ct-09b465{color:#FF7B72}.ct-2dcbf5{color:#8B949E}.ct-f12b07{color:#FFA657}.ct-312f4e{color:#D2A8FF}.ct-650e82{color:#79C0FF}.ct-69cd54{color:#79C0FF}.ct-5b176b{color:#79C0FF}.ct-492994{color:#FFA657}.ct-97fc9e{color:#FF7B72}.ct-adbdaf{color:#D2A8FF}.ct-445399{color:#C9D1D9}.ct-76a269{color:#FF7B72}.ct-962005{color:#A5D6FF}.ct-41892f{color:#C9D1D9}.ct-64b086{color:#C9D1D9}.ct-a7723a{color:#FF7B72}.light .ct-a7723a{color:#859900}.light .ct-64b086{color:#657B83}.light .ct-41892f{color:#268BD2}.light .ct-962005{color:#2AA198}.light .ct-76a269{color:#073642}.light .ct-445399{color:#657B83}.light .ct-adbdaf{color:#268BD2}.light .ct-97fc9e{color:#859900}.light .ct-492994{color:#657B83}.light .ct-5b176b{color:#859900}.light .ct-69cd54{color:#268BD2}.light .ct-650e82{color:#657B83}.light .ct-312f4e{color:#268BD2}.light .ct-f12b07{color:#657B83}.light .ct-2dcbf5{color:#93A1A1}.light .ct-09b465{color:#073642}.light .ct-01dfb8{color:#268BD2}.light .ct-4b5458{color:#D33682}.light .ct-ed3166{color:#859900}.light .ct-b75af6{color:#B58900}.light .ct-a93773{color:#2AA198}.light .ct-34fa3c{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"getting-smart-contract-instance","depth":2,"text":"Getting smart contract instance"},{"id":"executing-contract-method","depth":2,"text":"Executing contract method","children":[{"id":"example-for-metamask-without-private-key","depth":3,"text":"Example for #Metamask without private key"},{"id":"nodejs-and-react-native-example","depth":3,"text":"Node.js and React Native example"},{"id":"calling-a-batch-of-contracts-methods","depth":3,"text":"Calling a batch of contract's methods"}]},{"id":"subscribing-to-smart-contract-events","depth":2,"text":"Subscribing to smart contract events","children":[{"id":"by-accessing-contractevents","depth":3,"text":"By accessing contract.events"},{"id":"with-filtering","depth":3,"text":"With filtering"},{"id":"common-subscribe-method","depth":3,"text":"Common Subscribe method"},{"id":"getting-event-history","depth":3,"text":"Getting event history"}]}]}},"_type":"markdown","_id":"content:Blockchain:Smart contracts.md","_source":"content","_file":"Blockchain/Smart contracts.md","_extension":"md"},{"_path":"/css/automatic-grid-like-masonry-with-pure-css","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Automatic Grid Like Masonry With Pure CSS","description":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f41fce"},"children":[{"type":"text","value":"$cell: "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"250"}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f41fce"},"children":[{"type":"text","value":"$gap: "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"20"}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".grid"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"display"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-594f96"},"children":[{"type":"text","value":"grid"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-template-columns"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-3b2b55"},"children":[{"type":"text","value":"repeat"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"auto-fit"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-3b2b55"},"children":[{"type":"text","value":"minmax"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"$cell"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-6acf01"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-ce779c"},"children":[{"type":"text","value":"fr"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-auto-rows"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"256"}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-auto-flow"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-594f96"},"children":[{"type":"text","value":"row"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-594f96"},"children":[{"type":"text","value":"dense"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-column-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-row-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".h-2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// takes 2 columns"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-column-end"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".v-2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// takes 2 rows"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-row-end"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".full-width"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// height: 1 row"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".top-right"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// height here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"-2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// width here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-db38f7{color:#8B949E}.ct-d7d03c{color:#79C0FF}.ct-ce779c{color:#FF7B72}.ct-6acf01{color:#79C0FF}.ct-a907d5{color:#FFA657}.ct-3b2b55{color:#79C0FF}.ct-594f96{color:#79C0FF}.ct-d6bfa1{color:#79C0FF}.ct-9415e6{color:#C9D1D9}.ct-ca227d{color:#79C0FF}.ct-58c1dc{color:#C9D1D9}.ct-03d16f{color:#FF7B72}.ct-5591e5{color:#79C0FF}.ct-f41fce{color:#FFA657}.light .ct-f41fce{color:#657B83}.light .ct-5591e5{color:#D33682}.light .ct-03d16f{color:#859900}.light .ct-58c1dc{color:#657B83}.light .ct-ca227d{color:#93A1A1}.light .ct-9415e6{color:#657B83}.light .ct-d6bfa1{color:#859900}.light .ct-594f96{color:#657B83}.light .ct-3b2b55{color:#268BD2}.light .ct-a907d5{color:#657B83}.light .ct-6acf01{color:#D33682}.light .ct-ce779c{color:#859900}.light .ct-d7d03c{color:#859900}.light .ct-db38f7{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"basic-elements-with-double-height-or-width","depth":3,"text":"Basic elements with double height or width"},{"id":"header-that-fills-all-columns","depth":3,"text":"Header, that fills all columns"},{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner","depth":3,"text":"Stamp element, that takes 3 rows in the top right corner"}]}},"_type":"markdown","_id":"content:CSS:Automatic Grid like Masonry with pure CSS.md","_source":"content","_file":"CSS/Automatic Grid like Masonry with pure CSS.md","_extension":"md"},{"_path":"/css/sass-nth-child-iterate-mixin","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Sass Nth Child Iterate Mixin","description":"Say, we need to color n items by specific colors, which depend on its position. #SCSS supports iteration over lists for that purposes:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b277f3"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d670a"},"children":[{"type":"text","value":"color-per-child"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b277f3"},"children":[{"type":"text","value":"@each"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b277f3"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a71f0f"},"children":[{"type":"text","value":"&"}]},{"type":"element","tag":"span","props":{"class":"ct-aa41da"},"children":[{"type":"text","value":":nth-child"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"#{"}]},{"type":"element","tag":"span","props":{"class":"ct-c4485f"},"children":[{"type":"text","value":"index"}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"(($colors), ($color))}"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c18acb"},"children":[{"type":"text","value":"color"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ab6de3"},"children":[{"type":"text","value":".item"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26dd38"},"children":[{"type":"text","value":"@include"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-21f33b"},"children":[{"type":"text","value":"color_per_child"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#ded187"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#dbde87"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#bade87"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#9cde87"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#87deaa"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c0c245{color:#79C0FF}.ct-21f33b{color:#D2A8FF}.ct-26dd38{color:#FF7B72}.ct-ab6de3{color:#79C0FF}.ct-d60e7d{color:#C9D1D9}.ct-c18acb{color:#79C0FF}.ct-c4485f{color:#79C0FF}.ct-aa41da{color:#79C0FF}.ct-a71f0f{color:#7EE787}.ct-259557{color:#FFA657}.ct-1d670a{color:#D2A8FF}.ct-e6daf7{color:#C9D1D9}.ct-b277f3{color:#FF7B72}.light .ct-b277f3{color:#859900}.light .ct-e6daf7{color:#657B83}.light .ct-1d670a{color:#268BD2}.light .ct-259557{color:#657B83}.light .ct-a71f0f{color:#268BD2}.light .ct-aa41da{color:#93A1A1}.light .ct-c4485f{color:#268BD2}.light .ct-c18acb{color:#859900}.light .ct-d60e7d{color:#657B83}.light .ct-ab6de3{color:#93A1A1}.light .ct-26dd38{color:#859900}.light .ct-21f33b{color:#268BD2}.light .ct-c0c245{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Sass nth-child iterate mixin.md","_source":"content","_file":"CSS/Sass nth-child iterate mixin.md","_extension":"md"},{"_path":"/css/test-if-browser-supports-css-rules","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Test If Browser Supports CSS Rules","description":"To test if browser supports some #CSS rules, do following:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-8e03c3"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-82f423"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-efed79"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e77c6d"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":": blur(5px);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-edb52b"},"children":[{"type":"text","value":"can_backdrop"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-68bf07"},"children":[{"type":"text","value":"-webkit-backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2278fa"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-8879a9"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-39b93b"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":")) "}]},{"type":"element","tag":"span","props":{"class":"ct-fbde32"},"children":[{"type":"text","value":"or"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-8e03c3"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-82f423"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-efed79"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@content"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-fbde32{color:#79C0FF}.ct-39b93b{color:#FF7B72}.ct-8879a9{color:#79C0FF}.ct-2278fa{color:#79C0FF}.ct-68bf07{color:#79C0FF}.ct-6cd1fc{color:#C9D1D9}.ct-edb52b{color:#D2A8FF}.ct-e77c6d{color:#7EE787}.ct-efed79{color:#79C0FF}.ct-82f423{color:#79C0FF}.ct-8e03c3{color:#79C0FF}.ct-b91a4c{color:#C9D1D9}.ct-dbcf68{color:#FF7B72}.light .ct-dbcf68{color:#859900}.light .ct-b91a4c{color:#657B83}.light .ct-8e03c3{color:#859900}.light .ct-82f423{color:#268BD2}.light .ct-efed79{color:#D33682}.light .ct-e77c6d{color:#268BD2}.light .ct-edb52b{color:#268BD2}.light .ct-6cd1fc{color:#657B83}.light .ct-68bf07{color:#859900}.light .ct-2278fa{color:#268BD2}.light .ct-8879a9{color:#D33682}.light .ct-39b93b{color:#859900}.light .ct-fbde32{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Test if browser supports CSS rules.md","_source":"content","_file":"CSS/Test if browser supports CSS rules.md","_extension":"md"},{"_path":"/docker/building-static-pages-with-docker","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Building Static Pages With Docker","description":"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:"}]},{"type":"element","tag":"code","props":{"code":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html\n","language":"Dockerfile"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:"}]},{"type":"element","tag":"code","props":{"code":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html\n","language":"Dockerfile"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"FROM node:16-alpine as builder\nWORKDIR /app\nCOPY package.json yarn.lock ./\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder /app/dist /usr/share/nginx/html"}]}]}]}]}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Building static pages with Docker.md","_source":"content","_file":"Docker/Building static pages with Docker.md","_extension":"md"},{"_path":"/docker/drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Drone Ci","description":"Can be used with Private docker registry to deploy things using #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"drone repo update $1 --trusted=true && drone repo info $1\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"build-master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"plugins/docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"when"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"branch"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"dockerfile"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"Dockerfile"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"tag"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"${DRONE_BRANCH}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"global_docker_login"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"global_docker_password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"global_docker_registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"repo"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"docker_repo"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"drone"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone/drone:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_ID=secret_id"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_SECRET=client_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_SERVER_HOST=drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_USER_CREATE=\"username:user,admin:true\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_SERVER_PROTO=https"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_TLS_AUTOCERT=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_GIT_ALWAYS_AUTH=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_LOGS_DEBUG=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_LOGS_TRACE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"./data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"8090:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"drone-agent"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone__agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone/agent:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_RPC_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3b0169"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" DRONE_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3b0169"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" DRONE_TOKEN=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":"drone info"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":"drone repo update "}]},{"type":"element","tag":"span","props":{"class":"ct-e22f74"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-de839e"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" --trusted=true "}]},{"type":"element","tag":"span","props":{"class":"ct-a7bf35"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" drone repo info "}]},{"type":"element","tag":"span","props":{"class":"ct-e22f74"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-de839e"},"children":[{"type":"text","value":"1"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-a7bf35{color:#FF7B72}.ct-de839e{color:#C9D1D9}.ct-e22f74{color:#C9D1D9}.ct-3b0169{color:#FF7B72}.ct-8ea36a{color:#A5D6FF}.ct-66c1f2{color:#C9D1D9}.ct-ffab44{color:#7EE787}.light .ct-ffab44{color:#268BD2}.light .ct-66c1f2{color:#657B83}.light .ct-8ea36a{color:#2AA198}.light .ct-3b0169{color:#073642}.light .ct-e22f74{color:#859900}.light .ct-de839e{color:#268BD2}.light .ct-a7bf35{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"pushing-to-private-docker_registry","depth":2,"text":"Pushing to private docker_registry"},{"id":"docker-compose-file-for-drone-ci","depth":2,"text":"Docker-compose file for drone-ci"},{"id":"caching-builds","depth":2,"text":"Caching builds"},{"id":"get-user-info","depth":2,"text":"Get user info"},{"id":"mark-user-as-trusted","depth":2,"text":"Mark user as trusted"}]}},"_type":"markdown","_id":"content:Docker:Drone-ci.md","_source":"content","_file":"Docker/Drone-ci.md","_extension":"md"},{"_path":"/docker/github-pages-with-drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Github Pages With Drone Ci","description":"To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"node:16"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"commands"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"yarn"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"yarn generate"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"rm -rf ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"mv ./.output/public ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"touch ./docs/.nojekyll"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"publish"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"plugins/gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"target_branch"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"github_username"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"github_token"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b63ea4{color:#A5D6FF}.ct-a0923d{color:#C9D1D9}.ct-20ff57{color:#7EE787}.light .ct-20ff57{color:#268BD2}.light .ct-a0923d{color:#657B83}.light .ct-b63ea4{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"additional-reading","depth":2,"text":"Additional reading"}]}},"_type":"markdown","_id":"content:Docker:Github pages with drone-ci.md","_source":"content","_file":"Docker/Github pages with drone-ci.md","_extension":"md"},{"_path":"/docker/private-docker-registry","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Private Docker Registry","description":"Suitable to work with Drone-ci for hosting private #docker images.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --entrypoint htpasswd registry:2 \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -Bbn user mypassword "}]},{"type":"element","tag":"span","props":{"class":"ct-44c60f"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" auth/registry.password"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"docker__registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"registry:2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"5000:5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_AUTH=htpasswd"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_REALM=Registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_HTTP_SECRET=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_STORAGE_DELETE_ENABLED=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"./registry/auth:/auth"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"./registry/data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"ui"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"docker__ui"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"parabuzzle/craneoperator:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"80:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_HOST=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_PORT=5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_PROTOCOL=http"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"ALLOW_REGISTRY_LOGIN=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_ALLOW_DELETE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"USERNAME=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"PASSWORD=password"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-11fc25"},"children":[{"type":"text","value":"# Try this first"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --rm anoxis/registry-cli \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -r https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -l user:password \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --delete \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --num 2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-11fc25"},"children":[{"type":"text","value":"# Then this "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":"docker run -it \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -v /path/to/registry/data:/registry \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -e REGISTRY_URL=https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -e DRY_RUN="}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -e REGISTRY_AUTH="}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"\"user:password\""}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" mortensrasmussen/docker-registry-manifest-cleanup"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-11fc25{color:#8B949E}.ct-8c8d33{color:#A5D6FF}.ct-55b310{color:#7EE787}.ct-44c60f{color:#FF7B72}.ct-197cbc{color:#C9D1D9}.light .ct-197cbc{color:#657B83}.light .ct-44c60f{color:#859900}.light .ct-55b310{color:#268BD2}.light .ct-8c8d33{color:#2AA198}.light .ct-11fc25{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"sample-docker-compose-for-custom-docker-registry","depth":2,"text":"Sample docker-compose for custom docker registry"},{"id":"squash-layers-on-registry","depth":2,"text":"Squash layers on registry"}]}},"_type":"markdown","_id":"content:Docker:Private docker registry.md","_source":"content","_file":"Docker/Private docker registry.md","_extension":"md"},{"_path":"/docker/refresh-containers-on-pull","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Containers On Pull","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"watchtower"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"docker__watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"v2tec/watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"/home/user/.docker/config.json:/config.json"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"--interval 60 image_1 image_2"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e17983{color:#A5D6FF}.ct-8a90fa{color:#C9D1D9}.ct-a14498{color:#7EE787}.light .ct-a14498{color:#268BD2}.light .ct-8a90fa{color:#657B83}.light .ct-e17983{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-watchtower","depth":2,"text":"Setting up watchtower"}]}},"_type":"markdown","_id":"content:Docker:Refresh containers on pull.md","_source":"content","_file":"Docker/Refresh containers on pull.md","_extension":"md"},{"_path":"/docker/seed-dump-inside-docker","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Seed Dump Inside Docker","description":"If you need to seed .sql dump in #docker container, just run this command. Also you can try to rsync file with SSH to get it from remote host.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-772b12"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-772b12"},"children":[{"type":"text","value":"# usage: ./script.sh \"/path/to/dump.sql\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-772b12"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"DUMP_PATH="}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"CONTAINER="}]},{"type":"element","tag":"span","props":{"class":"ct-adb761"},"children":[{"type":"text","value":"\"db\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"USER=root"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"PASSWORD=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"DB=database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"cat "}]},{"type":"element","tag":"span","props":{"class":"ct-adb761"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"DUMP_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-adb761"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d978b6"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-4dc312"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" -i "}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"CONTAINER"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" mysql -u"}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" -p"}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"DB"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-4dc312{color:#79C0FF}.ct-d978b6{color:#FF7B72}.ct-adb761{color:#A5D6FF}.ct-38695f{color:#C9D1D9}.ct-3f3bb1{color:#C9D1D9}.ct-8eeb74{color:#C9D1D9}.ct-772b12{color:#8B949E}.light .ct-772b12{color:#93A1A1}.light .ct-8eeb74{color:#657B83}.light .ct-3f3bb1{color:#859900}.light .ct-38695f{color:#268BD2}.light .ct-adb761{color:#2AA198}.light .ct-d978b6{color:#859900}.light .ct-4dc312{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Seed dump inside docker.md","_source":"content","_file":"Docker/Seed dump inside docker.md","_extension":"md"},{"_path":"/docker/wait-for-mysql","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Mysql","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8bfaab"},"children":[{"type":"text","value":"# Waits for mysql to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bdad6"},"children":[{"type":"text","value":"wait_for_mysql"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" query="}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\"SELECT count(*) FROM users\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-8bfaab"},"children":[{"type":"text","value":"# 3 minutes limit"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-a7fb56"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" mysql --user="}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" -e "}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-bc3d47"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7fb56"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\"[Error] can't properly query MySQL after "}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7fb56"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8bfaab"},"children":[{"type":"text","value":"# usage: wait_for_mysql miin-mysql-dev root password database"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-bc3d47{color:#79C0FF}.ct-e4c0f5{color:#C9D1D9}.ct-a7151b{color:#C9D1D9}.ct-a7fb56{color:#79C0FF}.ct-8dc176{color:#FF7B72}.ct-2c4b57{color:#A5D6FF}.ct-e9b20a{color:#C9D1D9}.ct-5bdad6{color:#D2A8FF}.ct-8bfaab{color:#8B949E}.light .ct-8bfaab{color:#93A1A1}.light .ct-5bdad6{color:#268BD2}.light .ct-e9b20a{color:#657B83}.light .ct-2c4b57{color:#2AA198}.light .ct-8dc176{color:#859900}.light .ct-a7fb56{color:#268BD2}.light .ct-a7151b{color:#859900}.light .ct-e4c0f5{color:#268BD2}.light .ct-bc3d47{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for mysql.md","_source":"content","_file":"Docker/Wait for mysql.md","_extension":"md"},{"_path":"/docker/wait-for-redis","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Redis","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e2a55f"},"children":[{"type":"text","value":"# Waits for redis to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5a016a"},"children":[{"type":"text","value":"wait_for_redis"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-e2a55f"},"children":[{"type":"text","value":"# 3 minutes"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-88c314"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" redis-cli -h localhost -p 6379 -a "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" ping "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\"PONG\""}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":"/dev/null "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"2>&1;"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-9ea1e0"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88c314"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\"[Error] can't properly ping Redis container after "}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88c314"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e2a55f"},"children":[{"type":"text","value":"# usage: wait_for_redis miin-redis-dev password"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-9ea1e0{color:#79C0FF}.ct-b588f8{color:#C9D1D9}.ct-560d90{color:#C9D1D9}.ct-daf8c0{color:#A5D6FF}.ct-88c314{color:#79C0FF}.ct-5c4ed1{color:#FF7B72}.ct-d05dd6{color:#C9D1D9}.ct-5a016a{color:#D2A8FF}.ct-e2a55f{color:#8B949E}.light .ct-e2a55f{color:#93A1A1}.light .ct-5a016a{color:#268BD2}.light .ct-d05dd6{color:#657B83}.light .ct-5c4ed1{color:#859900}.light .ct-88c314{color:#268BD2}.light .ct-daf8c0{color:#2AA198}.light .ct-560d90{color:#859900}.light .ct-b588f8{color:#268BD2}.light .ct-9ea1e0{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for redis.md","_source":"content","_file":"Docker/Wait for redis.md","_extension":"md"},{"_path":"/frontend/react-native/oauth2-login","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"OAuth2 Login","description":"Use #oauth2 login with React-Native","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6736c0"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'react-native-app-auth'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c83c0b"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3914c"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" issuer: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'https://accounts.google.com'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}.apps.googleusercontent.com`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`com.yourapp:/oauth2redirect/google`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'openid'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'profile'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-9e7db7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"});"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-c83c0b"},"children":[{"type":"text","value":"// better hide it somehow"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'com.yourapp'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3914c"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" serviceConfiguration: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" authorizationEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/authorize?response_type=code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}&redirect_uri=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c83c0b"},"children":[{"type":"text","value":"// TODO: replace it with your own backend to secure client_secret:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" tokenEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}&client_secret=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'login:info'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'login:avatar'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-9e7db7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e3914c"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-6736c0"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-6736c0"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-9e7db7{color:#79C0FF}.ct-e3914c{color:#D2A8FF}.ct-c83c0b{color:#8B949E}.ct-1b9852{color:#79C0FF}.ct-16ef2e{color:#FF7B72}.ct-08ed27{color:#A5D6FF}.ct-6736c0{color:#C9D1D9}.ct-f88891{color:#C9D1D9}.ct-a8a6b1{color:#FF7B72}.light .ct-a8a6b1{color:#859900}.light .ct-f88891{color:#657B83}.light .ct-6736c0{color:#268BD2}.light .ct-08ed27{color:#2AA198}.light .ct-16ef2e{color:#073642}.light .ct-1b9852{color:#268BD2}.light .ct-c83c0b{color:#93A1A1}.light .ct-e3914c{color:#268BD2}.light .ct-9e7db7{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"common-oauth2-providers","depth":2,"text":"Common OAuth2 providers","children":[{"id":"example-for-google","depth":3,"text":"Example for #Google"},{"id":"example-for-yandex","depth":3,"text":"Example for #Yandex"}]},{"id":"apple-id-login","depth":2,"text":"Apple ID login"}]}},"_type":"markdown","_id":"content:Frontend:React Native:OAuth2 login.md","_source":"content","_file":"Frontend/React Native/OAuth2 login.md","_extension":"md"},{"_path":"/frontend/react-native/preserve-flatlist-scroll-position-in-react-native","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Preserve FlatList Scroll Position In React Native","description":"Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6c2b5b"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d213f"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"; }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0527be"},"children":[{"type":"text","value":"SomeList"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" ({ "}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// set it to `true` before interaction and back to `false` right after"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"NativeSyntheticEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"NativeScrollEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":">) "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"nativeEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"contentOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"y"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222587"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0527be"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c0d4f3"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c0d4f3"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"scrollToOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" offset: "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" animated: "}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// onInteraction wraps interaction to preserve scroll position"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"onInteraction"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"500"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"setSelectedSubThemes"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-4221fb"},"children":[{"type":"text","value":"FlatList"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// ...required FlatList options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"/>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-4221fb{color:#FFA657}.ct-c0d4f3{color:#79C0FF}.ct-222587{color:#79C0FF}.ct-7a2c79{color:#C9D1D9}.ct-82e7b0{color:#79C0FF}.ct-7c8979{color:#79C0FF}.ct-b2b766{color:#79C0FF}.ct-3eadb3{color:#FFA657}.ct-f00f39{color:#FFA657}.ct-46376e{color:#FF7B72}.ct-0527be{color:#D2A8FF}.ct-6780b2{color:#C9D1D9}.ct-560b8c{color:#FF7B72}.ct-1d213f{color:#79C0FF}.ct-123153{color:#D2A8FF}.ct-bdcddc{color:#FF7B72}.ct-6c2b5b{color:#FFA657}.ct-96a177{color:#C9D1D9}.ct-6ff8c4{color:#FF7B72}.ct-70d397{color:#8B949E}.light .ct-70d397{color:#93A1A1}.light .ct-6ff8c4{color:#073642}.light .ct-96a177{color:#657B83}.light .ct-6c2b5b{color:#268BD2}.light .ct-bdcddc{color:#859900}.light .ct-123153{color:#268BD2}.light .ct-1d213f{color:#859900}.light .ct-560b8c{color:#073642}.light .ct-6780b2{color:#657B83}.light .ct-0527be{color:#268BD2}.light .ct-46376e{color:#859900}.light .ct-f00f39{color:#268BD2}.light .ct-3eadb3{color:#657B83}.light .ct-b2b766{color:#268BD2}.light .ct-7c8979{color:#D33682}.light .ct-82e7b0{color:#B58900}.light .ct-7a2c79{color:#268BD2}.light .ct-222587{color:#268BD2}.light .ct-c0d4f3{color:#859900}.light .ct-4221fb{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React Native:Preserve FlatList scroll position in React Native.md","_source":"content","_file":"Frontend/React Native/Preserve FlatList scroll position in React Native.md","_extension":"md"},{"_path":"/frontend/react-native/useful-comands","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Useful Comands","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"adb logcat com.application:I \"*:S\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"keytool -printcert -jarfile \"$1\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"adb logcat com.application:I "}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\"*:S\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"keytool -printcert -jarfile "}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"npx react-native bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --platform android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --dev "}]},{"type":"element","tag":"span","props":{"class":"ct-49aa90"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --entry-file index.js \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --bundle-output android/app/src/main/assets/index.android.bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --assets-dest android/app/src/main/res/"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49aa90"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" android "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" ./gradlew assembleDebug"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8cbcba"},"children":[{"type":"text","value":"# do your stuff"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"./gradlew clean"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49aa90"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" ./android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" ./gradlew assembleRelease \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" adb install ./app/build/outputs/apk/release/app-release.apk"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8cbcba"},"children":[{"type":"text","value":"# ios "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"xcrun simctl openurl booted "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8cbcba"},"children":[{"type":"text","value":"# android"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"adb shell am start -W -a android.intent.action.VIEW -d "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"com.application"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"PACKAGE="}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\"com.application\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"adb shell pm set-app-links --package "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"PACKAGE"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" 0 all "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" adb shell pm verify-app-links --re-verify "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"PACKAGE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8cbcba{color:#8B949E}.ct-b7b0af{color:#FF7B72}.ct-49aa90{color:#79C0FF}.ct-79ff07{color:#C9D1D9}.ct-334077{color:#C9D1D9}.ct-87b274{color:#A5D6FF}.ct-3cd957{color:#C9D1D9}.light .ct-3cd957{color:#657B83}.light .ct-87b274{color:#2AA198}.light .ct-334077{color:#859900}.light .ct-79ff07{color:#268BD2}.light .ct-49aa90{color:#268BD2}.light .ct-b7b0af{color:#859900}.light .ct-8cbcba{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"show-android-logcat","depth":2,"text":"Show android logcat"},{"id":"get-apks-sha-256","depth":2,"text":"Get .apk's SHA-256"},{"id":"assemble-debug-release-on-android","depth":2,"text":"Assemble debug release on Android"},{"id":"send-release-to-android-device","depth":2,"text":"Send release to Android device"},{"id":"deep-links","depth":2,"text":"Deep links","children":[{"id":"open-deep-links","depth":3,"text":"Open deep links"},{"id":"reverify-links-on-android","depth":3,"text":"Reverify links on Android"}]}]}},"_type":"markdown","_id":"content:Frontend:React Native:Useful comands.md","_source":"content","_file":"Frontend/React Native/Useful comands.md","_extension":"md"},{"_path":"/frontend/react/axios-refresh-token-on-react","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios Refresh Token On React","description":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"axios\""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"React"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2e13f8"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f9231c"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-56bac3"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-56bac3"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e1b387"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-56bac3"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e1b387"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" client: "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa551"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-6aa551"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" )."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"<() "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":">(() "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d8ae04"},"children":[{"type":"text","value":"// TODO: implement me"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"not implemented\""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d8ae04"},"children":[{"type":"text","value":"// append `access` token to all requests"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"`Bearer ${"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-d62a38"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d8ae04"},"children":[{"type":"text","value":"// refreshing interceptor"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c914e9"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5f05f"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"Bearer \""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"{{ "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }}"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":""}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useAPI"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b5f05f{color:#79C0FF}.ct-c914e9{color:#79C0FF}.ct-d62a38{color:#A5D6FF}.ct-d8ae04{color:#8B949E}.ct-6aa551{color:#FFA657}.ct-a6dcf7{color:#79C0FF}.ct-27dc65{color:#79C0FF}.ct-20aed0{color:#FF7B72}.ct-bd5cc0{color:#D2A8FF}.ct-e1b387{color:#79C0FF}.ct-56bac3{color:#FF7B72}.ct-3f6699{color:#FFA657}.ct-f9231c{color:#79C0FF}.ct-2e13f8{color:#FFA657}.ct-b1e847{color:#C9D1D9}.ct-acf9eb{color:#FF7B72}.ct-eaceea{color:#A5D6FF}.ct-c1a85b{color:#C9D1D9}.ct-0f3f1f{color:#C9D1D9}.ct-6deb7a{color:#FF7B72}.light .ct-6deb7a{color:#859900}.light .ct-0f3f1f{color:#657B83}.light .ct-c1a85b{color:#268BD2}.light .ct-eaceea{color:#2AA198}.light .ct-acf9eb{color:#073642}.light .ct-b1e847{color:#657B83}.light .ct-2e13f8{color:#268BD2}.light .ct-f9231c{color:#657B83}.light .ct-3f6699{color:#657B83}.light .ct-56bac3{color:#859900}.light .ct-e1b387{color:#859900}.light .ct-bd5cc0{color:#268BD2}.light .ct-20aed0{color:#073642}.light .ct-27dc65{color:#859900}.light .ct-a6dcf7{color:#268BD2}.light .ct-6aa551{color:#268BD2}.light .ct-d8ae04{color:#93A1A1}.light .ct-d62a38{color:#657B83}.light .ct-c914e9{color:#D33682}.light .ct-b5f05f{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios refresh token on React.md","_source":"content","_file":"Frontend/React/Axios refresh token on React.md","_extension":"md"},{"_path":"/frontend/react/axios-with-abortcontroller","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios With AbortController","description":"If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-abd3e2"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-abd3e2"},"children":[{"type":"text","value":"'axios'"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useGetUsers"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"());"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-abd3e2"},"children":[{"type":"text","value":"\"/\""}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-090d13"},"children":[{"type":"text","value":"// params and props here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" signal: "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"signal"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"data"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"abort"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-090d13"},"children":[{"type":"text","value":"// controller should be rewritten or all requests will fail"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-090d13{color:#8B949E}.ct-d3409b{color:#D2A8FF}.ct-10f6d9{color:#79C0FF}.ct-6aa8a7{color:#FF7B72}.ct-abd3e2{color:#A5D6FF}.ct-74d66d{color:#C9D1D9}.ct-9c1e46{color:#C9D1D9}.ct-17fc5c{color:#FF7B72}.light .ct-17fc5c{color:#859900}.light .ct-9c1e46{color:#657B83}.light .ct-74d66d{color:#268BD2}.light .ct-abd3e2{color:#2AA198}.light .ct-6aa8a7{color:#073642}.light .ct-10f6d9{color:#268BD2}.light .ct-d3409b{color:#268BD2}.light .ct-090d13{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios with AbortController.md","_source":"content","_file":"Frontend/React/Axios with AbortController.md","_extension":"md"},{"_path":"/frontend/vue/adding-global-properties-to-component","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Adding Global Properties To Component","description":"The topic's fully covered in the official documentation and in Add global variable to window.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7be4af"},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-285d16"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-54fd65"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-285d16"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5aa20"},"children":[{"type":"text","value":"'axios'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dbee56"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbee56"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5aa20"},"children":[{"type":"text","value":"'vue'"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbee56"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27cea4"},"children":[{"type":"text","value":"ComponentCustomProperties"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3491b4"},"children":[{"type":"text","value":"$translate"}]},{"type":"element","tag":"span","props":{"class":"ct-b85a31"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-ede204"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-b85a31"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e6ad5b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-4b0489"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e6ad5b"},"children":[{"type":"text","value":"string"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-4b0489{color:#FF7B72}.ct-e6ad5b{color:#79C0FF}.ct-ede204{color:#FFA657}.ct-b85a31{color:#FF7B72}.ct-3491b4{color:#D2A8FF}.ct-450b61{color:#C9D1D9}.ct-27cea4{color:#FFA657}.ct-dbee56{color:#FF7B72}.ct-b5aa20{color:#A5D6FF}.ct-54fd65{color:#C9D1D9}.ct-8997cb{color:#C9D1D9}.ct-285d16{color:#FF7B72}.ct-7be4af{color:#8B949E}.light .ct-7be4af{color:#93A1A1}.light .ct-285d16{color:#859900}.light .ct-8997cb{color:#657B83}.light .ct-54fd65{color:#268BD2}.light .ct-b5aa20{color:#2AA198}.light .ct-dbee56{color:#073642}.light .ct-27cea4{color:#268BD2}.light .ct-450b61{color:#657B83}.light .ct-3491b4{color:#268BD2}.light .ct-b85a31{color:#859900}.light .ct-ede204{color:#657B83}.light .ct-e6ad5b{color:#859900}.light .ct-4b0489{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Adding global properties to component.md","_source":"content","_file":"Frontend/Vue/Adding global properties to component.md","_extension":"md"},{"_path":"/frontend/vue/make-nuxt-handle-obsidian-highlights","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Make Nuxt Handle Obsidian Highlights","description":"By default Nuxt Content Plugin not handling highlight links. To fix that we will create Nitro plugin:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-740e3d"},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3f1b56"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f1b56"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5a4b"},"children":[{"type":"text","value":"defineNitroPlugin"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":"((nitroApp) "}]},{"type":"element","tag":"span","props":{"class":"ct-f045aa"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fc50c4"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"nitroApp"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"hooks"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-235547"},"children":[{"type":"text","value":"hook"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3a3ac7"},"children":[{"type":"text","value":"\"content:file:beforeParse\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"_id"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-235547"},"children":[{"type":"text","value":"endsWith"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3a3ac7"},"children":[{"type":"text","value":"\".md\""}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-235547"},"children":[{"type":"text","value":"replace"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0961cb"},"children":[{"type":"text","value":"/==("}]},{"type":"element","tag":"span","props":{"class":"ct-e42be0"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"^"}]},{"type":"element","tag":"span","props":{"class":"ct-e42be0"},"children":[{"type":"text","value":"=]"}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-0961cb"},"children":[{"type":"text","value":")==/"}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"gs"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3a3ac7"},"children":[{"type":"text","value":"`$1`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fc50c4"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-fc50c4"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e42be0{color:#79C0FF}.ct-0961cb{color:#A5D6FF}.ct-a08f23{color:#FF7B72}.ct-3a3ac7{color:#A5D6FF}.ct-235547{color:#D2A8FF}.ct-dfb834{color:#C9D1D9}.ct-081992{color:#C9D1D9}.ct-fc50c4{color:#C9D1D9}.ct-f045aa{color:#FF7B72}.ct-4b5a4b{color:#D2A8FF}.ct-eae72d{color:#FFA657}.ct-3f1b56{color:#FF7B72}.ct-740e3d{color:#8B949E}.light .ct-740e3d{color:#93A1A1}.light .ct-3f1b56{color:#859900}.light .ct-eae72d{color:#657B83}.light .ct-4b5a4b{color:#268BD2}.light .ct-f045aa{color:#073642}.light .ct-fc50c4{color:#657B83}.light .ct-081992{color:#657B83}.light .ct-dfb834{color:#268BD2}.light .ct-235547{color:#268BD2}.light .ct-3a3ac7{color:#2AA198}.light .ct-a08f23{color:#859900}.light .ct-0961cb{color:#D30102}.light .ct-e42be0{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Make Nuxt handle Obsidian highlights.md","_source":"content","_file":"Frontend/Vue/Make Nuxt handle Obsidian highlights.md","_extension":"md"},{"_path":"/git/force-git-to-use-https","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Force Git To Use HTTPS","description":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[url \"https://github.com\"]\n insteadOf = git://github.com\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":"[url "}]},{"type":"element","tag":"span","props":{"class":"ct-4e2a11"},"children":[{"type":"text","value":"\"https://github.com\""}]},{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":" insteadOf "}]},{"type":"element","tag":"span","props":{"class":"ct-0b086c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":" git:"}]},{"type":"element","tag":"span","props":{"class":"ct-2cc518"},"children":[{"type":"text","value":"//github.com"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-2cc518{color:#8B949E}.ct-0b086c{color:#FF7B72}.ct-4e2a11{color:#A5D6FF}.ct-79f868{color:#C9D1D9}.light .ct-79f868{color:#657B83}.light .ct-4e2a11{color:#2AA198}.light .ct-0b086c{color:#859900}.light .ct-2cc518{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Force git to use HTTPS.md","_source":"content","_file":"Git/Force git to use HTTPS.md","_extension":"md"},{"_path":"/git/git-aliases-and-useful-commands","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Git Aliases And Useful Commands","description":"Shorthands for #git commands can be specified. Should be placed at ~/.gitconfig.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n"}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"[alias]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" flush "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" git clean"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"branches branch "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"v master "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" xargs git branch "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"D"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" lol "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" log "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"oneline "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"graph"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" l "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" lol"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" c "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" cv "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"no"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"verify "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" push"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" pf "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"force"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"with"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"lease"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" ignore"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"now "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" update"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"index "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"skip"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"worktree"}]}]}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-5b0f51{color:#FF7B72}.ct-549b5e{color:#C9D1D9}.light .ct-549b5e{color:#657B83}.light .ct-5b0f51{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Git aliases and useful commands.md","_source":"content","_file":"Git/Git aliases and useful commands.md","_extension":"md"},{"_path":"/graphql/apollo-client-pagination","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Apollo Client Pagination","description":"Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"listItems"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"filter"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"sort"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"limit"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"): "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"input"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3eb7ef"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3eb7ef"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": ["}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Item"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Int"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'@apollo/client'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" cache: "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"({ "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5715ec"},"children":[{"type":"text","value":"TypePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" Query: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" fields: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// query name"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" listItems: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// apollo will serialize and use keyArgs as unique"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// identifier in cache for every query"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// consider choosing the right fields, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// i.e. limit and offset won't work here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" keyArgs: ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'sort'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// primitive type"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'filter'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", ["}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'name'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'type'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// nested fields of `filter`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" merge: "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-03c1f7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-300d60"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-03c1f7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// no existing data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// If hook was called multiple times"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// merge cache and incoming data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// apply latest result for totalCount"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-300d60{color:#D2A8FF}.ct-03c1f7{color:#FF7B72}.ct-5715ec{color:#FFA657}.ct-ceb7b4{color:#8B949E}.ct-bf8568{color:#79C0FF}.ct-3d26cf{color:#FF7B72}.ct-fd4998{color:#A5D6FF}.ct-4fe5c9{color:#C9D1D9}.ct-f09e27{color:#FF7B72}.ct-3eb7ef{color:#79C0FF}.ct-09a5ed{color:#79C0FF}.ct-9380a8{color:#FFA657}.ct-5bb096{color:#C9D1D9}.ct-9378fe{color:#D2A8FF}.ct-fafca1{color:#C9D1D9}.ct-4be018{color:#FF7B72}.light .ct-4be018{color:#859900}.light .ct-fafca1{color:#657B83}.light .ct-9378fe{color:#268BD2}.light .ct-5bb096{color:#657B83}.light .ct-9380a8{color:#657B83}.light .ct-09a5ed{color:#859900}.light .ct-3eb7ef{color:#859900}.light .ct-f09e27{color:#859900}.light .ct-4fe5c9{color:#268BD2}.light .ct-fd4998{color:#2AA198}.light .ct-3d26cf{color:#073642}.light .ct-bf8568{color:#268BD2}.light .ct-ceb7b4{color:#93A1A1}.light .ct-5715ec{color:#268BD2}.light .ct-03c1f7{color:#073642}.light .ct-300d60{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Apollo Client pagination.md","_source":"content","_file":"GraphQL/Apollo Client pagination.md","_extension":"md"},{"_path":"/graphql/refresh-token-in-apollo-client","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Token In Apollo Client","description":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"createApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"authorization"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fa6d9f"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"<"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" >,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"ApolloClientBase"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" link: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"ApolloLink"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"setContext"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"HttpLink"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" uri: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" fetch: "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ]),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fa6d9f"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** Checks if GraphQl errors has unauthenticated error */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<{ "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"ErrorCode"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" }>)"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"isArray"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"some"}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2a139c"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// Distinguish unauthorized error here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** Detects if customFetch is sending refresh request */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"operationName"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"'RefreshToken'"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" { accessToken: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ) "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Response"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// already refreshing token, wait for it and then use refreshed token"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// or use empty authorization if refreshing failed"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fa6d9f"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":">)?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// check for unauthorized errors, if not present, just return result"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ok: "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// If unauthorized, refresh token and try again"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// can't refresh token. logging out"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// success or any non-auth error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// wait for other request's refreshing query to finish, when retry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-1e8bd7{color:#A5D6FF}.ct-c00115{color:#79C0FF}.ct-2a139c{color:#79C0FF}.ct-3cdd81{color:#FFA657}.ct-69ed27{color:#79C0FF}.ct-85eb3c{color:#C9D1D9}.ct-086f2e{color:#8B949E}.ct-fa6d9f{color:#FFA657}.ct-876196{color:#FF7B72}.ct-939946{color:#D2A8FF}.ct-2ff4e5{color:#79C0FF}.ct-aaf53c{color:#79C0FF}.ct-3b7c9f{color:#FF7B72}.ct-bf2a04{color:#FFA657}.ct-222e26{color:#C9D1D9}.ct-833262{color:#D2A8FF}.ct-b01d92{color:#FF7B72}.ct-55db43{color:#C9D1D9}.ct-ad3715{color:#FF7B72}.light .ct-ad3715{color:#859900}.light .ct-55db43{color:#657B83}.light .ct-b01d92{color:#073642}.light .ct-833262{color:#268BD2}.light .ct-222e26{color:#657B83}.light .ct-bf2a04{color:#657B83}.light .ct-3b7c9f{color:#859900}.light .ct-aaf53c{color:#859900}.light .ct-2ff4e5{color:#859900}.light .ct-939946{color:#268BD2}.light .ct-876196{color:#073642}.light .ct-fa6d9f{color:#268BD2}.light .ct-086f2e{color:#93A1A1}.light .ct-85eb3c{color:#268BD2}.light .ct-69ed27{color:#B58900}.light .ct-3cdd81{color:#268BD2}.light .ct-2a139c{color:#D33682}.light .ct-c00115{color:#268BD2}.light .ct-1e8bd7{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Refresh token in Apollo client.md","_source":"content","_file":"GraphQL/Refresh token in Apollo client.md","_extension":"md"},{"_path":"/linux/gitea-for-git-hosting","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Gitea For Git Hosting","description":"Self-hosted #git repositories with gitea and #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"gitea"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"external"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8d9103"},"children":[{"type":"text","value":"false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"gitea/gitea:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"USER_UID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"USER_GID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"./var/lib/gitea:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"./etc/gitea:/etc/gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"/etc/timezone:/etc/timezone:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"/etc/localtime:/etc/localtime:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"\"3000:3000\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"\"222:22\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8d9103{color:#79C0FF}.ct-591a8d{color:#A5D6FF}.ct-776d60{color:#C9D1D9}.ct-b2192d{color:#7EE787}.light .ct-b2192d{color:#268BD2}.light .ct-776d60{color:#657B83}.light .ct-591a8d{color:#2AA198}.light .ct-8d9103{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-with-docker-compose","depth":2,"text":"Setting up with docker-compose"}]}},"_type":"markdown","_id":"content:Linux:Gitea for git hosting.md","_source":"content","_file":"Linux/Gitea for git hosting.md","_extension":"md"},{"_path":"/linux/google-photos-alternative-with-photoprism","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Google Photos Alternative With Photoprism","description":"Photo Prism is a free alternative to Google photos, can be set up with #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"'3.5'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"photoprism"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism__app"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism/photoprism:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"depends_on"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"mariadb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"2342:2342"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d08ea5"},"children":[{"type":"text","value":"# HTTP port (host:container)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_ADMIN_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"password\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"https://service.url/\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_ORIGINALS_LIMIT"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b8b9f9"},"children":[{"type":"text","value":"5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_HTTP_COMPRESSION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"gzip\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DEBUG"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_PUBLIC"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_READONLY"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_EXPERIMENTAL"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CHOWN"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_WEBDAV"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_SETTINGS"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_TENSORFLOW"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_FACES"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CLASSIFICATION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DARKTABLE_PRESETS"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DETECT_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_UPLOAD_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"true\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_DRIVER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_SERVER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"mariadb:3306\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_NAME"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"photoprism\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"root\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"insecure\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_TITLE"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"PhotoPrism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_CAPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"Browse Your Life\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_DESCRIPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_AUTHOR"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"HOME"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"working_dir"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./data/originals:/photoprism/originals\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./data/imports:/photoprism/import\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./data/storage:/photoprism/storage\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"mariadb"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism__db"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"mariadb:10.6"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./database:/var/lib/mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d08ea5"},"children":[{"type":"text","value":"# Important, don't remove"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_ROOT_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"insecure"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_DATABASE"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"insecure"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b8b9f9{color:#79C0FF}.ct-d08ea5{color:#8B949E}.ct-c16363{color:#A5D6FF}.ct-ae203a{color:#C9D1D9}.ct-e60b7e{color:#7EE787}.light .ct-e60b7e{color:#268BD2}.light .ct-ae203a{color:#657B83}.light .ct-c16363{color:#2AA198}.light .ct-d08ea5{color:#93A1A1}.light .ct-b8b9f9{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"docker-compose-file-to-run-it","depth":2,"text":"Docker compose file to run it"}]}},"_type":"markdown","_id":"content:Linux:Google photos alternative with Photoprism.md","_source":"content","_file":"Linux/Google photos alternative with Photoprism.md","_extension":"md"},{"_path":"/linux/resume-or-start-screen-session","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Resume Or Start Screen Session","description":"Running this script will enter currently running screen session or will start new one.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":"( screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-25b057"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":" ( screen -d bash "}]},{"type":"element","tag":"span","props":{"class":"ct-25b057"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":" screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-25b057"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":" screen -SAm bash bash ) )"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-25b057{color:#FF7B72}.ct-601819{color:#C9D1D9}.light .ct-601819{color:#657B83}.light .ct-25b057{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Resume or start screen session.md","_source":"content","_file":"Linux/Resume or start screen session.md","_extension":"md"},{"_path":"/linux/rsync-file-with-ssh","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Rsync File With SSH","description":"Downloads file from #SSH with rsync and puts it in current folder.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-513342"},"children":[{"type":"text","value":"#!/bin/bash"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"PORT=22"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"HOST=example.com"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"REMOTE_PATH=/tmp"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"REMOTE_FILE=sample.text"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"DEST_PATH=./"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"rsync -a -e "}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\"ssh -p "}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"PORT"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" -P -v \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"HOST"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"REMOTE_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"REMOTE_FILE"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"DEST_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8bb2e9{color:#C9D1D9}.ct-2a82e3{color:#C9D1D9}.ct-c53a8d{color:#A5D6FF}.ct-04df41{color:#C9D1D9}.ct-513342{color:#8B949E}.light .ct-513342{color:#93A1A1}.light .ct-04df41{color:#657B83}.light .ct-c53a8d{color:#2AA198}.light .ct-2a82e3{color:#859900}.light .ct-8bb2e9{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Rsync file with SSH.md","_source":"content","_file":"Linux/Rsync file with SSH.md","_extension":"md"},{"_path":"/linux/setting-up-nginx","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Setting Up NGINX","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3354e9"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5a9c9b"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# First attempt to serve request as file, then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# as directory, then fall back to displaying a 404."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-135116"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-63cdeb"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" https://next.vault48.org"}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/fullchain.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/privkey.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3354e9"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5a9c9b"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"http://127.0.0.1:8080;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-1a0c00{color:#C9D1D9}.ct-0e486b{color:#C9D1D9}.ct-63cdeb{color:#79C0FF}.ct-f4ad27{color:#FF7B72}.ct-135116{color:#FF7B72}.ct-5a9c9b{color:#FFA657}.ct-3354e9{color:#FF7B72}.ct-fb8066{color:#C9D1D9}.ct-372d10{color:#8B949E}.ct-c39779{color:#C9D1D9}.ct-8151af{color:#FF7B72}.light .ct-8151af{color:#073642}.light .ct-c39779{color:#657B83}.light .ct-372d10{color:#93A1A1}.light .ct-fb8066{color:#657B83}.light .ct-3354e9{color:#073642}.light .ct-5a9c9b{color:#657B83}.light .ct-135116{color:#657B83}.light .ct-f4ad27{color:#859900}.light .ct-63cdeb{color:#D33682}.light .ct-0e486b{color:#859900}.light .ct-1a0c00{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"fallback-url-for-spa-s","depth":2,"text":"Fallback url for SPA-s"},{"id":"set-up-for-uploads","depth":2,"text":"Set up for uploads"},{"id":"reverse-proxy-for-https","depth":2,"text":"Reverse proxy for https"}]}},"_type":"markdown","_id":"content:Linux:Setting up NGINX.md","_source":"content","_file":"Linux/Setting up NGINX.md","_extension":"md"},{"_path":"/linux/ssh","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"SSH","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"config-aliases-for-ssh-hosts"},"children":[{"type":"text","value":"Config aliases for #SSH hosts"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"#SSH config can be used to made aliases for different hosts. Should be put at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.ssh/config"}]},{"type":"text","value":". To simply call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ssh router"}]},{"type":"text","value":" without parameters, use this:"}]},{"type":"element","tag":"code","props":{"code":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"config-aliases-for-ssh-hosts"},"children":[{"type":"text","value":"Config aliases for #SSH hosts"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"#SSH config can be used to made aliases for different hosts. Should be put at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.ssh/config"}]},{"type":"text","value":". To simply call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ssh router"}]},{"type":"text","value":" without parameters, use this:"}]},{"type":"element","tag":"code","props":{"code":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"Host router\n HostName 192.168.0.1\n IdentityFile ~/.ssh/id_rsa\n User root\n Port 22522"}]}]}]}]}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"config-aliases-for-ssh-hosts","depth":2,"text":"Config aliases for #SSH hosts"}]}},"_type":"markdown","_id":"content:Linux:SSH.md","_source":"content","_file":"Linux/SSH.md","_extension":"md"},{"_path":"/obsidian/self-hosted-obsidian-sync-with-couchdb","_dir":"obsidian","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Self Hosted Obsidian Sync With CouchDB","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"'3'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"couchserver"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"obsidian__database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"couchdb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"\"5984:5984\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"COUCHDB_USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"COUCHDB_PASSWORD=somepassword"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"./couchdb/dbdata:/opt/couchdb/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"./couchdb/local.ini:/opt/couchdb/etc/local.ini"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b9a31d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"[::]:80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cf11d4"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" https://"}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b9a31d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/fullchain.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-1efb91"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/privkey.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-1efb91"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c2ea7b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cf669a"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-c2ea7b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f992c3"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-c2ea7b"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"http://127.0.0.1:5984;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-f992c3{color:#FFA657}.ct-cf669a{color:#FF7B72}.ct-c2ea7b{color:#C9D1D9}.ct-1efb91{color:#8B949E}.ct-30a856{color:#C9D1D9}.ct-f25bca{color:#C9D1D9}.ct-cf11d4{color:#79C0FF}.ct-5d38cc{color:#FF7B72}.ct-b9a31d{color:#FF7B72}.ct-826135{color:#A5D6FF}.ct-8f7306{color:#C9D1D9}.ct-a61d69{color:#7EE787}.light .ct-a61d69{color:#268BD2}.light .ct-8f7306{color:#657B83}.light .ct-826135{color:#2AA198}.light .ct-b9a31d{color:#073642}.light .ct-5d38cc{color:#859900}.light .ct-cf11d4{color:#D33682}.light .ct-f25bca{color:#859900}.light .ct-30a856{color:#268BD2}.light .ct-1efb91{color:#93A1A1}.light .ct-c2ea7b{color:#657B83}.light .ct-cf669a{color:#073642}.light .ct-f992c3{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-environment","depth":2,"text":"Setting up environment"},{"id":"setting-up-obsidian","depth":2,"text":"Setting up Obsidian"}]}},"_type":"markdown","_id":"content:Obsidian:Self-hosted Obsidian sync with CouchDB.md","_source":"content","_file":"Obsidian/Self-hosted Obsidian sync with CouchDB.md","_extension":"md"},{"_path":"/sql/mysql-and-mariadb-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"MySQL And MariaDB Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"...\nbind-address = 0.0.0.0\n...\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"FLUSH PRIVILEGES;\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"sudo apt install mariadb-server"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"sudo mysql_secure_installation"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"bind-"}]},{"type":"element","tag":"span","props":{"class":"ct-e9e30e"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":" = 0.0.0.0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"FLUSH PRIVILEGES;"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e9e30e{color:#FF7B72}.ct-a67105{color:#C9D1D9}.light .ct-a67105{color:#657B83}.light .ct-e9e30e{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-mariadb-on-ubuntu-2004-lts","depth":2,"text":"Install MariaDB on Ubuntu 20.04 LTS"},{"id":"access-database-from-outside","depth":2,"text":"Access Database from outside"},{"id":"create-administrative-user","depth":2,"text":"Create Administrative User"}]}},"_type":"markdown","_id":"content:SQL:MySQL and MariaDB setup.md","_source":"content","_file":"SQL/MySQL and MariaDB setup.md","_extension":"md"},{"_path":"/sql/postgress-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Postgress Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"local all postgres md5\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo systemctl restart postgresql\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo apt install -y postgresql postgresql-contrib postgresql-client"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo systemctl status postgresql.service"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo -u postgres psql"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"Type "}]},{"type":"element","tag":"span","props":{"class":"ct-a79ea9"},"children":[{"type":"text","value":"\"help\""}]},{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d111f1"},"children":[{"type":"text","value":"for"}]},{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":" help."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"postgres="}]},{"type":"element","tag":"span","props":{"class":"ct-fa8005"},"children":[{"type":"text","value":"#"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9894ff"},"children":[{"type":"text","value":"local"}]},{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":" all postgres peer"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"local all postgres md5"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo systemctl restart postgresql"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-9894ff{color:#FF7B72}.ct-fa8005{color:#8B949E}.ct-d111f1{color:#FF7B72}.ct-a79ea9{color:#A5D6FF}.ct-e95df3{color:#C9D1D9}.light .ct-e95df3{color:#657B83}.light .ct-a79ea9{color:#2AA198}.light .ct-d111f1{color:#859900}.light .ct-fa8005{color:#93A1A1}.light .ct-9894ff{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-postgresql-12-on-ubuntu-2004-lts","depth":2,"text":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"},{"id":"initial-database-connection","depth":2,"text":"Initial database connection"},{"id":"set-password-for-postgres-database-user","depth":2,"text":"Set password for postgres database user","children":[{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password","depth":3,"text":"Update pg_hba.conf to allow postgres user connections with password"}]},{"id":"creation-of-additional-database-users","depth":2,"text":"Creation of additional database users"},{"id":"creation-of-additional-databases","depth":2,"text":"Creation of additional databases"}]}},"_type":"markdown","_id":"content:SQL:Postgress setup.md","_source":"content","_file":"SQL/Postgress setup.md","_extension":"md"},{"_path":"/typescript/add-global-variable-to-window","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Add Global Variable To Window","description":"Sometimes you want to add global variable to your window. That thing's called global module augmentation.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"global"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd8d0f"},"children":[{"type":"text","value":"Window"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-012b0c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// Sample.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"class"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd8d0f"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// nothing :-)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// fancyThings.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd8d0f"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-012b0c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./fancyThings\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c4f2ff"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"(); "}]},{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// ok"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c4f2ff{color:#79C0FF}.ct-9ea3f2{color:#A5D6FF}.ct-954329{color:#8B949E}.ct-012b0c{color:#79C0FF}.ct-15fddd{color:#FF7B72}.ct-5e059f{color:#D2A8FF}.ct-dd8d0f{color:#FFA657}.ct-6f6396{color:#C9D1D9}.ct-01e995{color:#C9D1D9}.ct-212578{color:#FF7B72}.light .ct-212578{color:#073642}.light .ct-01e995{color:#657B83}.light .ct-6f6396{color:#268BD2}.light .ct-dd8d0f{color:#268BD2}.light .ct-5e059f{color:#268BD2}.light .ct-15fddd{color:#859900}.light .ct-012b0c{color:#859900}.light .ct-954329{color:#93A1A1}.light .ct-9ea3f2{color:#2AA198}.light .ct-c4f2ff{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"augmenting-existing-interface","depth":2,"text":"Augmenting existing interface"}]}},"_type":"markdown","_id":"content:Typescript:Add global variable to window.md","_source":"content","_file":"Typescript/Add global variable to window.md","_extension":"md"},{"_path":"/typescript/flatten-object-with-periods","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Flatten Object With Periods","description":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'./en.json'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"typeof"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c6a9e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e75aca"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0e1dff"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-52a8c3"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-0e1dff"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5cf4"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-52a8c3"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-0e1dff"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5cf4"},"children":[{"type":"text","value":"TranslateOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-9c6a9e"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"I18nLib"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-00f008"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// plural object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"''"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" { ["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"-?:"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]>> }["}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// Fix it for you plural form"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'one'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'few'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'many'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"}${''"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'.'}${"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"4"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":">];"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b9a2e0{color:#A5D6FF}.ct-94f218{color:#79C0FF}.ct-0d1c1f{color:#79C0FF}.ct-a6989f{color:#8B949E}.ct-00f008{color:#D2A8FF}.ct-1a5cf4{color:#FFA657}.ct-52a8c3{color:#FFA657}.ct-0e1dff{color:#FF7B72}.ct-e75aca{color:#D2A8FF}.ct-5b0d40{color:#C9D1D9}.ct-9c6a9e{color:#FF7B72}.ct-d7ac62{color:#FFA657}.ct-34fed5{color:#FF7B72}.ct-a65580{color:#A5D6FF}.ct-6e0b60{color:#C9D1D9}.ct-f354ee{color:#C9D1D9}.ct-afd604{color:#FF7B72}.light .ct-afd604{color:#859900}.light .ct-f354ee{color:#657B83}.light .ct-6e0b60{color:#268BD2}.light .ct-a65580{color:#2AA198}.light .ct-34fed5{color:#073642}.light .ct-d7ac62{color:#268BD2}.light .ct-9c6a9e{color:#073642}.light .ct-5b0d40{color:#657B83}.light .ct-e75aca{color:#268BD2}.light .ct-0e1dff{color:#859900}.light .ct-52a8c3{color:#657B83}.light .ct-1a5cf4{color:#268BD2}.light .ct-00f008{color:#268BD2}.light .ct-a6989f{color:#93A1A1}.light .ct-0d1c1f{color:#859900}.light .ct-94f218{color:#D33682}.light .ct-b9a2e0{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Flatten object with periods.md","_source":"content","_file":"Typescript/Flatten object with periods.md","_extension":"md"},{"_path":"/typescript/type-guards","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Type Guards","description":"Useful for type checking at compile and run time:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cfdc67"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3073f0"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-efe9ec"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f25460"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f25460"},"children":[{"type":"text","value":"Bird"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-efe9ec"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":"is"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f25460"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-329c83"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9b70c1"},"children":[{"type":"text","value":"undefined"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2465e5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cfade6"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"getSmallPet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"fly"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-74a62f{color:#D2A8FF}.ct-cfade6{color:#79C0FF}.ct-2465e5{color:#FF7B72}.ct-9b70c1{color:#79C0FF}.ct-329c83{color:#FFA657}.ct-31eb3b{color:#C9D1D9}.ct-8b80ca{color:#FF7B72}.ct-665607{color:#C9D1D9}.ct-f25460{color:#FFA657}.ct-1f4d57{color:#FF7B72}.ct-efe9ec{color:#FFA657}.ct-3073f0{color:#D2A8FF}.ct-b29a33{color:#C9D1D9}.ct-cfdc67{color:#FF7B72}.light .ct-cfdc67{color:#073642}.light .ct-b29a33{color:#657B83}.light .ct-3073f0{color:#268BD2}.light .ct-efe9ec{color:#657B83}.light .ct-1f4d57{color:#859900}.light .ct-f25460{color:#268BD2}.light .ct-665607{color:#657B83}.light .ct-8b80ca{color:#859900}.light .ct-31eb3b{color:#268BD2}.light .ct-329c83{color:#268BD2}.light .ct-9b70c1{color:#B58900}.light .ct-2465e5{color:#073642}.light .ct-cfade6{color:#268BD2}.light .ct-74a62f{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Type guards.md","_source":"content","_file":"Typescript/Type guards.md","_extension":"md"}],"navigation":[{"title":"Blockchain","_path":"/blockchain","children":[{"title":"Common Typescript Examples","_path":"/blockchain/common-typescript-examples"},{"title":"Smart Contracts","_path":"/blockchain/smart-contracts"}]},{"title":"Css","_path":"/css","children":[{"title":"Automatic Grid Like Masonry With Pure CSS","_path":"/css/automatic-grid-like-masonry-with-pure-css"},{"title":"Sass Nth Child Iterate Mixin","_path":"/css/sass-nth-child-iterate-mixin"},{"title":"Test If Browser Supports CSS Rules","_path":"/css/test-if-browser-supports-css-rules"}]},{"title":"Docker","_path":"/docker","children":[{"title":"Building Static Pages With Docker","_path":"/docker/building-static-pages-with-docker"},{"title":"Drone Ci","_path":"/docker/drone-ci"},{"title":"Github Pages With Drone Ci","_path":"/docker/github-pages-with-drone-ci"},{"title":"Private Docker Registry","_path":"/docker/private-docker-registry"},{"title":"Refresh Containers On Pull","_path":"/docker/refresh-containers-on-pull"},{"title":"Seed Dump Inside Docker","_path":"/docker/seed-dump-inside-docker"},{"title":"Wait For Mysql","_path":"/docker/wait-for-mysql"},{"title":"Wait For Redis","_path":"/docker/wait-for-redis"}]},{"title":"Frontend","_path":"/frontend","children":[{"title":"React Native","_path":"/frontend/react-native","children":[{"title":"OAuth2 Login","_path":"/frontend/react-native/oauth2-login"},{"title":"Preserve FlatList Scroll Position In React Native","_path":"/frontend/react-native/preserve-flatlist-scroll-position-in-react-native"},{"title":"Useful Comands","_path":"/frontend/react-native/useful-comands"}]},{"title":"React","_path":"/frontend/react","children":[{"title":"Axios Refresh Token On React","_path":"/frontend/react/axios-refresh-token-on-react"},{"title":"Axios With AbortController","_path":"/frontend/react/axios-with-abortcontroller"}]},{"title":"Vue","_path":"/frontend/vue","children":[{"title":"Adding Global Properties To Component","_path":"/frontend/vue/adding-global-properties-to-component"},{"title":"Make Nuxt Handle Obsidian Highlights","_path":"/frontend/vue/make-nuxt-handle-obsidian-highlights"}]}]},{"title":"Git","_path":"/git","children":[{"title":"Force Git To Use HTTPS","_path":"/git/force-git-to-use-https"},{"title":"Git Aliases And Useful Commands","_path":"/git/git-aliases-and-useful-commands"}]},{"title":"Graphql","_path":"/graphql","children":[{"title":"Apollo Client Pagination","_path":"/graphql/apollo-client-pagination"},{"title":"Refresh Token In Apollo Client","_path":"/graphql/refresh-token-in-apollo-client"}]},{"title":"Linux","_path":"/linux","children":[{"title":"Gitea For Git Hosting","_path":"/linux/gitea-for-git-hosting"},{"title":"Google Photos Alternative With Photoprism","_path":"/linux/google-photos-alternative-with-photoprism"},{"title":"Resume Or Start Screen Session","_path":"/linux/resume-or-start-screen-session"},{"title":"Rsync File With SSH","_path":"/linux/rsync-file-with-ssh"},{"title":"Setting Up NGINX","_path":"/linux/setting-up-nginx"},{"title":"SSH","_path":"/linux/ssh"}]},{"title":"Obsidian","_path":"/obsidian","children":[{"title":"Self Hosted Obsidian Sync With CouchDB","_path":"/obsidian/self-hosted-obsidian-sync-with-couchdb"}]},{"title":"Sql","_path":"/sql","children":[{"title":"MySQL And MariaDB Setup","_path":"/sql/mysql-and-mariadb-setup"},{"title":"Postgress Setup","_path":"/sql/postgress-setup"}]},{"title":"Typescript","_path":"/typescript","children":[{"title":"Add Global Variable To Window","_path":"/typescript/add-global-variable-to-window"},{"title":"Flatten Object With Periods","_path":"/typescript/flatten-object-with-periods"},{"title":"Type Guards","_path":"/typescript/type-guards"}]}]}
\ No newline at end of file
diff --git a/api/_content/query/068glZS8Mz.json b/api/_content/query/068glZS8Mz.json
index 940b723..e2c1436 100644
--- a/api/_content/query/068glZS8Mz.json
+++ b/api/_content/query/068glZS8Mz.json
@@ -1 +1 @@
-{"_path":"/css/automatic-grid-like-masonry-with-pure-css","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Automatic Grid Like Masonry With Pure CSS","description":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04cdd5"},"children":[{"type":"text","value":"$cell: "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"250"}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04cdd5"},"children":[{"type":"text","value":"$gap: "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"20"}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".grid"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"display"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-3cd20c"},"children":[{"type":"text","value":"grid"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-template-columns"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-621784"},"children":[{"type":"text","value":"repeat"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"auto-fit"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-621784"},"children":[{"type":"text","value":"minmax"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"$cell"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-80bfbe"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-3451a2"},"children":[{"type":"text","value":"fr"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-auto-rows"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"256"}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-auto-flow"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-3cd20c"},"children":[{"type":"text","value":"row"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cd20c"},"children":[{"type":"text","value":"dense"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-column-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-60b55e"},"children":[{"type":"text","value":"grid-row-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-815e2d"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-4a8b8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".h-2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// takes 2 columns"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-column-end"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".v-2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// takes 2 rows"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-row-end"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".full-width"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// height: 1 row"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20d114"},"children":[{"type":"text","value":".top-right"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ecfd74"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// height here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8f9e10"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"-2"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-99ada1"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-d3fe3c"},"children":[{"type":"text","value":"// width here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a9e8e9"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-d3fe3c{color:#8B949E}.ct-8f9e10{color:#79C0FF}.ct-3451a2{color:#FF7B72}.ct-80bfbe{color:#79C0FF}.ct-815e2d{color:#FFA657}.ct-621784{color:#79C0FF}.ct-3cd20c{color:#79C0FF}.ct-60b55e{color:#79C0FF}.ct-4a8b8f{color:#C9D1D9}.ct-20d114{color:#79C0FF}.ct-a9e8e9{color:#C9D1D9}.ct-ecfd74{color:#FF7B72}.ct-99ada1{color:#79C0FF}.ct-04cdd5{color:#FFA657}.light .ct-04cdd5{color:#657B83}.light .ct-99ada1{color:#D33682}.light .ct-ecfd74{color:#859900}.light .ct-a9e8e9{color:#657B83}.light .ct-20d114{color:#93A1A1}.light .ct-4a8b8f{color:#657B83}.light .ct-60b55e{color:#859900}.light .ct-3cd20c{color:#657B83}.light .ct-621784{color:#268BD2}.light .ct-815e2d{color:#657B83}.light .ct-80bfbe{color:#D33682}.light .ct-3451a2{color:#859900}.light .ct-8f9e10{color:#859900}.light .ct-d3fe3c{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"basic-elements-with-double-height-or-width","depth":3,"text":"Basic elements with double height or width"},{"id":"header-that-fills-all-columns","depth":3,"text":"Header, that fills all columns"},{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner","depth":3,"text":"Stamp element, that takes 3 rows in the top right corner"}]}},"_type":"markdown","_id":"content:CSS:Automatic Grid like Masonry with pure CSS.md","_source":"content","_file":"CSS/Automatic Grid like Masonry with pure CSS.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/css/automatic-grid-like-masonry-with-pure-css","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Automatic Grid Like Masonry With Pure CSS","description":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns."}]},{"type":"element","tag":"code","props":{"code":"$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f41fce"},"children":[{"type":"text","value":"$cell: "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"250"}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f41fce"},"children":[{"type":"text","value":"$gap: "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"20"}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".grid"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"display"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-594f96"},"children":[{"type":"text","value":"grid"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-template-columns"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-3b2b55"},"children":[{"type":"text","value":"repeat"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"auto-fit"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-3b2b55"},"children":[{"type":"text","value":"minmax"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"$cell"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-6acf01"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-ce779c"},"children":[{"type":"text","value":"fr"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-auto-rows"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"256"}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-auto-flow"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-594f96"},"children":[{"type":"text","value":"row"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-594f96"},"children":[{"type":"text","value":"dense"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-column-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6bfa1"},"children":[{"type":"text","value":"grid-row-gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a907d5"},"children":[{"type":"text","value":"$gap"}]},{"type":"element","tag":"span","props":{"class":"ct-9415e6"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"basic-elements-with-double-height-or-width"},"children":[{"type":"text","value":"Basic elements with double height or width"}]},{"type":"element","tag":"code","props":{"code":".h-2 { // takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { // takes 2 rows\n grid-row-end: span 2;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".h-2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// takes 2 columns"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-column-end"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".v-2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// takes 2 rows"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-row-end"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"span"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"header-that-fills-all-columns"},"children":[{"type":"text","value":"Header, that fills all columns"}]},{"type":"element","tag":"code","props":{"code":".full-width {\n grid-row: 1 / 2; // height: 1 row\n grid-column: 1 / -1;\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".full-width"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// height: 1 row"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner"},"children":[{"type":"text","value":"Stamp element, that takes 3 rows in the top right corner"}]},{"type":"element","tag":"code","props":{"code":".top-right {\n grid-row: 1 / 3; // height here\n grid-column: -2 / -1; // width here\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca227d"},"children":[{"type":"text","value":".top-right"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-row"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-03d16f"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// height here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7d03c"},"children":[{"type":"text","value":"grid-column"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"-2"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":" / "}]},{"type":"element","tag":"span","props":{"class":"ct-5591e5"},"children":[{"type":"text","value":"-1"}]},{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-db38f7"},"children":[{"type":"text","value":"// width here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-58c1dc"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-db38f7{color:#8B949E}.ct-d7d03c{color:#79C0FF}.ct-ce779c{color:#FF7B72}.ct-6acf01{color:#79C0FF}.ct-a907d5{color:#FFA657}.ct-3b2b55{color:#79C0FF}.ct-594f96{color:#79C0FF}.ct-d6bfa1{color:#79C0FF}.ct-9415e6{color:#C9D1D9}.ct-ca227d{color:#79C0FF}.ct-58c1dc{color:#C9D1D9}.ct-03d16f{color:#FF7B72}.ct-5591e5{color:#79C0FF}.ct-f41fce{color:#FFA657}.light .ct-f41fce{color:#657B83}.light .ct-5591e5{color:#D33682}.light .ct-03d16f{color:#859900}.light .ct-58c1dc{color:#657B83}.light .ct-ca227d{color:#93A1A1}.light .ct-9415e6{color:#657B83}.light .ct-d6bfa1{color:#859900}.light .ct-594f96{color:#657B83}.light .ct-3b2b55{color:#268BD2}.light .ct-a907d5{color:#657B83}.light .ct-6acf01{color:#D33682}.light .ct-ce779c{color:#859900}.light .ct-d7d03c{color:#859900}.light .ct-db38f7{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"basic-elements-with-double-height-or-width","depth":3,"text":"Basic elements with double height or width"},{"id":"header-that-fills-all-columns","depth":3,"text":"Header, that fills all columns"},{"id":"stamp-element-that-takes-3-rows-in-the-top-right-corner","depth":3,"text":"Stamp element, that takes 3 rows in the top right corner"}]}},"_type":"markdown","_id":"content:CSS:Automatic Grid like Masonry with pure CSS.md","_source":"content","_file":"CSS/Automatic Grid like Masonry with pure CSS.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/1Q9jaWh0XH.json b/api/_content/query/1Q9jaWh0XH.json
index 3856c65..9fc9d59 100644
--- a/api/_content/query/1Q9jaWh0XH.json
+++ b/api/_content/query/1Q9jaWh0XH.json
@@ -1 +1 @@
-{"_path":"/obsidian/self-hosted-obsidian-sync-with-couchdb","_dir":"obsidian","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Self Hosted Obsidian Sync With CouchDB","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"'3'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"couchserver"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"obsidian__database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"couchdb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"\"5984:5984\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"COUCHDB_USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"COUCHDB_PASSWORD=somepassword"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a62c85"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"./couchdb/dbdata:/opt/couchdb/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7a29d8"},"children":[{"type":"text","value":"./couchdb/local.ini:/opt/couchdb/etc/local.ini"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a9183"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"[::]:80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c98f47"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" https://"}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a9183"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/fullchain.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-3e4da5"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/privkey.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-3e4da5"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1c9154"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9bcf8f"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-1c9154"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-575709"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-1c9154"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-ecb71a"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-53198e"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-774e7e"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"http://127.0.0.1:5984;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f38bb7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-575709{color:#FFA657}.ct-9bcf8f{color:#FF7B72}.ct-1c9154{color:#C9D1D9}.ct-3e4da5{color:#8B949E}.ct-53198e{color:#C9D1D9}.ct-ecb71a{color:#C9D1D9}.ct-c98f47{color:#79C0FF}.ct-774e7e{color:#FF7B72}.ct-4a9183{color:#FF7B72}.ct-7a29d8{color:#A5D6FF}.ct-f38bb7{color:#C9D1D9}.ct-a62c85{color:#7EE787}.light .ct-a62c85{color:#268BD2}.light .ct-f38bb7{color:#657B83}.light .ct-7a29d8{color:#2AA198}.light .ct-4a9183{color:#073642}.light .ct-774e7e{color:#859900}.light .ct-c98f47{color:#D33682}.light .ct-ecb71a{color:#859900}.light .ct-53198e{color:#268BD2}.light .ct-3e4da5{color:#93A1A1}.light .ct-1c9154{color:#657B83}.light .ct-9bcf8f{color:#073642}.light .ct-575709{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-environment","depth":2,"text":"Setting up environment"},{"id":"setting-up-obsidian","depth":2,"text":"Setting up Obsidian"}]}},"_type":"markdown","_id":"content:Obsidian:Self-hosted Obsidian sync with CouchDB.md","_source":"content","_file":"Obsidian/Self-hosted Obsidian sync with CouchDB.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/obsidian/self-hosted-obsidian-sync-with-couchdb","_dir":"obsidian","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Self Hosted Obsidian Sync With CouchDB","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync","rel":["nofollow"]},"children":[{"type":"text","value":"Main documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_own_server.md","rel":["nofollow"]},"children":[{"type":"text","value":"Setting up couchdb"}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-environment"},"children":[{"type":"text","value":"Setting up environment"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"First, you should create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker-compose.yml"}]},{"type":"text","value":" with the following contents:"}]},{"type":"element","tag":"code","props":{"code":"version: '3'\nservices:\n couchserver:\n container_name: obsidian__database\n image: couchdb\n restart: always\n ports:\n - \"5984:5984\"\n environment:\n - COUCHDB_USER=user\n - COUCHDB_PASSWORD=somepassword\n volumes:\n - ./couchdb/dbdata:/opt/couchdb/data\n - ./couchdb/local.ini:/opt/couchdb/etc/local.ini\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"'3'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"couchserver"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"obsidian__database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"couchdb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"\"5984:5984\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"COUCHDB_USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"COUCHDB_PASSWORD=somepassword"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a61d69"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"./couchdb/dbdata:/opt/couchdb/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-826135"},"children":[{"type":"text","value":"./couchdb/local.ini:/opt/couchdb/etc/local.ini"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then create initial config at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./couchdb/local.ini"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600\n","language":"ini"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"[couchdb]\nsingle_node=true\nmax_document_size=50000000\nmax_http_request_size=4294967296\n\n[chttpd]\nrequire_valid_user = true\n\n[chttpd_auth]\nrequire_valid_user = true\nauthentication_redirect = /_utils/session.html\n\n[httpd]\nWWW-Authenticate = Basic realm=\"couchdb\"\nenable_cors = true\n\n[cors]\norigins = app://obsidian.md,capacitor://localhost,http://localhost\ncredentials = true\nheaders = accept, authorization, content-type, origin, referer\nmethods = GET, PUT, POST, HEAD, DELETE\nmax_age = 3600"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then, in order to have sync on mobile devices, we will need a reverse proxy with nginx at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/nginx/sites-enabled/obsidian-couchdb"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n listen [::]:80;\n server_name couchdb.yourhost.com;\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n\n ssl_certificate /etc/letsencrypt/live/yourhost.com/fullchain.pem; # managed by Certbot\n ssl_certificate_key /etc/letsencrypt/live/yourhost.com/privkey.pem; # managed by Certbot\n ssl_trusted_certificate /etc/letsencrypt/live/yourhost.com/chain.pem;\n\n server_name couchdb.yourhost.com;\n client_max_body_size 200M;\n\n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n proxy_pass http://127.0.0.1:5984;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b9a31d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"[::]:80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cf11d4"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" https://"}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b9a31d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/fullchain.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-1efb91"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/privkey.pem; "}]},{"type":"element","tag":"span","props":{"class":"ct-1efb91"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"/etc/letsencrypt/live/yourhost.com/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"couchdb.yourhost.com;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c2ea7b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cf669a"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-c2ea7b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f992c3"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-c2ea7b"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-f25bca"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-30a856"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5d38cc"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"http://127.0.0.1:5984;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8f7306"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"setting-up-obsidian"},"children":[{"type":"text","value":"Setting up Obsidian"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Install "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Self-hosted LiveSync"}]},{"type":"text","value":" plugin"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Change host to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://yourhost.com"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Specify username and password"}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Press "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"test"}]},{"type":"text","value":", then "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"fetch database"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-f992c3{color:#FFA657}.ct-cf669a{color:#FF7B72}.ct-c2ea7b{color:#C9D1D9}.ct-1efb91{color:#8B949E}.ct-30a856{color:#C9D1D9}.ct-f25bca{color:#C9D1D9}.ct-cf11d4{color:#79C0FF}.ct-5d38cc{color:#FF7B72}.ct-b9a31d{color:#FF7B72}.ct-826135{color:#A5D6FF}.ct-8f7306{color:#C9D1D9}.ct-a61d69{color:#7EE787}.light .ct-a61d69{color:#268BD2}.light .ct-8f7306{color:#657B83}.light .ct-826135{color:#2AA198}.light .ct-b9a31d{color:#073642}.light .ct-5d38cc{color:#859900}.light .ct-cf11d4{color:#D33682}.light .ct-f25bca{color:#859900}.light .ct-30a856{color:#268BD2}.light .ct-1efb91{color:#93A1A1}.light .ct-c2ea7b{color:#657B83}.light .ct-cf669a{color:#073642}.light .ct-f992c3{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-environment","depth":2,"text":"Setting up environment"},{"id":"setting-up-obsidian","depth":2,"text":"Setting up Obsidian"}]}},"_type":"markdown","_id":"content:Obsidian:Self-hosted Obsidian sync with CouchDB.md","_source":"content","_file":"Obsidian/Self-hosted Obsidian sync with CouchDB.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/2vMf3x3doM.json b/api/_content/query/2vMf3x3doM.json
index eaee2d6..ded95d8 100644
--- a/api/_content/query/2vMf3x3doM.json
+++ b/api/_content/query/2vMf3x3doM.json
@@ -1 +1 @@
-{"_path":"/graphql/apollo-client-pagination","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Apollo Client Pagination","description":"Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"listItems"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"filter"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"sort"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"limit"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"): "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"input"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-119237"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-119237"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": ["}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Item"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-a8f707"},"children":[{"type":"text","value":"Int"}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'@apollo/client'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" cache: "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb815a"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"({ "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed0f73"},"children":[{"type":"text","value":"TypePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" Query: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" fields: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// query name"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" listItems: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// apollo will serialize and use keyArgs as unique"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// identifier in cache for every query"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// consider choosing the right fields, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// i.e. limit and offset won't work here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" keyArgs: ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'sort'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// primitive type"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'filter'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", ["}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'name'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-31d304"},"children":[{"type":"text","value":"'type'"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// nested fields of `filter`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" merge: "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cd2e25"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-37dac2"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5073b9"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-17a66d"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-cd2e25"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-12c795"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// no existing data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// If hook was called multiple times"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// merge cache and incoming data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c6945a"},"children":[{"type":"text","value":"// apply latest result for totalCount"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-30a16c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2f93d"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88d46c"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08b114"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-178b32"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-37dac2{color:#D2A8FF}.ct-cd2e25{color:#FF7B72}.ct-ed0f73{color:#FFA657}.ct-c6945a{color:#8B949E}.ct-e2f93d{color:#79C0FF}.ct-30a16c{color:#FF7B72}.ct-31d304{color:#A5D6FF}.ct-08b114{color:#C9D1D9}.ct-5073b9{color:#FF7B72}.ct-119237{color:#79C0FF}.ct-a8f707{color:#79C0FF}.ct-17a66d{color:#FFA657}.ct-12c795{color:#C9D1D9}.ct-fb815a{color:#D2A8FF}.ct-178b32{color:#C9D1D9}.ct-88d46c{color:#FF7B72}.light .ct-88d46c{color:#859900}.light .ct-178b32{color:#657B83}.light .ct-fb815a{color:#268BD2}.light .ct-12c795{color:#657B83}.light .ct-17a66d{color:#657B83}.light .ct-a8f707{color:#859900}.light .ct-119237{color:#859900}.light .ct-5073b9{color:#859900}.light .ct-08b114{color:#268BD2}.light .ct-31d304{color:#2AA198}.light .ct-30a16c{color:#073642}.light .ct-e2f93d{color:#268BD2}.light .ct-c6945a{color:#93A1A1}.light .ct-ed0f73{color:#268BD2}.light .ct-cd2e25{color:#073642}.light .ct-37dac2{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Apollo Client pagination.md","_source":"content","_file":"GraphQL/Apollo Client pagination.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/graphql/apollo-client-pagination","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Apollo Client Pagination","description":"Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we have "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gql"}]},{"type":"text","value":" response like this and we wan't to have pagination with it. Let's merge it as it specified in "},{"type":"element","tag":"a","props":{"href":"https://www.apollographql.com/docs/react/caching/cache-field-behavior/#the-merge-function","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]}]},{"type":"element","tag":"code","props":{"code":"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","language":"graphql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"listItems"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"filter"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"sort"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"limit"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Number"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"): "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"input"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3eb7ef"},"children":[{"type":"text","value":"Filter"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"String"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3eb7ef"},"children":[{"type":"text","value":"ItemList"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": ["}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Item"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09a5ed"},"children":[{"type":"text","value":"Int"}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"!"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will setup "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"text","value":" with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"typePolicies"}]},{"type":"text","value":" to merge incoming data in cache:"}]},{"type":"element","tag":"code","props":{"code":"import { ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst client = new ApolloClient({\n // ...\n cache: new InMemoryCache({ typePolicies }),\n // ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n // query name\n listItems: {\n // apollo will serialize and use keyArgs as unique\n // identifier in cache for every query\n // consider choosing the right fields, \n // i.e. limit and offset won't work here\n keyArgs: [\n 'sort', // primitive type\n 'filter', ['name', 'type'] // nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'@apollo/client'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"ApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" cache: "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9378fe"},"children":[{"type":"text","value":"InMemoryCache"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"({ "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"typePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5715ec"},"children":[{"type":"text","value":"TypePolicies"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" Query: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" fields: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// query name"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" listItems: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// apollo will serialize and use keyArgs as unique"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// identifier in cache for every query"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// consider choosing the right fields, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// i.e. limit and offset won't work here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" keyArgs: ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'sort'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// primitive type"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'filter'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", ["}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'name'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-fd4998"},"children":[{"type":"text","value":"'type'"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// nested fields of `filter`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" merge: "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We will need merge function "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"text","value":", which will join results of query and cached data for specific key:"}]},{"type":"element","tag":"code","props":{"code":"/** merges all sources with { items: unknown[], totalCount: number } */\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) => {\n // no existing data\n if (!existing || !args?.offset || args.offset < existing.length) {\n return incoming || [];\n }\n\n // If hook was called multiple times\n if (existing?.items?.length && args?.offset < existing.items.length) {\n return existing || [];\n }\n\n // merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n // apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"/** merges all sources with { items: unknown[], totalCount: number } */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-03c1f7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-300d60"},"children":[{"type":"text","value":"mergeItemsWithTotalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f09e27"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-9380a8"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-03c1f7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5bb096"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// no existing data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"args"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"offset"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// If hook was called multiple times"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" [];"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// merge cache and incoming data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ceb7b4"},"children":[{"type":"text","value":"// apply latest result for totalCount"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3d26cf"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf8568"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"existing"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"incoming"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4be018"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"items"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fe5c9"},"children":[{"type":"text","value":"totalCount"}]},{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fafca1"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-300d60{color:#D2A8FF}.ct-03c1f7{color:#FF7B72}.ct-5715ec{color:#FFA657}.ct-ceb7b4{color:#8B949E}.ct-bf8568{color:#79C0FF}.ct-3d26cf{color:#FF7B72}.ct-fd4998{color:#A5D6FF}.ct-4fe5c9{color:#C9D1D9}.ct-f09e27{color:#FF7B72}.ct-3eb7ef{color:#79C0FF}.ct-09a5ed{color:#79C0FF}.ct-9380a8{color:#FFA657}.ct-5bb096{color:#C9D1D9}.ct-9378fe{color:#D2A8FF}.ct-fafca1{color:#C9D1D9}.ct-4be018{color:#FF7B72}.light .ct-4be018{color:#859900}.light .ct-fafca1{color:#657B83}.light .ct-9378fe{color:#268BD2}.light .ct-5bb096{color:#657B83}.light .ct-9380a8{color:#657B83}.light .ct-09a5ed{color:#859900}.light .ct-3eb7ef{color:#859900}.light .ct-f09e27{color:#859900}.light .ct-4fe5c9{color:#268BD2}.light .ct-fd4998{color:#2AA198}.light .ct-3d26cf{color:#073642}.light .ct-bf8568{color:#268BD2}.light .ct-ceb7b4{color:#93A1A1}.light .ct-5715ec{color:#268BD2}.light .ct-03c1f7{color:#073642}.light .ct-300d60{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Apollo Client pagination.md","_source":"content","_file":"GraphQL/Apollo Client pagination.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/4AUGrl0JGY.json b/api/_content/query/4AUGrl0JGY.json
index f9dd764..7efebd9 100644
--- a/api/_content/query/4AUGrl0JGY.json
+++ b/api/_content/query/4AUGrl0JGY.json
@@ -1 +1 @@
-{"_path":"/docker/wait-for-redis","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Redis","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-63ea10"},"children":[{"type":"text","value":"# Waits for redis to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9439e0"},"children":[{"type":"text","value":"wait_for_redis"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-63ea10"},"children":[{"type":"text","value":"# 3 minutes"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-db192f"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" redis-cli -h localhost -p 6379 -a "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" ping "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\"PONG\""}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":"/dev/null "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"2>&1;"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-203c5d"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db192f"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":"\"[Error] can't properly ping Redis container after "}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-0fe3ba"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a015fb"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-95138e"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db192f"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222421"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26852d"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-63ea10"},"children":[{"type":"text","value":"# usage: wait_for_redis miin-redis-dev password"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-203c5d{color:#79C0FF}.ct-0fe3ba{color:#C9D1D9}.ct-a015fb{color:#C9D1D9}.ct-95138e{color:#A5D6FF}.ct-db192f{color:#79C0FF}.ct-222421{color:#FF7B72}.ct-26852d{color:#C9D1D9}.ct-9439e0{color:#D2A8FF}.ct-63ea10{color:#8B949E}.light .ct-63ea10{color:#93A1A1}.light .ct-9439e0{color:#268BD2}.light .ct-26852d{color:#657B83}.light .ct-222421{color:#859900}.light .ct-db192f{color:#268BD2}.light .ct-95138e{color:#2AA198}.light .ct-a015fb{color:#859900}.light .ct-0fe3ba{color:#268BD2}.light .ct-203c5d{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for redis.md","_source":"content","_file":"Docker/Wait for redis.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/docker/wait-for-redis","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Redis","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful ping or exits with non-zero status after 3 minutes."}]},{"type":"element","tag":"code","props":{"code":"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e2a55f"},"children":[{"type":"text","value":"# Waits for redis to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5a016a"},"children":[{"type":"text","value":"wait_for_redis"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-e2a55f"},"children":[{"type":"text","value":"# 3 minutes"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-88c314"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" redis-cli -h localhost -p 6379 -a "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" ping "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\"PONG\""}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":"/dev/null "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"2>&1;"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-9ea1e0"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88c314"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":"\"[Error] can't properly ping Redis container after "}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-b588f8"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-560d90"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-daf8c0"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-88c314"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c4ed1"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d05dd6"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e2a55f"},"children":[{"type":"text","value":"# usage: wait_for_redis miin-redis-dev password"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20mysql"},"children":[{"type":"text","value":"Wait for mysql"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-9ea1e0{color:#79C0FF}.ct-b588f8{color:#C9D1D9}.ct-560d90{color:#C9D1D9}.ct-daf8c0{color:#A5D6FF}.ct-88c314{color:#79C0FF}.ct-5c4ed1{color:#FF7B72}.ct-d05dd6{color:#C9D1D9}.ct-5a016a{color:#D2A8FF}.ct-e2a55f{color:#8B949E}.light .ct-e2a55f{color:#93A1A1}.light .ct-5a016a{color:#268BD2}.light .ct-d05dd6{color:#657B83}.light .ct-5c4ed1{color:#859900}.light .ct-88c314{color:#268BD2}.light .ct-daf8c0{color:#2AA198}.light .ct-560d90{color:#859900}.light .ct-b588f8{color:#268BD2}.light .ct-9ea1e0{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for redis.md","_source":"content","_file":"Docker/Wait for redis.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/8cFyiEqgoq.json b/api/_content/query/8cFyiEqgoq.json
index f1d6282..138fc10 100644
--- a/api/_content/query/8cFyiEqgoq.json
+++ b/api/_content/query/8cFyiEqgoq.json
@@ -1 +1 @@
-{"_path":"/blockchain/common-typescript-examples","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Common Typescript Examples","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// URL of your node"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://...'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-52c610"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ecc854"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-732e69"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-ecc854"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b6c97"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// first we need to authorize"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// then we can get wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getCurrentAddressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getTransactionCount"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" gasLimit: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" nonce: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"EthUtil"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"Transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"sign"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"serialize"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"this"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"`0x${"}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-00f7a0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-00f7a0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'hex'"}]},{"type":"element","tag":"span","props":{"class":"ct-00f7a0"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"estimateFee"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7d50a2"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"asciiToHex"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"fromWei"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-316544"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"())"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"multiply"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-316544"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"()))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'accountsChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'chainChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"handler"}]},{"type":"element","tag":"span","props":{"class":"ct-50efd0"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'wallet_watchAsset'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" params: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" type: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ERC20'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" options: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" address: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'0xb60e8dd61c5d32be8058bb8eb970870f07233155'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'FOO'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ccdd"},"children":[{"type":"text","value":"18"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" image: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://foo.io/token-image.svg'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-52c610"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-732e69"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e4f0fc"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-a561b5"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'FOO successfully added to wallet!'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-316544"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'Something went wrong.'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":")"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"getChainID"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-cc666e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'eth_chainId'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'wallet_switchEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" params: [{ chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }], "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"switchError"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// This error code indicates that the chain has not been added to MetaMask."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ccdd"},"children":[{"type":"text","value":"4902"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-803092"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'wallet_addEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" params: [{ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" chainName: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'Ropsten Test Network'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" nativeCurrency: { "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" name: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-e2ccdd"},"children":[{"type":"text","value":"18"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" rpcUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"], "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" blockExplorerUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-18eb89"},"children":[{"type":"text","value":"'https://ropsten.etherscan.io'"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }] ,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-5b3668"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-95374b"},"children":[{"type":"text","value":"addError"}]},{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// handle \"add\" error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c661a8"},"children":[{"type":"text","value":"// handle other \"switch\" errors"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0de14f"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e2ccdd{color:#79C0FF}.ct-50efd0{color:#C9D1D9}.ct-316544{color:#79C0FF}.ct-00f7a0{color:#A5D6FF}.ct-3b6c97{color:#79C0FF}.ct-732e69{color:#FFA657}.ct-ecc854{color:#FF7B72}.ct-52c610{color:#D2A8FF}.ct-a561b5{color:#C9D1D9}.ct-e4f0fc{color:#FF7B72}.ct-803092{color:#D2A8FF}.ct-7d50a2{color:#79C0FF}.ct-cc666e{color:#FF7B72}.ct-c661a8{color:#8B949E}.ct-18eb89{color:#A5D6FF}.ct-95374b{color:#C9D1D9}.ct-0de14f{color:#C9D1D9}.ct-5b3668{color:#FF7B72}.light .ct-5b3668{color:#859900}.light .ct-0de14f{color:#657B83}.light .ct-95374b{color:#268BD2}.light .ct-18eb89{color:#2AA198}.light .ct-c661a8{color:#93A1A1}.light .ct-cc666e{color:#073642}.light .ct-7d50a2{color:#268BD2}.light .ct-803092{color:#268BD2}.light .ct-e4f0fc{color:#073642}.light .ct-a561b5{color:#657B83}.light .ct-52c610{color:#268BD2}.light .ct-ecc854{color:#859900}.light .ct-732e69{color:#657B83}.light .ct-3b6c97{color:#859900}.light .ct-00f7a0{color:#657B83}.light .ct-316544{color:#859900}.light .ct-50efd0{color:#859900}.light .ct-e2ccdd{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"connecting-to-node","depth":2,"text":"Connecting to node"},{"id":"getting-wallet-balance","depth":2,"text":"Getting wallet balance"},{"id":"getting-wallet-address","depth":2,"text":"Getting wallet address"},{"id":"sending-transaction","depth":2,"text":"Sending transaction"},{"id":"estimating-transaction-fee","depth":2,"text":"Estimating transaction FEE"},{"id":"subscribing-to-wallet-address-change","depth":2,"text":"Subscribing to wallet address change"},{"id":"watching-network-change","depth":2,"text":"Watching network change"},{"id":"adding-custom-token-to-wallet","depth":2,"text":"Adding custom token to wallet"},{"id":"changing-network-to-custom","depth":2,"text":"Changing network to custom"}]}},"_type":"markdown","_id":"content:Blockchain:Common typescript examples.md","_source":"content","_file":"Blockchain/Common typescript examples.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/blockchain/common-typescript-examples","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Common Typescript Examples","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Simple #dapp example for tests: "},{"type":"element","tag":"a","props":{"href":"https://metamask.github.io/test-dapp/","rel":["nofollow"]},"children":[{"type":"text","value":"https://metamask.github.io/test-dapp/"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Interaction with smart contracts described in "},{"type":"element","tag":"a","props":{"href":"Smart%20contracts"},"children":[{"type":"text","value":"Smart contracts"}]}]}]},{"type":"element","tag":"h2","props":{"id":"connecting-to-node"},"children":[{"type":"text","value":"Connecting to node"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If #Metamask extension installed, "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Web3.givenProvider"}]},{"type":"text","value":" is available in global window. You can use "},{"type":"element","tag":"a","props":{"href":"https://infura.io","rel":["nofollow"]},"children":[{"type":"text","value":"Infura"}]},{"type":"text","value":" or your node instead:"}]},{"type":"element","tag":"code","props":{"code":"import Web3 from 'web3';\n\n// URL of your node\nconst PROVIDER_URL = 'https://...';\n\nexport const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// URL of your node"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://...'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-balance"},"children":[{"type":"text","value":"Getting wallet balance"}]},{"type":"element","tag":"code","props":{"code":"const getBalance = async (address: string) => {\n return await web3.eth.getBalance(address);\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6309ee"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f71c1f"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-c6b204"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-f71c1f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef543d"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getBalance"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"getting-wallet-address"},"children":[{"type":"text","value":"Getting wallet address"}]},{"type":"element","tag":"code","props":{"code":"// first we need to authorize\nconst authorize = async () => {\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n}\n\n// then we can get wallet address\nconst getCurrentAddressUser = () => {\n return web3.currentProvider.selectedAddress;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// first we need to authorize"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// then we can get wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getCurrentAddressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"sending-transaction"},"children":[{"type":"text","value":"Sending transaction"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sending "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"value"}]},{"type":"text","value":" tokens with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"memo"}]},{"type":"text","value":" as value:"}]},{"type":"element","tag":"code","props":{"code":"\nconst transfer = async ({ \n from, \n to, \n value, \n memo, \n privateKey, \n gasLimit = 44000 \n}) => {\n const nonce = await web3.eth.getTransactionCount(from);\n const gasPrice = await web3.eth.getGasPrice();\n \n const rawTx = {\n from,\n to,\n value: web3.utils.toHex(Web3.utils.toWei(value, 'ether')),\n gasLimit: web3.utils.toHex(gasLimit),\n gasPrice: web3.utils.toHex(gasPrice),\n nonce: web3.utils.toHex(nonce),\n data: memo,\n };\n \n const privateKeyBuffer = EthUtil.toBuffer(privateKey);\n \n const tx = new Transaction(rawTx);\n \n tx.sign(privateKeyBuffer);\n const serializedTx = tx.serialize();\n \n return this.web3.eth.sendSignedTransaction(\n `0x${serializedTx.toString('hex')}`\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getTransactionCount"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" gasLimit: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" nonce: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"nonce"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"EthUtil"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"Transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"rawTx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"sign"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"privateKeyBuffer"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"tx"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"serialize"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"this"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"`0x${"}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"serializedTx"}]},{"type":"element","tag":"span","props":{"class":"ct-ce625f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-ce625f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'hex'"}]},{"type":"element","tag":"span","props":{"class":"ct-ce625f"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"estimating-transaction-fee"},"children":[{"type":"text","value":"Estimating transaction FEE"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful to get fixed amount of tokens from user with pre-estimated fee."}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nconst estimateFee = async ({\n from,\n to,\n value,\n memo,\n}) => {\n const gasPrice = await web3.eth.getGasPrice();\n const gasLimit = await web3.eth.estimateGas({\n from,\n to,\n value: web3.utils.toHex(web3.utils.toWei(value, 'ether')),\n data: web3.utils.asciiToHex(memo),\n }).call();\n \n return web3.utils.fromWei(\n BigInt(gasPrice.toString())\n .multiply(BigInt(gasLimit.toString()))\n .toString()\n );\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"estimateFee"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3fc83"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"to"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" value: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toWei"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ether'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"asciiToHex"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"memo"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"utils"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"fromWei"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9578c3"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"())"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"multiply"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-9578c3"},"children":[{"type":"text","value":"BigInt"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"gasLimit"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"()))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"toString"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-wallet-address-change"},"children":[{"type":"text","value":"Subscribing to wallet address change"}]},{"type":"element","tag":"code","props":{"code":"import { web3 } from '.';\n\nweb3.currentProvider.on('accountsChanged', callback);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'accountsChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"watching-network-change"},"children":[{"type":"text","value":"Watching network change"}]},{"type":"element","tag":"code","props":{"code":"ethereum.on('chainChanged', handler: (chainId: string) => void);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'chainChanged'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"handler"}]},{"type":"element","tag":"span","props":{"class":"ct-cee4e9"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"adding-custom-token-to-wallet"},"children":[{"type":"text","value":"Adding custom token to wallet"}]},{"type":"element","tag":"code","props":{"code":"window.ethereum\n .request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',\n symbol: 'FOO',\n decimals: 18,\n image: 'https://foo.io/token-image.svg',\n },\n },\n })\n .then((success) => {\n if (success) {\n console.log('FOO successfully added to wallet!')\n } else {\n throw new Error('Something went wrong.')\n }\n })\n .catch(console.error)\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'wallet_watchAsset'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" params: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" type: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ERC20'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" options: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" address: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'0xb60e8dd61c5d32be8058bb8eb970870f07233155'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'FOO'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-067f5c"},"children":[{"type":"text","value":"18"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" image: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://foo.io/token-image.svg'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-6309ee"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-c6b204"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-04c9e4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0a9a1b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"success"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'FOO successfully added to wallet!'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9578c3"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'Something went wrong.'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":")"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"changing-network-to-custom"},"children":[{"type":"text","value":"Changing network to custom"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Checking current chainId:"}]},{"type":"element","tag":"code","props":{"code":"const getChainID = async () => {\n return ethereum.request({ method: 'eth_chainId' })\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"getChainID"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b77883"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'eth_chainId'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Asking wallet to change current network:"}]},{"type":"element","tag":"code","props":{"code":"try {\n await window.ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x03' }], // ropsten chainID (3) in hex\n });\n} catch (switchError) {\n // This error code indicates that the chain has not been added to MetaMask.\n if (error.code === 4902) {\n try {\n await window.ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [{ \n chainId: '0x03', // ropsten chainID (3) in hex\n chainName: 'Ropsten Test Network', \n nativeCurrency: { \n name: 'ETH',\n symbol: 'ETH',\n decimals: 18\n }, \n rpcUrls: ['https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'], \n blockExplorerUrls: ['https://ropsten.etherscan.io'] \n }] ,\n });\n } catch (addError) {\n // handle \"add\" error\n }\n }\n // handle other \"switch\" errors\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'wallet_switchEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" params: [{ chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }], "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"switchError"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// This error code indicates that the chain has not been added to MetaMask."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-067f5c"},"children":[{"type":"text","value":"4902"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"window"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"ethereum"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-db878d"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" method: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'wallet_addEthereumChain'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" params: [{ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" chainId: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'0x03'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// ropsten chainID (3) in hex"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" chainName: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'Ropsten Test Network'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" nativeCurrency: { "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" name: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" symbol: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'ETH'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" decimals: "}]},{"type":"element","tag":"span","props":{"class":"ct-067f5c"},"children":[{"type":"text","value":"18"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }, "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" rpcUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"], "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" blockExplorerUrls: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5a580"},"children":[{"type":"text","value":"'https://ropsten.etherscan.io'"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }] ,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-2fda6e"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-608a65"},"children":[{"type":"text","value":"addError"}]},{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// handle \"add\" error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ce3254"},"children":[{"type":"text","value":"// handle other \"switch\" errors"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eb82b7"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-067f5c{color:#79C0FF}.ct-cee4e9{color:#C9D1D9}.ct-9578c3{color:#79C0FF}.ct-ce625f{color:#A5D6FF}.ct-ef543d{color:#79C0FF}.ct-c6b204{color:#FFA657}.ct-f71c1f{color:#FF7B72}.ct-6309ee{color:#D2A8FF}.ct-0a9a1b{color:#C9D1D9}.ct-04c9e4{color:#FF7B72}.ct-db878d{color:#D2A8FF}.ct-e3fc83{color:#79C0FF}.ct-b77883{color:#FF7B72}.ct-ce3254{color:#8B949E}.ct-a5a580{color:#A5D6FF}.ct-608a65{color:#C9D1D9}.ct-eb82b7{color:#C9D1D9}.ct-2fda6e{color:#FF7B72}.light .ct-2fda6e{color:#859900}.light .ct-eb82b7{color:#657B83}.light .ct-608a65{color:#268BD2}.light .ct-a5a580{color:#2AA198}.light .ct-ce3254{color:#93A1A1}.light .ct-b77883{color:#073642}.light .ct-e3fc83{color:#268BD2}.light .ct-db878d{color:#268BD2}.light .ct-04c9e4{color:#073642}.light .ct-0a9a1b{color:#657B83}.light .ct-6309ee{color:#268BD2}.light .ct-f71c1f{color:#859900}.light .ct-c6b204{color:#657B83}.light .ct-ef543d{color:#859900}.light .ct-ce625f{color:#657B83}.light .ct-9578c3{color:#859900}.light .ct-cee4e9{color:#859900}.light .ct-067f5c{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"connecting-to-node","depth":2,"text":"Connecting to node"},{"id":"getting-wallet-balance","depth":2,"text":"Getting wallet balance"},{"id":"getting-wallet-address","depth":2,"text":"Getting wallet address"},{"id":"sending-transaction","depth":2,"text":"Sending transaction"},{"id":"estimating-transaction-fee","depth":2,"text":"Estimating transaction FEE"},{"id":"subscribing-to-wallet-address-change","depth":2,"text":"Subscribing to wallet address change"},{"id":"watching-network-change","depth":2,"text":"Watching network change"},{"id":"adding-custom-token-to-wallet","depth":2,"text":"Adding custom token to wallet"},{"id":"changing-network-to-custom","depth":2,"text":"Changing network to custom"}]}},"_type":"markdown","_id":"content:Blockchain:Common typescript examples.md","_source":"content","_file":"Blockchain/Common typescript examples.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/CMMQ5oxSPg.json b/api/_content/query/CMMQ5oxSPg.json
index e4bfb69..9eeadc3 100644
--- a/api/_content/query/CMMQ5oxSPg.json
+++ b/api/_content/query/CMMQ5oxSPg.json
@@ -1 +1 @@
-{"_path":"/frontend/react/axios-with-abortcontroller","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios With AbortController","description":"If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7ad05"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7ad05"},"children":[{"type":"text","value":"'axios'"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useGetUsers"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"());"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a7ad05"},"children":[{"type":"text","value":"\"/\""}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-484999"},"children":[{"type":"text","value":"// params and props here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" signal: "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"signal"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"data"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a40d0a"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-72e4c5"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"abort"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-484999"},"children":[{"type":"text","value":"// controller should be rewritten or all requests will fail"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-49d14d"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-199340"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7726fe"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49df39"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-484999{color:#8B949E}.ct-49d14d{color:#D2A8FF}.ct-a40d0a{color:#79C0FF}.ct-72e4c5{color:#FF7B72}.ct-a7ad05{color:#A5D6FF}.ct-7726fe{color:#C9D1D9}.ct-49df39{color:#C9D1D9}.ct-199340{color:#FF7B72}.light .ct-199340{color:#859900}.light .ct-49df39{color:#657B83}.light .ct-7726fe{color:#268BD2}.light .ct-a7ad05{color:#2AA198}.light .ct-72e4c5{color:#073642}.light .ct-a40d0a{color:#268BD2}.light .ct-49d14d{color:#268BD2}.light .ct-484999{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios with AbortController.md","_source":"content","_file":"Frontend/React/Axios with AbortController.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/frontend/react/axios-with-abortcontroller","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios With AbortController","description":"If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to cancel some request, use "},{"type":"element","tag":"a","props":{"href":"https://axios-http.com/docs/cancellation","rel":["nofollow"]},"children":[{"type":"text","value":"axios with AbortController"}]},{"type":"text","value":". Previously axios used cancellation token, but now it's deprecated."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"AbortController"}]},{"type":"text","value":" can be used with a multiple requests to cancel them at once."}]},{"type":"element","tag":"code","props":{"code":"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () => {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () => {\n const result = await client.get(\"/\", {\n // params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() => {\n controller.current.abort();\n \n // controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-abd3e2"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-abd3e2"},"children":[{"type":"text","value":"'axios'"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useGetUsers"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"());"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-abd3e2"},"children":[{"type":"text","value":"\"/\""}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-090d13"},"children":[{"type":"text","value":"// params and props here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" signal: "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"signal"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"data"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10f6d9"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa8a7"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"abort"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-090d13"},"children":[{"type":"text","value":"// controller should be rewritten or all requests will fail"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d3409b"},"children":[{"type":"text","value":"AbortController"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"controller"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-17fc5c"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"get"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-74d66d"},"children":[{"type":"text","value":"cancel"}]},{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c1e46"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-090d13{color:#8B949E}.ct-d3409b{color:#D2A8FF}.ct-10f6d9{color:#79C0FF}.ct-6aa8a7{color:#FF7B72}.ct-abd3e2{color:#A5D6FF}.ct-74d66d{color:#C9D1D9}.ct-9c1e46{color:#C9D1D9}.ct-17fc5c{color:#FF7B72}.light .ct-17fc5c{color:#859900}.light .ct-9c1e46{color:#657B83}.light .ct-74d66d{color:#268BD2}.light .ct-abd3e2{color:#2AA198}.light .ct-6aa8a7{color:#073642}.light .ct-10f6d9{color:#268BD2}.light .ct-d3409b{color:#268BD2}.light .ct-090d13{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios with AbortController.md","_source":"content","_file":"Frontend/React/Axios with AbortController.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/DliR2N9mzp.json b/api/_content/query/DliR2N9mzp.json
index 544e8b4..cc08668 100644
--- a/api/_content/query/DliR2N9mzp.json
+++ b/api/_content/query/DliR2N9mzp.json
@@ -1 +1 @@
-{"_path":"/linux/setting-up-nginx","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Setting Up NGINX","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2944ef"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84152a"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# First attempt to serve request as file, then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# as directory, then fall back to displaying a 404."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b7659c"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-05c5ce"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" https://next.vault48.org"}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-40c19d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fab34"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/fullchain.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/privkey.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2944ef"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84152a"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-f39477"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-cd729e"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-71145b"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e9f30b"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"http://127.0.0.1:8080;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19a258"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-71145b{color:#C9D1D9}.ct-cd729e{color:#C9D1D9}.ct-05c5ce{color:#79C0FF}.ct-e9f30b{color:#FF7B72}.ct-b7659c{color:#FF7B72}.ct-84152a{color:#FFA657}.ct-2944ef{color:#FF7B72}.ct-f39477{color:#C9D1D9}.ct-1fab34{color:#8B949E}.ct-19a258{color:#C9D1D9}.ct-40c19d{color:#FF7B72}.light .ct-40c19d{color:#073642}.light .ct-19a258{color:#657B83}.light .ct-1fab34{color:#93A1A1}.light .ct-f39477{color:#657B83}.light .ct-2944ef{color:#073642}.light .ct-84152a{color:#657B83}.light .ct-b7659c{color:#657B83}.light .ct-e9f30b{color:#859900}.light .ct-05c5ce{color:#D33682}.light .ct-cd729e{color:#859900}.light .ct-71145b{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"fallback-url-for-spa-s","depth":2,"text":"Fallback url for SPA-s"},{"id":"set-up-for-uploads","depth":2,"text":"Set up for uploads"},{"id":"reverse-proxy-for-https","depth":2,"text":"Reverse proxy for https"}]}},"_type":"markdown","_id":"content:Linux:Setting up NGINX.md","_source":"content","_file":"Linux/Setting up NGINX.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/linux/setting-up-nginx","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Setting Up NGINX","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"fallback-url-for-spa-s"},"children":[{"type":"text","value":"Fallback url for SPA-s"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3354e9"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5a9c9b"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# First attempt to serve request as file, then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# as directory, then fall back to displaying a 404."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-135116"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-up-for-uploads"},"children":[{"type":"text","value":"Set up for uploads"}]},{"type":"element","tag":"code","props":{"code":"server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" client_max_body_size "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"200M;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"reverse-proxy-for-https"},"children":[{"type":"text","value":"Reverse proxy for https"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Given config forwards "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https"}]},{"type":"text","value":" traffic to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"http"}]},{"type":"text","value":" on port "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"8080"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"https://next.vault48.org","rel":["nofollow"]},"children":[{"type":"text","value":"https://next.vault48.org"}]},{"type":"text","value":"\nwith http2 support if possible."}]},{"type":"element","tag":"code","props":{"code":"server {\n listen 80;\n server_name next.vault48.org;\n return 301 https://next.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/vault48.org/fullchain.pem; \n ssl_certificate_key /etc/letsencrypt/live/vault48.org/privkey.pem; \n ssl_trusted_certificate /etc/letsencrypt/live/vault48.org/chain.pem;\n \n server_name next.vault48.org;\n \n location / {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http://127.0.0.1:8080;\n }\n}\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"80;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-63cdeb"},"children":[{"type":"text","value":"301"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" https://next.vault48.org"}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"request_uri"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8151af"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" listen "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"[::]:443 ssl http2;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-372d10"},"children":[{"type":"text","value":"# managed by Certbot"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" ssl_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/fullchain.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" ssl_certificate_key "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/privkey.pem; "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" ssl_trusted_certificate "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"/etc/letsencrypt/live/vault48.org/chain.pem;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" server_name "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"next.vault48.org;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3354e9"},"children":[{"type":"text","value":"location"}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5a9c9b"},"children":[{"type":"text","value":"/ "}]},{"type":"element","tag":"span","props":{"class":"ct-fb8066"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_redirect "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"off;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"Host "}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"host"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"X-Real-IP "}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"remote_addr"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_set_header "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"X-Forwarded-For "}]},{"type":"element","tag":"span","props":{"class":"ct-0e486b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-1a0c00"},"children":[{"type":"text","value":"proxy_add_x_forwarded_for"}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f4ad27"},"children":[{"type":"text","value":" proxy_pass "}]},{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"http://127.0.0.1:8080;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c39779"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-1a0c00{color:#C9D1D9}.ct-0e486b{color:#C9D1D9}.ct-63cdeb{color:#79C0FF}.ct-f4ad27{color:#FF7B72}.ct-135116{color:#FF7B72}.ct-5a9c9b{color:#FFA657}.ct-3354e9{color:#FF7B72}.ct-fb8066{color:#C9D1D9}.ct-372d10{color:#8B949E}.ct-c39779{color:#C9D1D9}.ct-8151af{color:#FF7B72}.light .ct-8151af{color:#073642}.light .ct-c39779{color:#657B83}.light .ct-372d10{color:#93A1A1}.light .ct-fb8066{color:#657B83}.light .ct-3354e9{color:#073642}.light .ct-5a9c9b{color:#657B83}.light .ct-135116{color:#657B83}.light .ct-f4ad27{color:#859900}.light .ct-63cdeb{color:#D33682}.light .ct-0e486b{color:#859900}.light .ct-1a0c00{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"fallback-url-for-spa-s","depth":2,"text":"Fallback url for SPA-s"},{"id":"set-up-for-uploads","depth":2,"text":"Set up for uploads"},{"id":"reverse-proxy-for-https","depth":2,"text":"Reverse proxy for https"}]}},"_type":"markdown","_id":"content:Linux:Setting up NGINX.md","_source":"content","_file":"Linux/Setting up NGINX.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/EH6LeCIDqM.json b/api/_content/query/EH6LeCIDqM.json
index ef70603..cdf5a3a 100644
--- a/api/_content/query/EH6LeCIDqM.json
+++ b/api/_content/query/EH6LeCIDqM.json
@@ -1 +1 @@
-{"_path":"/docker/private-docker-registry","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Private Docker Registry","description":"Suitable to work with Drone-ci for hosting private #docker images.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --entrypoint htpasswd registry:2 \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -Bbn user mypassword "}]},{"type":"element","tag":"span","props":{"class":"ct-9a510f"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" auth/registry.password"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"docker__registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"registry:2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"5000:5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_AUTH=htpasswd"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_REALM=Registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_HTTP_SECRET=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_STORAGE_DELETE_ENABLED=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"./registry/auth:/auth"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"./registry/data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"ui"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"docker__ui"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"parabuzzle/craneoperator:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"80:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1c98f9"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_HOST=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_PORT=5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_PROTOCOL=http"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"ALLOW_REGISTRY_LOGIN=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"REGISTRY_ALLOW_DELETE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"USERNAME=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"PASSWORD=password"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-612ed3"},"children":[{"type":"text","value":"# Try this first"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --rm anoxis/registry-cli \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -r https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -l user:password \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --delete \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" --num 2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-612ed3"},"children":[{"type":"text","value":"# Then this "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":"docker run -it \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -v /path/to/registry/data:/registry \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -e REGISTRY_URL=https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -e DRY_RUN="}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" -e REGISTRY_AUTH="}]},{"type":"element","tag":"span","props":{"class":"ct-eee4f4"},"children":[{"type":"text","value":"\"user:password\""}]},{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2b1875"},"children":[{"type":"text","value":" mortensrasmussen/docker-registry-manifest-cleanup"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-612ed3{color:#8B949E}.ct-eee4f4{color:#A5D6FF}.ct-1c98f9{color:#7EE787}.ct-9a510f{color:#FF7B72}.ct-2b1875{color:#C9D1D9}.light .ct-2b1875{color:#657B83}.light .ct-9a510f{color:#859900}.light .ct-1c98f9{color:#268BD2}.light .ct-eee4f4{color:#2AA198}.light .ct-612ed3{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"sample-docker-compose-for-custom-docker-registry","depth":2,"text":"Sample docker-compose for custom docker registry"},{"id":"squash-layers-on-registry","depth":2,"text":"Squash layers on registry"}]}},"_type":"markdown","_id":"content:Docker:Private docker registry.md","_source":"content","_file":"Docker/Private docker registry.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/docker/private-docker-registry","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Private Docker Registry","description":"Suitable to work with Drone-ci for hosting private #docker images.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Suitable to work with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" for hosting private #docker images."}]},{"type":"element","tag":"h2","props":{"id":"sample-docker-compose-for-custom-docker-registry"},"children":[{"type":"text","value":"Sample docker-compose for custom docker registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This one brings up private docker registry with ui. First you'll need to generate password for it:"}]},{"type":"element","tag":"code","props":{"code":"docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword > auth/registry.password\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --entrypoint htpasswd registry:2 \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -Bbn user mypassword "}]},{"type":"element","tag":"span","props":{"class":"ct-44c60f"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" auth/registry.password"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - ./registry/auth:/auth\n - ./registry/data:/data\n ui:\n container_name: docker__ui\n image: parabuzzle/craneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"docker__registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"registry:2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"5000:5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_AUTH=htpasswd"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_REALM=Registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_HTTP_SECRET=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_STORAGE_DELETE_ENABLED=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"./registry/auth:/auth"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"./registry/data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"ui"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"docker__ui"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"parabuzzle/craneoperator:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"80:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-55b310"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_HOST=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_PORT=5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_PROTOCOL=http"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"ALLOW_REGISTRY_LOGIN=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"REGISTRY_ALLOW_DELETE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"USERNAME=registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"PASSWORD=password"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"squash-layers-on-registry"},"children":[{"type":"text","value":"Squash layers on registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to squash all layers in docker registry to free up disk space."}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Run this command to mark oldest layers"}]}]},{"type":"element","tag":"code","props":{"code":"# Try this first\ndocker run \\\n --rm anoxis/registry-cli \\\n -r https://registry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v /path/to/registry/data:/registry \\\n -e REGISTRY_URL=https://registry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen/docker-registry-manifest-cleanup\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-11fc25"},"children":[{"type":"text","value":"# Try this first"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":"docker run \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --rm anoxis/registry-cli \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -r https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -l user:password \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --delete \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" --num 2"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-11fc25"},"children":[{"type":"text","value":"# Then this "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":"docker run -it \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -v /path/to/registry/data:/registry \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -e REGISTRY_URL=https://registry.url \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -e DRY_RUN="}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" -e REGISTRY_AUTH="}]},{"type":"element","tag":"span","props":{"class":"ct-8c8d33"},"children":[{"type":"text","value":"\"user:password\""}]},{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-197cbc"},"children":[{"type":"text","value":" mortensrasmussen/docker-registry-manifest-cleanup"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-11fc25{color:#8B949E}.ct-8c8d33{color:#A5D6FF}.ct-55b310{color:#7EE787}.ct-44c60f{color:#FF7B72}.ct-197cbc{color:#C9D1D9}.light .ct-197cbc{color:#657B83}.light .ct-44c60f{color:#859900}.light .ct-55b310{color:#268BD2}.light .ct-8c8d33{color:#2AA198}.light .ct-11fc25{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"sample-docker-compose-for-custom-docker-registry","depth":2,"text":"Sample docker-compose for custom docker registry"},{"id":"squash-layers-on-registry","depth":2,"text":"Squash layers on registry"}]}},"_type":"markdown","_id":"content:Docker:Private docker registry.md","_source":"content","_file":"Docker/Private docker registry.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/FLiVxDo2qK.json b/api/_content/query/FLiVxDo2qK.json
index 687d679..5833b82 100644
--- a/api/_content/query/FLiVxDo2qK.json
+++ b/api/_content/query/FLiVxDo2qK.json
@@ -1 +1 @@
-{"_path":"/typescript/add-global-variable-to-window","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Add Global Variable To Window","description":"Sometimes you want to add global variable to your window. That thing's called global module augmentation.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"global"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27a704"},"children":[{"type":"text","value":"Window"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69799c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// Sample.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"class"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27a704"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// nothing :-)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// fancyThings.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27a704"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69799c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc6c44"},"children":[{"type":"text","value":"\"./fancyThings\""}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f46b0b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bc9c15"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a5e28"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6f68a3"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8c1d3"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-70ba16"},"children":[{"type":"text","value":"(); "}]},{"type":"element","tag":"span","props":{"class":"ct-a6e8e9"},"children":[{"type":"text","value":"// ok"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-bc9c15{color:#79C0FF}.ct-cc6c44{color:#A5D6FF}.ct-a6e8e9{color:#8B949E}.ct-69799c{color:#79C0FF}.ct-7a5e28{color:#FF7B72}.ct-b8c1d3{color:#D2A8FF}.ct-27a704{color:#FFA657}.ct-6f68a3{color:#C9D1D9}.ct-70ba16{color:#C9D1D9}.ct-f46b0b{color:#FF7B72}.light .ct-f46b0b{color:#073642}.light .ct-70ba16{color:#657B83}.light .ct-6f68a3{color:#268BD2}.light .ct-27a704{color:#268BD2}.light .ct-b8c1d3{color:#268BD2}.light .ct-7a5e28{color:#859900}.light .ct-69799c{color:#859900}.light .ct-a6e8e9{color:#93A1A1}.light .ct-cc6c44{color:#2AA198}.light .ct-bc9c15{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"augmenting-existing-interface","depth":2,"text":"Augmenting existing interface"}]}},"_type":"markdown","_id":"content:Typescript:Add global variable to window.md","_source":"content","_file":"Typescript/Add global variable to window.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/typescript/add-global-variable-to-window","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Add Global Variable To Window","description":"Sometimes you want to add global variable to your window. That thing's called global module augmentation.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you want to add global variable to your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":". That thing's called "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"global module augmentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say you need to call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.doFancyThings()"}]},{"type":"text","value":". For that you should augment global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window"}]},{"type":"text","value":" interface in "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"*.d.ts"}]},{"type":"text","value":" file:"}]},{"type":"element","tag":"code","props":{"code":"declare global {\n interface Window {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"global"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd8d0f"},"children":[{"type":"text","value":"Window"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-012b0c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is useful for declaring global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.ethereum"}]},{"type":"text","value":" (or "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"window.web3"}]},{"type":"text","value":") in "},{"type":"element","tag":"a","props":{"href":"/blockchain/Common%20typescript%20examples"},"children":[{"type":"text","value":"blockchain"}]},{"type":"text","value":" projects with typescript, which use wallet browser extensions."}]},{"type":"element","tag":"h2","props":{"id":"augmenting-existing-interface"},"children":[{"type":"text","value":"Augmenting existing interface"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you have class "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Sample"}]},{"type":"text","value":" without any functionality:"}]},{"type":"element","tag":"code","props":{"code":"// Sample.ts\n\nexport class Sample {\n // nothing :-)\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// Sample.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"class"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd8d0f"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// nothing :-)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Then you want extend it with "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"doFancyThings()"}]},{"type":"text","value":" method. That can be achieved with said "},{"type":"element","tag":"a","props":{"href":"https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation","rel":["nofollow"]},"children":[{"type":"text","value":"module augmentation"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"// fancyThings.ts\nimport { Sample } from \"./Sample\";\n\ndeclare module \"./Sample\" {\n interface Sample {\n doFancyThings: () => void;\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// fancyThings.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./Sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd8d0f"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-012b0c"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now you can call "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"sample.doFancyThings()"}]},{"type":"text","value":" by importing both "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".ts"}]},{"type":"text","value":" files:"}]},{"type":"element","tag":"code","props":{"code":"import { Sample } from \"./sample\";\nimport \"./fancyThings\";\n\nconst sample = new Sample();\nsample.doFancyThings(); // ok\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./sample\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9ea3f2"},"children":[{"type":"text","value":"\"./fancyThings\""}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-212578"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c4f2ff"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-15fddd"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"Sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6f6396"},"children":[{"type":"text","value":"sample"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5e059f"},"children":[{"type":"text","value":"doFancyThings"}]},{"type":"element","tag":"span","props":{"class":"ct-01e995"},"children":[{"type":"text","value":"(); "}]},{"type":"element","tag":"span","props":{"class":"ct-954329"},"children":[{"type":"text","value":"// ok"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This example is useful for "},{"type":"element","tag":"a","props":{"href":"./Frontend/Vue/Adding%20global%20properties%20to%20component"},"children":[{"type":"text","value":"adding global properties to component"}]},{"type":"text","value":" in vue.js."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c4f2ff{color:#79C0FF}.ct-9ea3f2{color:#A5D6FF}.ct-954329{color:#8B949E}.ct-012b0c{color:#79C0FF}.ct-15fddd{color:#FF7B72}.ct-5e059f{color:#D2A8FF}.ct-dd8d0f{color:#FFA657}.ct-6f6396{color:#C9D1D9}.ct-01e995{color:#C9D1D9}.ct-212578{color:#FF7B72}.light .ct-212578{color:#073642}.light .ct-01e995{color:#657B83}.light .ct-6f6396{color:#268BD2}.light .ct-dd8d0f{color:#268BD2}.light .ct-5e059f{color:#268BD2}.light .ct-15fddd{color:#859900}.light .ct-012b0c{color:#859900}.light .ct-954329{color:#93A1A1}.light .ct-9ea3f2{color:#2AA198}.light .ct-c4f2ff{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"augmenting-existing-interface","depth":2,"text":"Augmenting existing interface"}]}},"_type":"markdown","_id":"content:Typescript:Add global variable to window.md","_source":"content","_file":"Typescript/Add global variable to window.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/KIXVn92YTN.json b/api/_content/query/KIXVn92YTN.json
index e9cd0af..783ce7c 100644
--- a/api/_content/query/KIXVn92YTN.json
+++ b/api/_content/query/KIXVn92YTN.json
@@ -1 +1 @@
-{"_path":"/frontend/react/axios-refresh-token-on-react","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios Refresh Token On React","description":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"axios\""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"React"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed108b"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1dc01d"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-ff8723"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-ff8723"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afe614"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-ff8723"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afe614"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" client: "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a16956"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-a16956"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" )."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"<() "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":">(() "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-606e86"},"children":[{"type":"text","value":"// TODO: implement me"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"not implemented\""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-606e86"},"children":[{"type":"text","value":"// append `access` token to all requests"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"`Bearer ${"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-a0b720"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-606e86"},"children":[{"type":"text","value":"// refreshing interceptor"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dfb4e"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad1994"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f5cc3b"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bbdc67"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-3b53e6"},"children":[{"type":"text","value":"\"Bearer \""}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-408400"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"{{ "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" }}"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":" {"}]},{"type":"element","tag":"span","props":{"class":"ct-0eccdd"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-741684"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":""}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useAPI"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-758597"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-16e1fa"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e23f63"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-7cb9ef"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-7d345b"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-f5cc3b{color:#79C0FF}.ct-ad1994{color:#79C0FF}.ct-a0b720{color:#A5D6FF}.ct-606e86{color:#8B949E}.ct-a16956{color:#FFA657}.ct-bbdc67{color:#79C0FF}.ct-408400{color:#79C0FF}.ct-758597{color:#FF7B72}.ct-16e1fa{color:#D2A8FF}.ct-afe614{color:#79C0FF}.ct-ff8723{color:#FF7B72}.ct-0eccdd{color:#FFA657}.ct-1dc01d{color:#79C0FF}.ct-ed108b{color:#FFA657}.ct-741684{color:#C9D1D9}.ct-5dfb4e{color:#FF7B72}.ct-3b53e6{color:#A5D6FF}.ct-7cb9ef{color:#C9D1D9}.ct-7d345b{color:#C9D1D9}.ct-e23f63{color:#FF7B72}.light .ct-e23f63{color:#859900}.light .ct-7d345b{color:#657B83}.light .ct-7cb9ef{color:#268BD2}.light .ct-3b53e6{color:#2AA198}.light .ct-5dfb4e{color:#073642}.light .ct-741684{color:#657B83}.light .ct-ed108b{color:#268BD2}.light .ct-1dc01d{color:#657B83}.light .ct-0eccdd{color:#657B83}.light .ct-ff8723{color:#859900}.light .ct-afe614{color:#859900}.light .ct-16e1fa{color:#268BD2}.light .ct-758597{color:#073642}.light .ct-408400{color:#859900}.light .ct-bbdc67{color:#268BD2}.light .ct-a16956{color:#268BD2}.light .ct-606e86{color:#93A1A1}.light .ct-a0b720{color:#657B83}.light .ct-ad1994{color:#D33682}.light .ct-f5cc3b{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios refresh token on React.md","_source":"content","_file":"Frontend/React/Axios refresh token on React.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/frontend/react/axios-refresh-token-on-react","_dir":"react","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Axios Refresh Token On React","description":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":""}]},{"type":"text","value":" component, that will handle token refresh if needed. Refresh function should, probably, be passed through component props."}]},{"type":"element","tag":"code","props":{"code":"import axios from \"axios\";\nimport React, {\n createContext,\n FC,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\n\ninterface APIProviderProps extends PropsWithChildren {\n tokens: {\n access: string;\n refresh: string;\n };\n logout: () => void;\n}\n\nconst APIContext = createContext({\n client: axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n }),\n});\n\nconst APIProvider: FC = ({ \n tokens, \n logout, \n children,\n}) => {\n const client = useRef(\n axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_ENDPOINT,\n })\n ).current;\n\n const refreshTokens = useCallback<() => string>(() => {\n // TODO: implement me\n throw new Error(\"not implemented\");\n }, []);\n\n useEffect(() => {\n if (!tokens.access) {\n return;\n }\n\n // append `access` token to all requests\n const req = client.interceptors.request.use(\n async (config) => {\n config.headers = {\n Authorization: `Bearer ${tokens.access}`,\n };\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n );\n\n // refreshing interceptor\n const resp = client.interceptors.response.use(\n (response) => {\n return response;\n },\n async function (error) {\n const originalRequest = error.config;\n\n if (error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true;\n\n const newToken = refreshTokens;\n\n return axios({\n ...originalRequest,\n headers: {\n ...originalRequest.headers,\n Authorization: \"Bearer \" + newToken,\n },\n });\n }\n\n logout();\n return Promise.reject(error);\n }\n );\n\n return () => {\n axios.interceptors.request.eject(req);\n axios.interceptors.request.eject(resp);\n };\n }, [client, tokens.access, tokens.refresh, refreshTokens, logout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useAPI = () => useContext(APIContext).client;\n\nexport { APIProvider };\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"axios\""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"React"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"react\""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2e13f8"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f9231c"},"children":[{"type":"text","value":"PropsWithChildren"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-56bac3"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-56bac3"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e1b387"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-56bac3"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e1b387"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"createContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" client: "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6aa551"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-6aa551"},"children":[{"type":"text","value":"APIProviderProps"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ({ "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"}) "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"create"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" baseURL: "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"process"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"env"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"NEXT_PUBLIC_API_ENDPOINT"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" )."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"<() "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":">(() "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d8ae04"},"children":[{"type":"text","value":"// TODO: implement me"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"not implemented\""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useEffect"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d8ae04"},"children":[{"type":"text","value":"// append `access` token to all requests"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"`Bearer ${"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-d62a38"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d8ae04"},"children":[{"type":"text","value":"// refreshing interceptor"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"use"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-acf9eb"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"config"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c914e9"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"_retry"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5f05f"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6dcf7"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"originalRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" Authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-eaceea"},"children":[{"type":"text","value":"\"Bearer \""}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"newToken"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27dc65"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"req"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"interceptors"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"eject"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"resp"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }, ["}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"access"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"refresh"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"refreshTokens"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"]);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"value"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"{{ "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" }}"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":" {"}]},{"type":"element","tag":"span","props":{"class":"ct-3f6699"},"children":[{"type":"text","value":"children"}]},{"type":"element","tag":"span","props":{"class":"ct-b1e847"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":""}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"Provider"}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":">"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useAPI"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-20aed0"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5cc0"},"children":[{"type":"text","value":"useContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIContext"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"client"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6deb7a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-c1a85b"},"children":[{"type":"text","value":"APIProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-0f3f1f"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b5f05f{color:#79C0FF}.ct-c914e9{color:#79C0FF}.ct-d62a38{color:#A5D6FF}.ct-d8ae04{color:#8B949E}.ct-6aa551{color:#FFA657}.ct-a6dcf7{color:#79C0FF}.ct-27dc65{color:#79C0FF}.ct-20aed0{color:#FF7B72}.ct-bd5cc0{color:#D2A8FF}.ct-e1b387{color:#79C0FF}.ct-56bac3{color:#FF7B72}.ct-3f6699{color:#FFA657}.ct-f9231c{color:#79C0FF}.ct-2e13f8{color:#FFA657}.ct-b1e847{color:#C9D1D9}.ct-acf9eb{color:#FF7B72}.ct-eaceea{color:#A5D6FF}.ct-c1a85b{color:#C9D1D9}.ct-0f3f1f{color:#C9D1D9}.ct-6deb7a{color:#FF7B72}.light .ct-6deb7a{color:#859900}.light .ct-0f3f1f{color:#657B83}.light .ct-c1a85b{color:#268BD2}.light .ct-eaceea{color:#2AA198}.light .ct-acf9eb{color:#073642}.light .ct-b1e847{color:#657B83}.light .ct-2e13f8{color:#268BD2}.light .ct-f9231c{color:#657B83}.light .ct-3f6699{color:#657B83}.light .ct-56bac3{color:#859900}.light .ct-e1b387{color:#859900}.light .ct-bd5cc0{color:#268BD2}.light .ct-20aed0{color:#073642}.light .ct-27dc65{color:#859900}.light .ct-a6dcf7{color:#268BD2}.light .ct-6aa551{color:#268BD2}.light .ct-d8ae04{color:#93A1A1}.light .ct-d62a38{color:#657B83}.light .ct-c914e9{color:#D33682}.light .ct-b5f05f{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React:Axios refresh token on React.md","_source":"content","_file":"Frontend/React/Axios refresh token on React.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/LKdFxpydAG.json b/api/_content/query/LKdFxpydAG.json
index 6790516..66345d8 100644
--- a/api/_content/query/LKdFxpydAG.json
+++ b/api/_content/query/LKdFxpydAG.json
@@ -1 +1 @@
-{"_path":"/sql/postgress-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Postgress Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"local all postgres md5\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo systemctl restart postgresql\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo apt install -y postgresql postgresql-contrib postgresql-client"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo systemctl status postgresql.service"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo -u postgres psql"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"Type "}]},{"type":"element","tag":"span","props":{"class":"ct-497724"},"children":[{"type":"text","value":"\"help\""}]},{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7b5636"},"children":[{"type":"text","value":"for"}]},{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":" help."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"postgres="}]},{"type":"element","tag":"span","props":{"class":"ct-b71d77"},"children":[{"type":"text","value":"#"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ddcc7a"},"children":[{"type":"text","value":"local"}]},{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":" all postgres peer"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"local all postgres md5"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"sudo systemctl restart postgresql"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-0fb960"},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-ddcc7a{color:#FF7B72}.ct-b71d77{color:#8B949E}.ct-7b5636{color:#FF7B72}.ct-497724{color:#A5D6FF}.ct-0fb960{color:#C9D1D9}.light .ct-0fb960{color:#657B83}.light .ct-497724{color:#2AA198}.light .ct-7b5636{color:#859900}.light .ct-b71d77{color:#93A1A1}.light .ct-ddcc7a{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-postgresql-12-on-ubuntu-2004-lts","depth":2,"text":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"},{"id":"initial-database-connection","depth":2,"text":"Initial database connection"},{"id":"set-password-for-postgres-database-user","depth":2,"text":"Set password for postgres database user","children":[{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password","depth":3,"text":"Update pg_hba.conf to allow postgres user connections with password"}]},{"id":"creation-of-additional-database-users","depth":2,"text":"Creation of additional database users"},{"id":"creation-of-additional-databases","depth":2,"text":"Creation of additional databases"}]}},"_type":"markdown","_id":"content:SQL:Postgress setup.md","_source":"content","_file":"SQL/Postgress setup.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/sql/postgress-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Postgress Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"local all postgres md5\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo systemctl restart postgresql\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-postgresql-12-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install -y postgresql postgresql-contrib postgresql-client\nsudo systemctl status postgresql.service\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo apt install -y postgresql postgresql-contrib postgresql-client"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo systemctl status postgresql.service"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"initial-database-connection"},"children":[{"type":"text","value":"Initial database connection"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A local connection (from the database server) can be done by the following command:"}]},{"type":"element","tag":"code","props":{"code":"sudo -u postgres psql\n\npsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))\nType \"help\" for help.\n\npostgres=#\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo -u postgres psql"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"Type "}]},{"type":"element","tag":"span","props":{"class":"ct-a79ea9"},"children":[{"type":"text","value":"\"help\""}]},{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d111f1"},"children":[{"type":"text","value":"for"}]},{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":" help."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"postgres="}]},{"type":"element","tag":"span","props":{"class":"ct-fa8005"},"children":[{"type":"text","value":"#"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"set-password-for-postgres-database-user"},"children":[{"type":"text","value":"Set password for postgres database user"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The password for the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user can be set the the quick command "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"\\password"}]},{"type":"text","value":"\nor by "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"alter user postgres password 'Supersecret'"}]},{"type":"text","value":". A connection using the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" user\nis still not possible from the \"outside\" hence to the default settings in the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password"},"children":[{"type":"text","value":"Update pg_hba.conf to allow postgres user connections with password"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"In order to allow connections of the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"postgres"}]},{"type":"text","value":" database user not using OS user\nauthentication, you have to update the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"pg_hba.conf"}]},{"type":"text","value":" which can be found under\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/postgresql/12/main/pg_hba.conf"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"sudo vi /etc/postgresql/12/main/pg_hba.conf\n\n...\nlocal all postgres peer\n...\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo vi /etc/postgresql/12/main/pg_hba.conf"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9894ff"},"children":[{"type":"text","value":"local"}]},{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":" all postgres peer"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change the last section of the above line to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"md5"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"local all postgres md5\n"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"local all postgres md5"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A restart is required in order to apply the new configuration:"}]},{"type":"element","tag":"code","props":{"code":"sudo systemctl restart postgresql\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"sudo systemctl restart postgresql"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Now a connection from outside the database host is possible e.g."}]},{"type":"element","tag":"code","props":{"code":"psql -U postgres -d postgres -h databasehostname\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e95df3"},"children":[{"type":"text","value":"psql -U postgres -d postgres -h databasehostname"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-database-users"},"children":[{"type":"text","value":"Creation of additional database users"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"A database user can be created by the following command:"}]},{"type":"element","tag":"code","props":{"code":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"create user myuser with encrypted password 'Supersecret';\nCREATE ROLE\n\npostgres=# \\du\n List of roles\n Role name | Attributes | Member of\n-----------+------------------------------------------------------------+-----------\n myuser | | {}\n postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"creation-of-additional-databases"},"children":[{"type":"text","value":"Creation of additional databases"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"One can create new Postgres databases within an instance. Therefore you can use the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"psql"}]},{"type":"text","value":"\ncommand to login (see above)."}]},{"type":"element","tag":"code","props":{"code":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE DATABASE dbname OWNER myuser;\nCREATE DATABASE\n\npostgres=# \\l\n List of databases\n Name | Owner | Encoding | Collate | Ctype | Access privileges\n-----------+----------+----------+-------------+-------------+-----------------------\n dbname | myuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |\n template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres\n template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +\n | | | | | postgres=CTc/postgres"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You can leave the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"OWNER"}]},{"type":"text","value":" section of the command, when doing so, the current user will become\nowner of the newly created database."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To change the owner of an existing database later, you can use the following command:"}]},{"type":"element","tag":"code","props":{"code":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE\n","language":"sql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"postgres=# alter database dbname owner to myuser;\nALTER DATABASE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-9894ff{color:#FF7B72}.ct-fa8005{color:#8B949E}.ct-d111f1{color:#FF7B72}.ct-a79ea9{color:#A5D6FF}.ct-e95df3{color:#C9D1D9}.light .ct-e95df3{color:#657B83}.light .ct-a79ea9{color:#2AA198}.light .ct-d111f1{color:#859900}.light .ct-fa8005{color:#93A1A1}.light .ct-9894ff{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-postgresql-12-on-ubuntu-2004-lts","depth":2,"text":"Install PostgreSQL 12 on Ubuntu 20.04 LTS"},{"id":"initial-database-connection","depth":2,"text":"Initial database connection"},{"id":"set-password-for-postgres-database-user","depth":2,"text":"Set password for postgres database user","children":[{"id":"update-pg_hbaconf-to-allow-postgres-user-connections-with-password","depth":3,"text":"Update pg_hba.conf to allow postgres user connections with password"}]},{"id":"creation-of-additional-database-users","depth":2,"text":"Creation of additional database users"},{"id":"creation-of-additional-databases","depth":2,"text":"Creation of additional databases"}]}},"_type":"markdown","_id":"content:SQL:Postgress setup.md","_source":"content","_file":"SQL/Postgress setup.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/Llpj9LBd4i.json b/api/_content/query/Llpj9LBd4i.json
index 651463e..5b41a1c 100644
--- a/api/_content/query/Llpj9LBd4i.json
+++ b/api/_content/query/Llpj9LBd4i.json
@@ -1 +1 @@
-{"_path":"/frontend/vue/adding-global-properties-to-component","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Adding Global Properties To Component","description":"The topic's fully covered in the official documentation and in Add global variable to window.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-22614b"},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5dae07"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b55f51"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5dae07"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d36ee8"},"children":[{"type":"text","value":"'axios'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-074500"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-074500"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d36ee8"},"children":[{"type":"text","value":"'vue'"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-074500"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4fc9c7"},"children":[{"type":"text","value":"ComponentCustomProperties"}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7aaab2"},"children":[{"type":"text","value":"$translate"}]},{"type":"element","tag":"span","props":{"class":"ct-fa4db5"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-a606d0"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-fa4db5"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10a450"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-63c33d"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6e6f7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-10a450"},"children":[{"type":"text","value":"string"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7f1b4a"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-63c33d{color:#FF7B72}.ct-10a450{color:#79C0FF}.ct-a606d0{color:#FFA657}.ct-fa4db5{color:#FF7B72}.ct-7aaab2{color:#D2A8FF}.ct-6e6f7c{color:#C9D1D9}.ct-4fc9c7{color:#FFA657}.ct-074500{color:#FF7B72}.ct-d36ee8{color:#A5D6FF}.ct-b55f51{color:#C9D1D9}.ct-7f1b4a{color:#C9D1D9}.ct-5dae07{color:#FF7B72}.ct-22614b{color:#8B949E}.light .ct-22614b{color:#93A1A1}.light .ct-5dae07{color:#859900}.light .ct-7f1b4a{color:#657B83}.light .ct-b55f51{color:#268BD2}.light .ct-d36ee8{color:#2AA198}.light .ct-074500{color:#073642}.light .ct-4fc9c7{color:#268BD2}.light .ct-6e6f7c{color:#657B83}.light .ct-7aaab2{color:#268BD2}.light .ct-fa4db5{color:#859900}.light .ct-a606d0{color:#657B83}.light .ct-10a450{color:#859900}.light .ct-63c33d{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Adding global properties to component.md","_source":"content","_file":"Frontend/Vue/Adding global properties to component.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/frontend/vue/adding-global-properties-to-component","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Adding Global Properties To Component","description":"The topic's fully covered in the official documentation and in Add global variable to window.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The topic's fully covered in the "},{"type":"element","tag":"a","props":{"href":"https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties","rel":["nofollow"]},"children":[{"type":"text","value":"official documentation"}]},{"type":"text","value":" and in "},{"type":"element","tag":"a","props":{"href":"Add%20global%20variable%20to%20window"},"children":[{"type":"text","value":"Add global variable to window"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For example, you want to add global "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$http"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$translate"}]},{"type":"text","value":" services to all of project's components:"}]},{"type":"element","tag":"code","props":{"code":"// ~/index.d.ts or ~/custom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) => string\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7be4af"},"children":[{"type":"text","value":"// ~/index.d.ts or ~/custom.d.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-285d16"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-54fd65"},"children":[{"type":"text","value":"axios"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-285d16"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5aa20"},"children":[{"type":"text","value":"'axios'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dbee56"},"children":[{"type":"text","value":"declare"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbee56"},"children":[{"type":"text","value":"module"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b5aa20"},"children":[{"type":"text","value":"'vue'"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbee56"},"children":[{"type":"text","value":"interface"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-27cea4"},"children":[{"type":"text","value":"ComponentCustomProperties"}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3491b4"},"children":[{"type":"text","value":"$translate"}]},{"type":"element","tag":"span","props":{"class":"ct-b85a31"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-ede204"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-b85a31"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e6ad5b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-4b0489"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-450b61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e6ad5b"},"children":[{"type":"text","value":"string"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8997cb"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-4b0489{color:#FF7B72}.ct-e6ad5b{color:#79C0FF}.ct-ede204{color:#FFA657}.ct-b85a31{color:#FF7B72}.ct-3491b4{color:#D2A8FF}.ct-450b61{color:#C9D1D9}.ct-27cea4{color:#FFA657}.ct-dbee56{color:#FF7B72}.ct-b5aa20{color:#A5D6FF}.ct-54fd65{color:#C9D1D9}.ct-8997cb{color:#C9D1D9}.ct-285d16{color:#FF7B72}.ct-7be4af{color:#8B949E}.light .ct-7be4af{color:#93A1A1}.light .ct-285d16{color:#859900}.light .ct-8997cb{color:#657B83}.light .ct-54fd65{color:#268BD2}.light .ct-b5aa20{color:#2AA198}.light .ct-dbee56{color:#073642}.light .ct-27cea4{color:#268BD2}.light .ct-450b61{color:#657B83}.light .ct-3491b4{color:#268BD2}.light .ct-b85a31{color:#859900}.light .ct-ede204{color:#657B83}.light .ct-e6ad5b{color:#859900}.light .ct-4b0489{color:#073642}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Adding global properties to component.md","_source":"content","_file":"Frontend/Vue/Adding global properties to component.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/O9PBAkuWXG.json b/api/_content/query/O9PBAkuWXG.json
index f8a6f3e..7ccaa61 100644
--- a/api/_content/query/O9PBAkuWXG.json
+++ b/api/_content/query/O9PBAkuWXG.json
@@ -1 +1 @@
-{"_path":"/graphql/refresh-token-in-apollo-client","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Token In Apollo Client","description":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"createApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"authorization"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3dfd25"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"<"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" >,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"ApolloClientBase"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" link: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"ApolloLink"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"setContext"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"HttpLink"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" uri: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" fetch: "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ]),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3dfd25"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** Checks if GraphQl errors has unauthenticated error */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<{ "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"ErrorCode"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" }>)"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"isArray"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"some"}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d2617a"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// Distinguish unauthorized error here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** Detects if customFetch is sending refresh request */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"operationName"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"'RefreshToken'"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" { accessToken: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ) "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Response"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// already refreshing token, wait for it and then use refreshed token"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// or use empty authorization if refreshing failed"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3dfd25"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":">)?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-885872"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// check for unauthorized errors, if not present, just return result"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ok: "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// If unauthorized, refresh token and try again"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d23eb"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7c44a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// can't refresh token. logging out"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-137cc3"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// success or any non-auth error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-20119f"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-826560"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-374fca"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84995a"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-eaf795"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f8c9d0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// wait for other request's refreshing query to finish, when retry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-e7fdeb"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ac7490"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a32a5"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-2d0f13"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6d61d7"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-e490f1"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-19862f"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e490f1{color:#A5D6FF}.ct-885872{color:#79C0FF}.ct-d2617a{color:#79C0FF}.ct-1d23eb{color:#FFA657}.ct-d7c44a{color:#79C0FF}.ct-2d0f13{color:#C9D1D9}.ct-ac7490{color:#8B949E}.ct-3dfd25{color:#FFA657}.ct-eaf795{color:#FF7B72}.ct-20119f{color:#D2A8FF}.ct-137cc3{color:#79C0FF}.ct-84995a{color:#79C0FF}.ct-374fca{color:#FF7B72}.ct-826560{color:#FFA657}.ct-f8c9d0{color:#C9D1D9}.ct-1a32a5{color:#D2A8FF}.ct-e7fdeb{color:#FF7B72}.ct-19862f{color:#C9D1D9}.ct-6d61d7{color:#FF7B72}.light .ct-6d61d7{color:#859900}.light .ct-19862f{color:#657B83}.light .ct-e7fdeb{color:#073642}.light .ct-1a32a5{color:#268BD2}.light .ct-f8c9d0{color:#657B83}.light .ct-826560{color:#657B83}.light .ct-374fca{color:#859900}.light .ct-84995a{color:#859900}.light .ct-137cc3{color:#859900}.light .ct-20119f{color:#268BD2}.light .ct-eaf795{color:#073642}.light .ct-3dfd25{color:#268BD2}.light .ct-ac7490{color:#93A1A1}.light .ct-2d0f13{color:#268BD2}.light .ct-d7c44a{color:#B58900}.light .ct-1d23eb{color:#268BD2}.light .ct-d2617a{color:#D33682}.light .ct-885872{color:#268BD2}.light .ct-e490f1{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Refresh token in Apollo client.md","_source":"content","_file":"GraphQL/Refresh token in Apollo client.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/graphql/refresh-token-in-apollo-client","_dir":"graphql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Token In Apollo Client","description":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client."}]},{"type":"element","tag":"code","props":{"code":"export const createApolloClient = (\n url: string,\n logout: () => void,\n getAuthorizationData: () => { authorization: string },\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n) =>\n new ApolloClientBase({\n // ...other options\n link: ApolloLink.from([\n // ...other options\n setContext(async (_, { headers }) => {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"createApolloClient"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"authorization"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fa6d9f"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"<"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" >,"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"ApolloClientBase"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" link: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"ApolloLink"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// ...other options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"setContext"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":", { "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"getAuthorizationData"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"HttpLink"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" uri: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"url"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" fetch: "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ]),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Custom fetch function for this request. You should tune "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"text","value":" and\n"},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"text","value":" to match your api."}]},{"type":"element","tag":"code","props":{"code":"/** Global singleton for refreshing promise */\nlet refreshingPromise: Promise | null = null;\n\n/** Checks if GraphQl errors has unauthenticated error */\nconst hasUnauthorizedError = (errors: Array<{ code?: ErrorCode }>): boolean =>\n Array.isArray(errors) &&\n errors.some(error => {\n return error.status === 401; // Distinguish unauthorized error here\n });\n\n/** Detects if customFetch is sending refresh request */\nconst isRefreshRequestOptions = (options: RequestInit) => {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */\nexport const fetchWithTokenRefresh =\n (\n logout: () => void,\n refreshToken: () => Promise<\n { accessToken: string; refreshToken: string } | undefined\n >,\n ) =>\n async (uri: string, options: RequestInit): Promise => {\n // already refreshing token, wait for it and then use refreshed token\n // or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() => {\n // refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response => {\n const text = await response.text();\n const json = JSON.parse(text);\n\n // check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =>\n new Promise(resolve => {\n resolve(json);\n }),\n text: async () =>\n new Promise(resolve => {\n resolve(text);\n }),\n };\n }\n\n // If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise => {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() => {\n refreshingPromise = null;\n\n // can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n // success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) => {\n // wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () => {\n // refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** Global singleton for refreshing promise */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fa6d9f"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** Checks if GraphQl errors has unauthenticated error */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<{ "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"code"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"ErrorCode"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" }>)"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"isArray"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"some"}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"status"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2a139c"},"children":[{"type":"text","value":"401"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// Distinguish unauthorized error here"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** Detects if customFetch is sending refresh request */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"operationName"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"==="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"'RefreshToken'"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"fetchWithTokenRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" { accessToken: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"undefined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":">"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ) "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"RequestInit"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Response"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// already refreshing token, wait for it and then use refreshed token"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// or use empty authorization if refreshing failed"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"&&"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fa6d9f"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":">)?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c00115"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// check for unauthorized errors, if not present, just return result"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"isRefreshRequestOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"hasUnauthorizedError"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"errors"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"response"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ok: "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"unknown"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"json"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":">("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"text"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// If unauthorized, refresh token and try again"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"refreshToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3cdd81"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"tokens"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69ed27"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// can't refresh token. logging out"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"logout"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2ff4e5"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"'Session expired'"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// success or any non-auth error"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"refreshingPromise"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-939946"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bf2a04"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-3b7c9f"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aaf53c"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-876196"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-222e26"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// wait for other request's refreshing query to finish, when retry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"newAccessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b01d92"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-086f2e"},"children":[{"type":"text","value":"// refreshing token from other request failed, retry without authorization"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-833262"},"children":[{"type":"text","value":"fetch"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"uri"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":", {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" headers: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-85eb3c"},"children":[{"type":"text","value":"headers"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad3715"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" {}),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" authorization: "}]},{"type":"element","tag":"span","props":{"class":"ct-1e8bd7"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-55db43"},"children":[{"type":"text","value":" };"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-1e8bd7{color:#A5D6FF}.ct-c00115{color:#79C0FF}.ct-2a139c{color:#79C0FF}.ct-3cdd81{color:#FFA657}.ct-69ed27{color:#79C0FF}.ct-85eb3c{color:#C9D1D9}.ct-086f2e{color:#8B949E}.ct-fa6d9f{color:#FFA657}.ct-876196{color:#FF7B72}.ct-939946{color:#D2A8FF}.ct-2ff4e5{color:#79C0FF}.ct-aaf53c{color:#79C0FF}.ct-3b7c9f{color:#FF7B72}.ct-bf2a04{color:#FFA657}.ct-222e26{color:#C9D1D9}.ct-833262{color:#D2A8FF}.ct-b01d92{color:#FF7B72}.ct-55db43{color:#C9D1D9}.ct-ad3715{color:#FF7B72}.light .ct-ad3715{color:#859900}.light .ct-55db43{color:#657B83}.light .ct-b01d92{color:#073642}.light .ct-833262{color:#268BD2}.light .ct-222e26{color:#657B83}.light .ct-bf2a04{color:#657B83}.light .ct-3b7c9f{color:#859900}.light .ct-aaf53c{color:#859900}.light .ct-2ff4e5{color:#859900}.light .ct-939946{color:#268BD2}.light .ct-876196{color:#073642}.light .ct-fa6d9f{color:#268BD2}.light .ct-086f2e{color:#93A1A1}.light .ct-85eb3c{color:#268BD2}.light .ct-69ed27{color:#B58900}.light .ct-3cdd81{color:#268BD2}.light .ct-2a139c{color:#D33682}.light .ct-c00115{color:#268BD2}.light .ct-1e8bd7{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:GraphQL:Refresh token in Apollo client.md","_source":"content","_file":"GraphQL/Refresh token in Apollo client.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/PwERR4vHv2.json b/api/_content/query/PwERR4vHv2.json
index 2548f4d..575115c 100644
--- a/api/_content/query/PwERR4vHv2.json
+++ b/api/_content/query/PwERR4vHv2.json
@@ -1 +1 @@
-{"_path":"/frontend/react-native/oauth2-login","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"OAuth2 Login","description":"Use #oauth2 login with React-Native","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-a522f0"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'react-native-app-auth'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6090e9"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f2d25a"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" issuer: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'https://accounts.google.com'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}.apps.googleusercontent.com`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`com.yourapp:/oauth2redirect/google`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'openid'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'profile'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-04bda7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"});"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-6090e9"},"children":[{"type":"text","value":"// better hide it somehow"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'com.yourapp'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6fad42"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-73c90c"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f2d25a"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" serviceConfiguration: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" authorizationEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/authorize?response_type=code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}&redirect_uri=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6090e9"},"children":[{"type":"text","value":"// TODO: replace it with your own backend to secure client_secret:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" tokenEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}&client_secret=${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-eff6f2"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'login:info'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a5991f"},"children":[{"type":"text","value":"'login:avatar'"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-04bda7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f2d25a"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a522f0"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a522f0"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-b99985"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-04bda7{color:#79C0FF}.ct-f2d25a{color:#D2A8FF}.ct-6090e9{color:#8B949E}.ct-eff6f2{color:#79C0FF}.ct-6fad42{color:#FF7B72}.ct-a5991f{color:#A5D6FF}.ct-a522f0{color:#C9D1D9}.ct-b99985{color:#C9D1D9}.ct-73c90c{color:#FF7B72}.light .ct-73c90c{color:#859900}.light .ct-b99985{color:#657B83}.light .ct-a522f0{color:#268BD2}.light .ct-a5991f{color:#2AA198}.light .ct-6fad42{color:#073642}.light .ct-eff6f2{color:#268BD2}.light .ct-6090e9{color:#93A1A1}.light .ct-f2d25a{color:#268BD2}.light .ct-04bda7{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"common-oauth2-providers","depth":2,"text":"Common OAuth2 providers","children":[{"id":"example-for-google","depth":3,"text":"Example for #Google"},{"id":"example-for-yandex","depth":3,"text":"Example for #Yandex"}]},{"id":"apple-id-login","depth":2,"text":"Apple ID login"}]}},"_type":"markdown","_id":"content:Frontend:React Native:OAuth2 login.md","_source":"content","_file":"Frontend/React Native/OAuth2 login.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/frontend/react-native/oauth2-login","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"OAuth2 Login","description":"Use #oauth2 login with React-Native","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Use #oauth2 login with React-Native"}]},{"type":"element","tag":"h2","props":{"id":"common-oauth2-providers"},"children":[{"type":"text","value":"Common OAuth2 providers"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be handled by "},{"type":"element","tag":"a","props":{"href":"react-native-app-auth"},"children":[{"type":"text","value":"react-native-app-auth"}]},{"type":"text","value":" by redirecting to url "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"com.yourapp://oauth2provider"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h3","props":{"id":"example-for-google"},"children":[{"type":"text","value":"Example for #Google"}]},{"type":"element","tag":"code","props":{"code":"import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n// ...\nconst authState = await authorize({\n issuer: 'https://accounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:/oauth2redirect/google`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6736c0"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'react-native-app-auth'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-c83c0b"},"children":[{"type":"text","value":"// ..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3914c"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" issuer: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'https://accounts.google.com'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"GOOGLE_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}.apps.googleusercontent.com`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`com.yourapp:/oauth2redirect/google`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'openid'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'profile'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-9e7db7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"});"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"example-for-yandex"},"children":[{"type":"text","value":"Example for #Yandex"}]},{"type":"element","tag":"code","props":{"code":"const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; // better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https://oauth.yandex.ru/authorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:/oauth2redirect`,\n // TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:/oauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"; "}]},{"type":"element","tag":"span","props":{"class":"ct-c83c0b"},"children":[{"type":"text","value":"// better hide it somehow"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'com.yourapp'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-16ef2e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a8a6b1"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e3914c"},"children":[{"type":"text","value":"authorize"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" serviceConfiguration: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" authorizationEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/authorize?response_type=code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}&redirect_uri=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c83c0b"},"children":[{"type":"text","value":"// TODO: replace it with your own backend to secure client_secret:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" tokenEndpoint: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`https://oauth.yandex.ru/token?grant_type=authorization_code&client_id=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}&client_secret=${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_SECRET"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" clientId: "}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"YANDEX_OAUTH_CLIENT"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" redirectUrl: "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-1b9852"},"children":[{"type":"text","value":"APP_ID"}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"}:/oauth2redirect`"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" scopes: ["}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'login:info'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-08ed27"},"children":[{"type":"text","value":"'login:avatar'"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":" dangerouslyAllowInsecureHttpRequests: "}]},{"type":"element","tag":"span","props":{"class":"ct-9e7db7"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"});"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e3914c"},"children":[{"type":"text","value":"callback"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-6736c0"},"children":[{"type":"text","value":"authState"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-6736c0"},"children":[{"type":"text","value":"accessToken"}]},{"type":"element","tag":"span","props":{"class":"ct-f88891"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"apple-id-login"},"children":[{"type":"text","value":"Apple ID login"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication","rel":["nofollow"]},"children":[{"type":"text","value":"react-native-apple-authentication"}]},{"type":"text","value":" has its own "},{"type":"element","tag":"a","props":{"href":"https://github.com/invertase/react-native-apple-authentication/tree/main/docs","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":" on setting up OAuth using Apple ID."}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-9e7db7{color:#79C0FF}.ct-e3914c{color:#D2A8FF}.ct-c83c0b{color:#8B949E}.ct-1b9852{color:#79C0FF}.ct-16ef2e{color:#FF7B72}.ct-08ed27{color:#A5D6FF}.ct-6736c0{color:#C9D1D9}.ct-f88891{color:#C9D1D9}.ct-a8a6b1{color:#FF7B72}.light .ct-a8a6b1{color:#859900}.light .ct-f88891{color:#657B83}.light .ct-6736c0{color:#268BD2}.light .ct-08ed27{color:#2AA198}.light .ct-16ef2e{color:#073642}.light .ct-1b9852{color:#268BD2}.light .ct-c83c0b{color:#93A1A1}.light .ct-e3914c{color:#268BD2}.light .ct-9e7db7{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"common-oauth2-providers","depth":2,"text":"Common OAuth2 providers","children":[{"id":"example-for-google","depth":3,"text":"Example for #Google"},{"id":"example-for-yandex","depth":3,"text":"Example for #Yandex"}]},{"id":"apple-id-login","depth":2,"text":"Apple ID login"}]}},"_type":"markdown","_id":"content:Frontend:React Native:OAuth2 login.md","_source":"content","_file":"Frontend/React Native/OAuth2 login.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/QqziXmSF9l.json b/api/_content/query/QqziXmSF9l.json
index de923d6..0be0543 100644
--- a/api/_content/query/QqziXmSF9l.json
+++ b/api/_content/query/QqziXmSF9l.json
@@ -1 +1 @@
-{"_path":"/frontend/react-native/useful-comands","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Useful Comands","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"adb logcat com.application:I \"*:S\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"keytool -printcert -jarfile \"$1\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"adb logcat com.application:I "}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\"*:S\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"keytool -printcert -jarfile "}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"npx react-native bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --platform android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --dev "}]},{"type":"element","tag":"span","props":{"class":"ct-b926df"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --entry-file index.js \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --bundle-output android/app/src/main/assets/index.android.bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" --assets-dest android/app/src/main/res/"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b926df"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" android "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" ./gradlew assembleDebug"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a892e"},"children":[{"type":"text","value":"# do your stuff"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"./gradlew clean"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b926df"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" ./android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" ./gradlew assembleRelease \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" adb install ./app/build/outputs/apk/release/app-release.apk"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a892e"},"children":[{"type":"text","value":"# ios "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"xcrun simctl openurl booted "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a892e"},"children":[{"type":"text","value":"# android"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"adb shell am start -W -a android.intent.action.VIEW -d "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"com.application"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"PACKAGE="}]},{"type":"element","tag":"span","props":{"class":"ct-3e9e6a"},"children":[{"type":"text","value":"\"com.application\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":"adb shell pm set-app-links --package "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"PACKAGE"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" 0 all "}]},{"type":"element","tag":"span","props":{"class":"ct-5c177d"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bef157"},"children":[{"type":"text","value":" adb shell pm verify-app-links --re-verify "}]},{"type":"element","tag":"span","props":{"class":"ct-7889bd"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-6b5a48"},"children":[{"type":"text","value":"PACKAGE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8a892e{color:#8B949E}.ct-5c177d{color:#FF7B72}.ct-b926df{color:#79C0FF}.ct-6b5a48{color:#C9D1D9}.ct-7889bd{color:#C9D1D9}.ct-3e9e6a{color:#A5D6FF}.ct-bef157{color:#C9D1D9}.light .ct-bef157{color:#657B83}.light .ct-3e9e6a{color:#2AA198}.light .ct-7889bd{color:#859900}.light .ct-6b5a48{color:#268BD2}.light .ct-b926df{color:#268BD2}.light .ct-5c177d{color:#859900}.light .ct-8a892e{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"show-android-logcat","depth":2,"text":"Show android logcat"},{"id":"get-apks-sha-256","depth":2,"text":"Get .apk's SHA-256"},{"id":"assemble-debug-release-on-android","depth":2,"text":"Assemble debug release on Android"},{"id":"send-release-to-android-device","depth":2,"text":"Send release to Android device"},{"id":"deep-links","depth":2,"text":"Deep links","children":[{"id":"open-deep-links","depth":3,"text":"Open deep links"},{"id":"reverify-links-on-android","depth":3,"text":"Reverify links on Android"}]}]}},"_type":"markdown","_id":"content:Frontend:React Native:Useful comands.md","_source":"content","_file":"Frontend/React Native/Useful comands.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/frontend/react-native/useful-comands","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Useful Comands","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"adb logcat com.application:I \"*:S\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"keytool -printcert -jarfile \"$1\"\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"show-android-logcat"},"children":[{"type":"text","value":"Show android logcat"}]},{"type":"element","tag":"code","props":{"code":"adb logcat com.application:I \"*:S\"\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"adb logcat com.application:I "}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\"*:S\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"get-apks-sha-256"},"children":[{"type":"text","value":"Get .apk's SHA-256"}]},{"type":"element","tag":"code","props":{"code":"keytool -printcert -jarfile \"$1\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"keytool -printcert -jarfile "}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"assemble-debug-release-on-android"},"children":[{"type":"text","value":"Assemble debug release on Android"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Packages release with bundled resources."}]},{"type":"element","tag":"code","props":{"code":"npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android/app/src/main/assets/index.android.bundle \\\n --assets-dest android/app/src/main/res/\n\ncd android && ./gradlew assembleDebug\n\n# do your stuff\n\n./gradlew clean\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"npx react-native bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --platform android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --dev "}]},{"type":"element","tag":"span","props":{"class":"ct-49aa90"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --entry-file index.js \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --bundle-output android/app/src/main/assets/index.android.bundle \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" --assets-dest android/app/src/main/res/"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49aa90"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" android "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" ./gradlew assembleDebug"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8cbcba"},"children":[{"type":"text","value":"# do your stuff"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"./gradlew clean"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"send-release-to-android-device"},"children":[{"type":"text","value":"Send release to Android device"}]},{"type":"element","tag":"code","props":{"code":"cd ./android \\\n && ./gradlew assembleRelease \\\n && adb install ./app/build/outputs/apk/release/app-release.apk\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-49aa90"},"children":[{"type":"text","value":"cd"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" ./android \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" ./gradlew assembleRelease \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" adb install ./app/build/outputs/apk/release/app-release.apk"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"deep-links"},"children":[{"type":"text","value":"Deep links"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://zarah.dev/2022/02/08/android12-deeplinks.html","rel":["nofollow"]},"children":[{"type":"text","value":"https://zarah.dev/2022/02/08/android12-deeplinks.html"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification","rel":["nofollow"]},"children":[{"type":"text","value":"https://developer.android.com/training/app-links/verify-site-associations#invoke-domain-verification"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls","rel":["nofollow"]},"children":[{"type":"text","value":"https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://miin.ru&relation=delegate_permission/common.handle_all_urls"}]}]}]},{"type":"element","tag":"h3","props":{"id":"open-deep-links"},"children":[{"type":"text","value":"Open deep links"}]},{"type":"element","tag":"code","props":{"code":"# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8cbcba"},"children":[{"type":"text","value":"# ios "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"xcrun simctl openurl booted "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8cbcba"},"children":[{"type":"text","value":"# android"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"adb shell am start -W -a android.intent.action.VIEW -d "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"com.application"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"reverify-links-on-android"},"children":[{"type":"text","value":"Reverify links on Android"}]},{"type":"element","tag":"code","props":{"code":"PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"PACKAGE="}]},{"type":"element","tag":"span","props":{"class":"ct-87b274"},"children":[{"type":"text","value":"\"com.application\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":"adb shell pm set-app-links --package "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"PACKAGE"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" 0 all "}]},{"type":"element","tag":"span","props":{"class":"ct-b7b0af"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3cd957"},"children":[{"type":"text","value":" adb shell pm verify-app-links --re-verify "}]},{"type":"element","tag":"span","props":{"class":"ct-334077"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-79ff07"},"children":[{"type":"text","value":"PACKAGE"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8cbcba{color:#8B949E}.ct-b7b0af{color:#FF7B72}.ct-49aa90{color:#79C0FF}.ct-79ff07{color:#C9D1D9}.ct-334077{color:#C9D1D9}.ct-87b274{color:#A5D6FF}.ct-3cd957{color:#C9D1D9}.light .ct-3cd957{color:#657B83}.light .ct-87b274{color:#2AA198}.light .ct-334077{color:#859900}.light .ct-79ff07{color:#268BD2}.light .ct-49aa90{color:#268BD2}.light .ct-b7b0af{color:#859900}.light .ct-8cbcba{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"show-android-logcat","depth":2,"text":"Show android logcat"},{"id":"get-apks-sha-256","depth":2,"text":"Get .apk's SHA-256"},{"id":"assemble-debug-release-on-android","depth":2,"text":"Assemble debug release on Android"},{"id":"send-release-to-android-device","depth":2,"text":"Send release to Android device"},{"id":"deep-links","depth":2,"text":"Deep links","children":[{"id":"open-deep-links","depth":3,"text":"Open deep links"},{"id":"reverify-links-on-android","depth":3,"text":"Reverify links on Android"}]}]}},"_type":"markdown","_id":"content:Frontend:React Native:Useful comands.md","_source":"content","_file":"Frontend/React Native/Useful comands.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/S7L9CBleOj.json b/api/_content/query/S7L9CBleOj.json
index fd84617..747824f 100644
--- a/api/_content/query/S7L9CBleOj.json
+++ b/api/_content/query/S7L9CBleOj.json
@@ -1 +1 @@
-{"_path":"/frontend/vue/make-nuxt-handle-obsidian-highlights","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Make Nuxt Handle Obsidian Highlights","description":"By default Nuxt Content Plugin not handling highlight links. To fix that we will create Nitro plugin:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-998ff9"},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26d123"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26d123"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1ffb28"},"children":[{"type":"text","value":"defineNitroPlugin"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":"((nitroApp) "}]},{"type":"element","tag":"span","props":{"class":"ct-30d538"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ba2ca"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"nitroApp"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"hooks"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b2cb40"},"children":[{"type":"text","value":"hook"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3aff06"},"children":[{"type":"text","value":"\"content:file:beforeParse\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"_id"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b2cb40"},"children":[{"type":"text","value":"endsWith"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3aff06"},"children":[{"type":"text","value":"\".md\""}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-8c1cf5"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b2cb40"},"children":[{"type":"text","value":"replace"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cc7369"},"children":[{"type":"text","value":"/==("}]},{"type":"element","tag":"span","props":{"class":"ct-c58450"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"^"}]},{"type":"element","tag":"span","props":{"class":"ct-c58450"},"children":[{"type":"text","value":"=]"}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-cc7369"},"children":[{"type":"text","value":")==/"}]},{"type":"element","tag":"span","props":{"class":"ct-1a5275"},"children":[{"type":"text","value":"gs"}]},{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3aff06"},"children":[{"type":"text","value":"`$1`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4be8d0"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6ba2ca"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-2e1b59"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-6ba2ca"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c58450{color:#79C0FF}.ct-cc7369{color:#A5D6FF}.ct-1a5275{color:#FF7B72}.ct-3aff06{color:#A5D6FF}.ct-b2cb40{color:#D2A8FF}.ct-8c1cf5{color:#C9D1D9}.ct-4be8d0{color:#C9D1D9}.ct-6ba2ca{color:#C9D1D9}.ct-30d538{color:#FF7B72}.ct-1ffb28{color:#D2A8FF}.ct-2e1b59{color:#FFA657}.ct-26d123{color:#FF7B72}.ct-998ff9{color:#8B949E}.light .ct-998ff9{color:#93A1A1}.light .ct-26d123{color:#859900}.light .ct-2e1b59{color:#657B83}.light .ct-1ffb28{color:#268BD2}.light .ct-30d538{color:#073642}.light .ct-6ba2ca{color:#657B83}.light .ct-4be8d0{color:#657B83}.light .ct-8c1cf5{color:#268BD2}.light .ct-b2cb40{color:#268BD2}.light .ct-3aff06{color:#2AA198}.light .ct-1a5275{color:#859900}.light .ct-cc7369{color:#D30102}.light .ct-c58450{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Make Nuxt handle Obsidian highlights.md","_source":"content","_file":"Frontend/Vue/Make Nuxt handle Obsidian highlights.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/frontend/vue/make-nuxt-handle-obsidian-highlights","_dir":"vue","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Make Nuxt Handle Obsidian Highlights","description":"By default Nuxt Content Plugin not handling highlight links. To fix that we will create Nitro plugin:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"By default "},{"type":"element","tag":"a","props":{"href":"https://content.nuxtjs.org","rel":["nofollow"]},"children":[{"type":"text","value":"Nuxt Content Plugin"}]},{"type":"text","value":" not handling "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"highlight"}]},{"type":"text","value":" links. To fix that we will create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Nitro"}]},{"type":"text","value":" plugin:"}]},{"type":"element","tag":"code","props":{"code":"// ~/server/plugins/highlight.ts\nexport default defineNitroPlugin((nitroApp) => {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) => {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n /==([^=]+)==/gs,\n `$1`\n );\n }\n });\n});\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-740e3d"},"children":[{"type":"text","value":"// ~/server/plugins/highlight.ts"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3f1b56"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f1b56"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5a4b"},"children":[{"type":"text","value":"defineNitroPlugin"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":"((nitroApp) "}]},{"type":"element","tag":"span","props":{"class":"ct-f045aa"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fc50c4"},"children":[{"type":"text","value":"{"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"nitroApp"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"hooks"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-235547"},"children":[{"type":"text","value":"hook"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3a3ac7"},"children":[{"type":"text","value":"\"content:file:beforeParse\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"_id"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-235547"},"children":[{"type":"text","value":"endsWith"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-3a3ac7"},"children":[{"type":"text","value":"\".md\""}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"file"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-dfb834"},"children":[{"type":"text","value":"body"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-235547"},"children":[{"type":"text","value":"replace"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0961cb"},"children":[{"type":"text","value":"/==("}]},{"type":"element","tag":"span","props":{"class":"ct-e42be0"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"^"}]},{"type":"element","tag":"span","props":{"class":"ct-e42be0"},"children":[{"type":"text","value":"=]"}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-0961cb"},"children":[{"type":"text","value":")==/"}]},{"type":"element","tag":"span","props":{"class":"ct-a08f23"},"children":[{"type":"text","value":"gs"}]},{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3a3ac7"},"children":[{"type":"text","value":"`$1`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-081992"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fc50c4"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-eae72d"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-fc50c4"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e42be0{color:#79C0FF}.ct-0961cb{color:#A5D6FF}.ct-a08f23{color:#FF7B72}.ct-3a3ac7{color:#A5D6FF}.ct-235547{color:#D2A8FF}.ct-dfb834{color:#C9D1D9}.ct-081992{color:#C9D1D9}.ct-fc50c4{color:#C9D1D9}.ct-f045aa{color:#FF7B72}.ct-4b5a4b{color:#D2A8FF}.ct-eae72d{color:#FFA657}.ct-3f1b56{color:#FF7B72}.ct-740e3d{color:#8B949E}.light .ct-740e3d{color:#93A1A1}.light .ct-3f1b56{color:#859900}.light .ct-eae72d{color:#657B83}.light .ct-4b5a4b{color:#268BD2}.light .ct-f045aa{color:#073642}.light .ct-fc50c4{color:#657B83}.light .ct-081992{color:#657B83}.light .ct-dfb834{color:#268BD2}.light .ct-235547{color:#268BD2}.light .ct-3a3ac7{color:#2AA198}.light .ct-a08f23{color:#859900}.light .ct-0961cb{color:#D30102}.light .ct-e42be0{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:Vue:Make Nuxt handle Obsidian highlights.md","_source":"content","_file":"Frontend/Vue/Make Nuxt handle Obsidian highlights.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/TvYXYGXdZ0.json b/api/_content/query/TvYXYGXdZ0.json
index 53e6580..ea3c624 100644
--- a/api/_content/query/TvYXYGXdZ0.json
+++ b/api/_content/query/TvYXYGXdZ0.json
@@ -1 +1 @@
-{"_path":"/sql/mysql-and-mariadb-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"MySQL And MariaDB Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"...\nbind-address = 0.0.0.0\n...\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"FLUSH PRIVILEGES;\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"sudo apt install mariadb-server"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"sudo mysql_secure_installation"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"bind-"}]},{"type":"element","tag":"span","props":{"class":"ct-310db6"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":" = 0.0.0.0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-32a261"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"FLUSH PRIVILEGES;"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-310db6{color:#FF7B72}.ct-32a261{color:#C9D1D9}.light .ct-32a261{color:#657B83}.light .ct-310db6{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-mariadb-on-ubuntu-2004-lts","depth":2,"text":"Install MariaDB on Ubuntu 20.04 LTS"},{"id":"access-database-from-outside","depth":2,"text":"Access Database from outside"},{"id":"create-administrative-user","depth":2,"text":"Create Administrative User"}]}},"_type":"markdown","_id":"content:SQL:MySQL and MariaDB setup.md","_source":"content","_file":"SQL/MySQL and MariaDB setup.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/sql/mysql-and-mariadb-setup","_dir":"sql","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"MySQL And MariaDB Setup","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"...\nbind-address = 0.0.0.0\n...\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n"}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"FLUSH PRIVILEGES;\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"install-mariadb-on-ubuntu-2004-lts"},"children":[{"type":"text","value":"Install MariaDB on Ubuntu 20.04 LTS"}]},{"type":"element","tag":"code","props":{"code":"sudo apt update\nsudo apt install mariadb-server\nsudo mysql_secure_installation\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"sudo apt update"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"sudo apt install mariadb-server"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"sudo mysql_secure_installation"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"access-database-from-outside"},"children":[{"type":"text","value":"Access Database from outside"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Open "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"/etc/mysql/mariadb.conf.d/50-server.cnf"}]},{"type":"text","value":" and change the "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"bind-address"}]},{"type":"text","value":" to:"}]},{"type":"element","tag":"code","props":{"code":"...\nbind-address = 0.0.0.0\n...\n","language":"nginx"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"..."}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"bind-"}]},{"type":"element","tag":"span","props":{"class":"ct-e9e30e"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":" = 0.0.0.0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a67105"},"children":[{"type":"text","value":"..."}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"create-administrative-user"},"children":[{"type":"text","value":"Create Administrative User"}]},{"type":"element","tag":"ol","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Create a new user "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"newuser"}]},{"type":"text","value":" for the host "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"localhost"}]},{"type":"text","value":" with a new "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"password"}]},{"type":"text","value":":"}]}]},{"type":"element","tag":"code","props":{"code":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":2},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Grant all permissions to the new user"}]}]},{"type":"element","tag":"code","props":{"code":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';"}]}]}]}]}]},{"type":"element","tag":"ol","props":{"start":3},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"text","value":"Update permissions"}]}]},{"type":"element","tag":"code","props":{"code":"FLUSH PRIVILEGES;\n","language":"mysql"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{},"children":[{"type":"text","value":"FLUSH PRIVILEGES;"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e9e30e{color:#FF7B72}.ct-a67105{color:#C9D1D9}.light .ct-a67105{color:#657B83}.light .ct-e9e30e{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"install-mariadb-on-ubuntu-2004-lts","depth":2,"text":"Install MariaDB on Ubuntu 20.04 LTS"},{"id":"access-database-from-outside","depth":2,"text":"Access Database from outside"},{"id":"create-administrative-user","depth":2,"text":"Create Administrative User"}]}},"_type":"markdown","_id":"content:SQL:MySQL and MariaDB setup.md","_source":"content","_file":"SQL/MySQL and MariaDB setup.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/UBl6xR2vxQ.json b/api/_content/query/UBl6xR2vxQ.json
index 3e5d8f1..5e53a9d 100644
--- a/api/_content/query/UBl6xR2vxQ.json
+++ b/api/_content/query/UBl6xR2vxQ.json
@@ -1 +1 @@
-{"_path":"/docker/refresh-containers-on-pull","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Containers On Pull","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"watchtower"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"docker__watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"v2tec/watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"/home/user/.docker/config.json:/config.json"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ff98de"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-d8ca28"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-572788"},"children":[{"type":"text","value":"--interval 60 image_1 image_2"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-572788{color:#A5D6FF}.ct-d8ca28{color:#C9D1D9}.ct-ff98de{color:#7EE787}.light .ct-ff98de{color:#268BD2}.light .ct-d8ca28{color:#657B83}.light .ct-572788{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-watchtower","depth":2,"text":"Setting up watchtower"}]}},"_type":"markdown","_id":"content:Docker:Refresh containers on pull.md","_source":"content","_file":"Docker/Refresh containers on pull.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/docker/refresh-containers-on-pull","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Refresh Containers On Pull","description":"","excerpt":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"h2","props":{"id":"setting-up-watchtower"},"children":[{"type":"text","value":"Setting up watchtower"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://containrrr.dev/watchtower/","rel":["nofollow"]},"children":[{"type":"text","value":"Watchtower"}]},{"type":"text","value":" will automatically pull updated #docker containers. Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" and "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec/watchtower\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - /home/user/.docker/config.json:/config.json\n command: --interval 60 image_1 image_2\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"watchtower"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"docker__watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"v2tec/watchtower"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"/home/user/.docker/config.json:/config.json"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a14498"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-8a90fa"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-e17983"},"children":[{"type":"text","value":"--interval 60 image_1 image_2"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-e17983{color:#A5D6FF}.ct-8a90fa{color:#C9D1D9}.ct-a14498{color:#7EE787}.light .ct-a14498{color:#268BD2}.light .ct-8a90fa{color:#657B83}.light .ct-e17983{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-watchtower","depth":2,"text":"Setting up watchtower"}]}},"_type":"markdown","_id":"content:Docker:Refresh containers on pull.md","_source":"content","_file":"Docker/Refresh containers on pull.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/WJQDeZ21lK.json b/api/_content/query/WJQDeZ21lK.json
index 365e830..49c7105 100644
--- a/api/_content/query/WJQDeZ21lK.json
+++ b/api/_content/query/WJQDeZ21lK.json
@@ -1 +1 @@
-{"_path":"/git/git-aliases-and-useful-commands","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Git Aliases And Useful Commands","description":"Shorthands for #git commands can be specified. Should be placed at ~/.gitconfig.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n"}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"[alias]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" flush "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" git clean"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"branches branch "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"v master "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" xargs git branch "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"D"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" lol "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" log "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"oneline "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"graph"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" l "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" lol"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" c "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" cv "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"no"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"verify "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" push"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" pf "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"force"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"with"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"lease"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" ignore"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"now "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":" update"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"index "}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"skip"}]},{"type":"element","tag":"span","props":{"class":"ct-2f457a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-47fb06"},"children":[{"type":"text","value":"worktree"}]}]}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-2f457a{color:#FF7B72}.ct-47fb06{color:#C9D1D9}.light .ct-47fb06{color:#657B83}.light .ct-2f457a{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Git aliases and useful commands.md","_source":"content","_file":"Git/Git aliases and useful commands.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/git/git-aliases-and-useful-commands","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Git Aliases And Useful Commands","description":"Shorthands for #git commands can be specified. Should be placed at ~/.gitconfig.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n"}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Shorthands for #git commands can be specified. Should be placed at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"[alias]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" flush "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" git clean"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"branches branch "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" grep "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"v master "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" xargs git branch "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"D"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" lol "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" log "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"oneline "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"graph"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" l "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" lol"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" c "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" cv "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" commit "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"no"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"verify "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"am"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" push"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" pf "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" p "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"force"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"with"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"lease"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" ignore"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"now "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":" update"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"index "}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"--"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"skip"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0f51"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-549b5e"},"children":[{"type":"text","value":"worktree"}]}]}]}]}]},{"type":"element","tag":"table","props":{},"children":[{"type":"element","tag":"thead","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"command"}]}]},{"type":"element","tag":"th","props":{"align":null},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"description"}]}]}]}]},{"type":"element","tag":"tbody","props":{},"children":[{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git flush"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"drops all branches, except master"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git lol"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"shows log"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git c"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits with message"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git cv"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"commits without hooks"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git p"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"pushes"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git pf"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"push with --force and additional check"}]}]},{"type":"element","tag":"tr","props":{},"children":[{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"git ignore-now"}]}]},{"type":"element","tag":"td","props":{"align":null},"children":[{"type":"text","value":"starts ignoring file from now on"}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-5b0f51{color:#FF7B72}.ct-549b5e{color:#C9D1D9}.light .ct-549b5e{color:#657B83}.light .ct-5b0f51{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Git aliases and useful commands.md","_source":"content","_file":"Git/Git aliases and useful commands.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/WO7KYRkFiw.json b/api/_content/query/WO7KYRkFiw.json
index ba8fa65..7705645 100644
--- a/api/_content/query/WO7KYRkFiw.json
+++ b/api/_content/query/WO7KYRkFiw.json
@@ -1 +1 @@
-{"_path":"/blockchain/smart-contracts","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Smart Contracts","description":"For common functions see Common typescript examples.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'web3-eth-contract'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"abi"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"object"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a12cef"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cffc8d"},"children":[{"type":"text","value":"JSON"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-a12cef"},"children":[{"type":"text","value":"parse"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// ABI of contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// address for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ({}) "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// Calling write method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// authorizing with Metamask"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// getting wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// calling \"store\" store method for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// payload should include `from` address, that matches"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// current user's wallet"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'Parameter'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"send"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" from: "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b684a9"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// calling read method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// this method can return data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"retrieve"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b684a9"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// ABI контракта"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// contract address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// account's private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// write-methods requires private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"privateKeyToAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" to: "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"encodeABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" gas: "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"({ from: "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"signTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"rawTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"requests"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"balanceOf"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getStaked"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"call"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"any"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"[]) "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getWeb3NoAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"BatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"map"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"add"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"execute"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b684a9"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"all"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-533c8a"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-7ab598"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'YOUR_RPC_ENDPOINT_HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'YOUR ABI HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'YOUR CONTRACT ADDRESS HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"referralProgramContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"events"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"RegisterUser"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-ba2d26"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"`| UserRegistered | events | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ea53a5"},"children":[{"type":"text","value":"boolean"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5f6d82"},"children":[{"type":"text","value":"RegisterUserResponseInterface"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-af446c"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"`| ONCE | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-fbab5e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-ba2d26"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-9f43a9"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-dc5090"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5f6d82"},"children":[{"type":"text","value":"ErrnoException"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-937517"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-15a02b"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" value: [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"events"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"Transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"str"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" address: ["}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'address-1'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'address-2'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"//Only get events from specific addresses"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" topics: [] "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"//What topics to subscribe to"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'logs'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"nr"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"//example options(optional)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26a53b"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84ece2"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// only get events where transfer value was 1000 or 1337"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" value: ["}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'1000'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'1337'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e665d0"},"children":[{"type":"text","value":"// number | \"earliest\" | \"pending\" | \"latest\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-953a98"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" toBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'latest'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"getPastEvents"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5650de"},"children":[{"type":"text","value":"'Transfer'"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-5fb697"},"children":[{"type":"text","value":"results"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-b8e2c1"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-66597a"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-5f6d82{color:#FFA657}.ct-ba2d26{color:#A5D6FF}.ct-533c8a{color:#79C0FF}.ct-b684a9{color:#79C0FF}.ct-953a98{color:#79C0FF}.ct-af446c{color:#79C0FF}.ct-26a53b{color:#FF7B72}.ct-e665d0{color:#8B949E}.ct-7ab598{color:#FFA657}.ct-b8e2c1{color:#D2A8FF}.ct-cffc8d{color:#79C0FF}.ct-a12cef{color:#79C0FF}.ct-ea53a5{color:#79C0FF}.ct-9f43a9{color:#FFA657}.ct-dc5090{color:#FF7B72}.ct-fbab5e{color:#D2A8FF}.ct-15a02b{color:#C9D1D9}.ct-937517{color:#FF7B72}.ct-5650de{color:#A5D6FF}.ct-5fb697{color:#C9D1D9}.ct-66597a{color:#C9D1D9}.ct-84ece2{color:#FF7B72}.light .ct-84ece2{color:#859900}.light .ct-66597a{color:#657B83}.light .ct-5fb697{color:#268BD2}.light .ct-5650de{color:#2AA198}.light .ct-937517{color:#073642}.light .ct-15a02b{color:#657B83}.light .ct-fbab5e{color:#268BD2}.light .ct-dc5090{color:#859900}.light .ct-9f43a9{color:#657B83}.light .ct-ea53a5{color:#859900}.light .ct-a12cef{color:#268BD2}.light .ct-cffc8d{color:#657B83}.light .ct-b8e2c1{color:#268BD2}.light .ct-7ab598{color:#657B83}.light .ct-e665d0{color:#93A1A1}.light .ct-26a53b{color:#073642}.light .ct-af446c{color:#268BD2}.light .ct-953a98{color:#D33682}.light .ct-b684a9{color:#859900}.light .ct-533c8a{color:#B58900}.light .ct-ba2d26{color:#2AA198}.light .ct-5f6d82{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"getting-smart-contract-instance","depth":2,"text":"Getting smart contract instance"},{"id":"executing-contract-method","depth":2,"text":"Executing contract method","children":[{"id":"example-for-metamask-without-private-key","depth":3,"text":"Example for #Metamask without private key"},{"id":"nodejs-and-react-native-example","depth":3,"text":"Node.js and React Native example"},{"id":"calling-a-batch-of-contracts-methods","depth":3,"text":"Calling a batch of contract's methods"}]},{"id":"subscribing-to-smart-contract-events","depth":2,"text":"Subscribing to smart contract events","children":[{"id":"by-accessing-contractevents","depth":3,"text":"By accessing contract.events"},{"id":"with-filtering","depth":3,"text":"With filtering"},{"id":"common-subscribe-method","depth":3,"text":"Common Subscribe method"},{"id":"getting-event-history","depth":3,"text":"Getting event history"}]}]}},"_type":"markdown","_id":"content:Blockchain:Smart contracts.md","_source":"content","_file":"Blockchain/Smart contracts.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/blockchain/smart-contracts","_dir":"blockchain","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Smart Contracts","description":"For common functions see Common typescript examples.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n"}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n"}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"For common functions see "},{"type":"element","tag":"a","props":{"href":"Common%20typescript%20examples"},"children":[{"type":"text","value":"Common typescript examples"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"getting-smart-contract-instance"},"children":[{"type":"text","value":"Getting smart contract instance"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for calling smart contract methods:"}]},{"type":"element","tag":"code","props":{"code":"import { Contract } from 'web3-eth-contract';\nimport { web3 } from '.';\n\nconst getContract = (abi: object, address?: string): Contract => {\n const abiFromJson = JSON.parse(JSON.stringify(abi));\n return new web3.eth.Contract(abiFromJson, address);\n};\n\nexport default getContract;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'web3-eth-contract'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"abi"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"object"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-69cd54"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-650e82"},"children":[{"type":"text","value":"JSON"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-69cd54"},"children":[{"type":"text","value":"parse"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"abiFromJson"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"executing-contract-method"},"children":[{"type":"text","value":"Executing contract method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Contract has "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"read"}]},{"type":"text","value":" and "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"write"}]},{"type":"text","value":" methods. To get a list of methods, you can paste contract address on "},{"type":"element","tag":"a","props":{"href":"https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract","rel":["nofollow"]},"children":[{"type":"text","value":"https://etherscan.io/ ETH"}]},{"type":"text","value":" or any other service."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Read"}]},{"type":"text","value":" methods doesn't require spending "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":". "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"Write"}]},{"type":"text","value":" methods cost some amount of "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"gas"}]},{"type":"text","value":", hence they will be executed with confirmation from user."}]},{"type":"element","tag":"h3","props":{"id":"example-for-metamask-without-private-key"},"children":[{"type":"text","value":"Example for #Metamask without private key"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI of contract\nconst CONTRACT_ABI = { /* ... */ };\n // address for contract\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n\nexport const executeContractMethod = async ({}) => {\n // getting contract\n const contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n \n // Calling write method\n try {\n // authorizing with Metamask\n await web3.currentProvider.request({ method: 'eth_requestAccounts' });\n // getting wallet address\n const addressUser = web3.currentProvider.selectedAddress;\n // calling \"store\" store method for contract\n // payload should include `from` address, that matches\n // current user's wallet\n await contract.methods.store(0, 'Parameter').send({\n from: addressUser,\n });\n } catch (e) {\n throw new Error(e);\n }\n \n // calling read method\n try {\n // this method can return data\n const result = await contract.methods.retrieve().call();\n } catch (e) {\n throw new Error(e);\n }\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// ABI of contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// address for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ({}) "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// Calling write method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// authorizing with Metamask"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"({ method: "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'eth_requestAccounts'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// getting wallet address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"currentProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"selectedAddress"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// calling \"store\" store method for contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// payload should include `from` address, that matches"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// current user's wallet"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'Parameter'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"send"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" from: "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"addressUser"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed3166"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// calling read method"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// this method can return data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"retrieve"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed3166"},"children":[{"type":"text","value":"Error"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"nodejs-and-react-native-example"},"children":[{"type":"text","value":"Node.js and React Native example"}]},{"type":"element","tag":"code","props":{"code":"// see example below\nimport { getContract } from '.';\n\n// ABI контракта\nconst CONTRACT_ABI = { /* ... */ };\n// contract address\nconst CONTRACT_ADDRESS = '0xdea164f67df4dbfe675d5271c9d404e0260f33bb';\n// getting contract\nconst contract = getContract(CONTRACT_ABI, CONTRACT_ADDRESS);\n// account's private key\nconst privateKey = '...';\n\n// write-methods requires private key\nconst executeContractMethod = async (val: number) => {\n const transaction = contract.methods.store(val);\n const account = web3.eth.accounts.privateKeyToAccount(privateKey);\n const options = {\n to: CONTRACT_ADDRESS,\n data: transaction.encodeABI(),\n gas: await transaction.estimateGas({ from: account.address }),\n gasPrice: await web3.eth.getGasPrice(),\n };\n const signed = await web3.eth.accounts.signTransaction(\n options,\n privateKey,\n );\n await web3.eth.sendSignedTransaction(signed.rawTransaction!);\n};\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// see example below"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'.'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// ABI контракта"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"/* ... */"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// contract address"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'0xdea164f67df4dbfe675d5271c9d404e0260f33bb'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// getting contract"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// account's private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'...'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// write-methods requires private key"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"executeContractMethod"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"methods"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"store"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"val"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"privateKeyToAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" to: "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" data: "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"encodeABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" gas: "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"transaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"estimateGas"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"({ from: "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"account"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"address"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" gasPrice: "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getGasPrice"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"(),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"accounts"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"signTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"privateKey"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"eth"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"sendSignedTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"signed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"rawTransaction"}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"};"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"calling-a-batch-of-contracts-methods"},"children":[{"type":"text","value":"Calling a batch of contract's methods"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Function calls batch of requests, returning array of results. For example:"}]},{"type":"element","tag":"code","props":{"code":" const requests = [\n contract.method.balanceOf().call,\n contract.method.getStaked().call\n ]\n\n const result = await makeBatchRequest(request);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"requests"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ["}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"balanceOf"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"call"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"method"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getStaked"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"call"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"await"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"request"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"code","props":{"code":"const web3 = new Web3(Web3.givenProvider || PROVIDER_URL);\n\nconst makeBatchRequest = (calls: any[]) => {\n try {\n const web3 = getWeb3NoAccount();\n const batch = new web3.BatchRequest();\n\n const promises = calls.map((call) => {\n return new Promise((resolve, reject) => {\n batch.add(\n call.request({}, (err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n })\n );\n });\n });\n\n batch.execute();\n\n return Promise.all(promises);\n } catch {\n return null;\n }\n};\n\nexport default makeBatchRequest;\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"givenProvider"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"PROVIDER_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"any"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"[]) "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getWeb3NoAccount"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"BatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"calls"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"map"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"add"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"reject"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"resolve"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"result"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"batch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"execute"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ed3166"},"children":[{"type":"text","value":"Promise"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"all"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"promises"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b75af6"},"children":[{"type":"text","value":"null"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"};"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"default"}]},{"type":"element","tag":"span","props":{"class":"ct-f12b07"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"makeBatchRequest"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"subscribing-to-smart-contract-events"},"children":[{"type":"text","value":"Subscribing to smart contract events"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"There're different ways to subscribe for contract events. For all of them you will need following variables:"}]},{"type":"element","tag":"code","props":{"code":" import Web3 from 'web3';\n const web3 = new Web3('YOUR_RPC_ENDPOINT_HERE');\n const ABI = 'YOUR ABI HERE';\n const CONTRACT_ADDRESS = 'YOUR CONTRACT ADDRESS HERE';\n const myContract = new Web3.Contract(ABI, CONTRACT_ADDRESS);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'web3'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'YOUR_RPC_ENDPOINT_HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'YOUR ABI HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'YOUR CONTRACT ADDRESS HERE'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"new"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"Web3"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Contract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"ABI"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"CONTRACT_ADDRESS"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"by-accessing-contractevents"},"children":[{"type":"text","value":"By accessing contract.events"}]},{"type":"element","tag":"code","props":{"code":"referralProgramContract.events\n .RegisterUser()\n .on('connected', (subscriptionId: string) => {\n console.log(`| UserRegistered | events | ${subscriptionId}`);\n })\n .on(\n 'data',\n async (event: {\n removed: boolean;\n returnValues: RegisterUserResponseInterface;\n }) => {\n try {\n if (event.removed) {\n return;\n }\n const { user, referrer } = event.returnValues;\n console.log(user, referrer);\n } catch (e) {\n console.log(`| ONCE | ${e}`);\n }\n },\n )\n .on('error', (error: ErrnoException) => {\n console.log(error);\n });\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"referralProgramContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"events"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"RegisterUser"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"()"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a93773"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"`| UserRegistered | events | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscriptionId"}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"async"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5b176b"},"children":[{"type":"text","value":"boolean"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fa3c"},"children":[{"type":"text","value":"RegisterUserResponseInterface"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"try"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"removed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-01dfb8"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"returnValues"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"user"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"referrer"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" } "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"`| ONCE | ${"}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"e"}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"}`"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-adbdaf"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-a93773"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":", ("}]},{"type":"element","tag":"span","props":{"class":"ct-492994"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-97fc9e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fa3c"},"children":[{"type":"text","value":"ErrnoException"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-76a269"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-445399"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"error"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"with-filtering"},"children":[{"type":"text","value":"With filtering"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"We're listening to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" event here:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n filter: {\n value: [],\n },\n fromBlock: 0\n };\n\n myContract.events.Transfer(options)\n .on('data', event => console.log(event))\n .on('changed', changed => console.log(changed))\n .on('error', err => throw err)\n .on('connected', str => console.log(str))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" value: [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"events"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"Transfer"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"str"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"common-subscribe-method"},"children":[{"type":"text","value":"Common Subscribe method"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Filtering options can also be specified:"}]},{"type":"element","tag":"code","props":{"code":" let options = {\n fromBlock: 0,\n address: ['address-1', 'address-2'], //Only get events from specific addresses\n topics: [] //What topics to subscribe to\n };\n\n let subscription = ('logs', options, (err,event) => {\n if (!err)\n console.log(event)\n });\n\n subscription.on('data', event => console.log(event))\n subscription.on('changed', changed => console.log(changed))\n subscription.on('error', err => { throw err })\n subscription.on('connected', nr => console.log(nr))\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" address: ["}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'address-1'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'address-2'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"//Only get events from specific addresses"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" topics: [] "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"//What topics to subscribe to"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'logs'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'data'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'changed'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"changed"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'error'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"throw"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"err"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" })"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"subscription"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"on"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'connected'"}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"console"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"nr"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]}]}]}]},{"type":"element","tag":"h3","props":{"id":"getting-event-history"},"children":[{"type":"text","value":"Getting event history"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Getting history for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"Transfer"}]},{"type":"text","value":" events for specific values. More info can be found "},{"type":"element","tag":"a","props":{"href":"https://web3js.readthedocs.io/en/v1.2.11/web3-eth-subscribe.html#","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]}]},{"type":"element","tag":"code","props":{"code":" //example options(optional)\n let options = {\n filter: {\n // only get events where transfer value was 1000 or 1337\n value: ['1000', '1337'] \n },\n // number | \"earliest\" | \"pending\" | \"latest\"\n fromBlock: 0, \n toBlock: 'latest'\n };\n\n myContract.getPastEvents('Transfer', options)\n .then(results => console.log(results))\n .catch(err => throw err);\n\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"//example options(optional)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-09b465"},"children":[{"type":"text","value":"let"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7723a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" filter: {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// only get events where transfer value was 1000 or 1337"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" value: ["}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'1000'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'1337'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"] "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2dcbf5"},"children":[{"type":"text","value":"// number | \"earliest\" | \"pending\" | \"latest\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" fromBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-4b5458"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" toBlock: "}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'latest'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" };"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"myContract"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"getPastEvents"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-962005"},"children":[{"type":"text","value":"'Transfer'"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":")"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"then"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"log"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-41892f"},"children":[{"type":"text","value":"results"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" ."}]},{"type":"element","tag":"span","props":{"class":"ct-312f4e"},"children":[{"type":"text","value":"catch"}]},{"type":"element","tag":"span","props":{"class":"ct-64b086"},"children":[{"type":"text","value":" "}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-34fa3c{color:#FFA657}.ct-a93773{color:#A5D6FF}.ct-b75af6{color:#79C0FF}.ct-ed3166{color:#79C0FF}.ct-4b5458{color:#79C0FF}.ct-01dfb8{color:#79C0FF}.ct-09b465{color:#FF7B72}.ct-2dcbf5{color:#8B949E}.ct-f12b07{color:#FFA657}.ct-312f4e{color:#D2A8FF}.ct-650e82{color:#79C0FF}.ct-69cd54{color:#79C0FF}.ct-5b176b{color:#79C0FF}.ct-492994{color:#FFA657}.ct-97fc9e{color:#FF7B72}.ct-adbdaf{color:#D2A8FF}.ct-445399{color:#C9D1D9}.ct-76a269{color:#FF7B72}.ct-962005{color:#A5D6FF}.ct-41892f{color:#C9D1D9}.ct-64b086{color:#C9D1D9}.ct-a7723a{color:#FF7B72}.light .ct-a7723a{color:#859900}.light .ct-64b086{color:#657B83}.light .ct-41892f{color:#268BD2}.light .ct-962005{color:#2AA198}.light .ct-76a269{color:#073642}.light .ct-445399{color:#657B83}.light .ct-adbdaf{color:#268BD2}.light .ct-97fc9e{color:#859900}.light .ct-492994{color:#657B83}.light .ct-5b176b{color:#859900}.light .ct-69cd54{color:#268BD2}.light .ct-650e82{color:#657B83}.light .ct-312f4e{color:#268BD2}.light .ct-f12b07{color:#657B83}.light .ct-2dcbf5{color:#93A1A1}.light .ct-09b465{color:#073642}.light .ct-01dfb8{color:#268BD2}.light .ct-4b5458{color:#D33682}.light .ct-ed3166{color:#859900}.light .ct-b75af6{color:#B58900}.light .ct-a93773{color:#2AA198}.light .ct-34fa3c{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"getting-smart-contract-instance","depth":2,"text":"Getting smart contract instance"},{"id":"executing-contract-method","depth":2,"text":"Executing contract method","children":[{"id":"example-for-metamask-without-private-key","depth":3,"text":"Example for #Metamask without private key"},{"id":"nodejs-and-react-native-example","depth":3,"text":"Node.js and React Native example"},{"id":"calling-a-batch-of-contracts-methods","depth":3,"text":"Calling a batch of contract's methods"}]},{"id":"subscribing-to-smart-contract-events","depth":2,"text":"Subscribing to smart contract events","children":[{"id":"by-accessing-contractevents","depth":3,"text":"By accessing contract.events"},{"id":"with-filtering","depth":3,"text":"With filtering"},{"id":"common-subscribe-method","depth":3,"text":"Common Subscribe method"},{"id":"getting-event-history","depth":3,"text":"Getting event history"}]}]}},"_type":"markdown","_id":"content:Blockchain:Smart contracts.md","_source":"content","_file":"Blockchain/Smart contracts.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/WUiUHbO5Pg.json b/api/_content/query/WUiUHbO5Pg.json
index c7455a1..d9a854b 100644
--- a/api/_content/query/WUiUHbO5Pg.json
+++ b/api/_content/query/WUiUHbO5Pg.json
@@ -1 +1 @@
-{"_path":"/css/test-if-browser-supports-css-rules","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Test If Browser Supports CSS Rules","description":"To test if browser supports some #CSS rules, do following:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-747a85"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-df79b9"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1c9a55"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8efaba"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":": blur(5px);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-46d403"},"children":[{"type":"text","value":"can_backdrop"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-347d2b"},"children":[{"type":"text","value":"-webkit-backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-6b2723"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-f79b21"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-73c01d"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":")) "}]},{"type":"element","tag":"span","props":{"class":"ct-625845"},"children":[{"type":"text","value":"or"}]},{"type":"element","tag":"span","props":{"class":"ct-d590c2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-747a85"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-df79b9"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-1c9a55"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ca30ca"},"children":[{"type":"text","value":"@content"}]},{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-00ce74"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-625845{color:#79C0FF}.ct-73c01d{color:#FF7B72}.ct-f79b21{color:#79C0FF}.ct-6b2723{color:#79C0FF}.ct-347d2b{color:#79C0FF}.ct-d590c2{color:#C9D1D9}.ct-46d403{color:#D2A8FF}.ct-8efaba{color:#7EE787}.ct-1c9a55{color:#79C0FF}.ct-df79b9{color:#79C0FF}.ct-747a85{color:#79C0FF}.ct-00ce74{color:#C9D1D9}.ct-ca30ca{color:#FF7B72}.light .ct-ca30ca{color:#859900}.light .ct-00ce74{color:#657B83}.light .ct-747a85{color:#859900}.light .ct-df79b9{color:#268BD2}.light .ct-1c9a55{color:#D33682}.light .ct-8efaba{color:#268BD2}.light .ct-46d403{color:#268BD2}.light .ct-d590c2{color:#657B83}.light .ct-347d2b{color:#859900}.light .ct-6b2723{color:#268BD2}.light .ct-f79b21{color:#D33682}.light .ct-73c01d{color:#859900}.light .ct-625845{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Test if browser supports CSS rules.md","_source":"content","_file":"CSS/Test if browser supports CSS rules.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/css/test-if-browser-supports-css-rules","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Test If Browser Supports CSS Rules","description":"To test if browser supports some #CSS rules, do following:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To test if browser supports some #CSS rules, do following:"}]},{"type":"element","tag":"code","props":{"code":"@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","language":"css"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-8e03c3"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-82f423"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-efed79"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e77c6d"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":": blur(5px);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"@mixin"}]},{"type":"text","value":" will only apply rule if browser support backdrop filtering:"}]},{"type":"element","tag":"code","props":{"code":"@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-edb52b"},"children":[{"type":"text","value":"can_backdrop"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@supports"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-68bf07"},"children":[{"type":"text","value":"-webkit-backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2278fa"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-8879a9"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-39b93b"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":")) "}]},{"type":"element","tag":"span","props":{"class":"ct-fbde32"},"children":[{"type":"text","value":"or"}]},{"type":"element","tag":"span","props":{"class":"ct-6cd1fc"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-8e03c3"},"children":[{"type":"text","value":"backdrop-filter"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-82f423"},"children":[{"type":"text","value":"blur"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-efed79"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"px"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" ) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dbcf68"},"children":[{"type":"text","value":"@content"}]},{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b91a4c"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-fbde32{color:#79C0FF}.ct-39b93b{color:#FF7B72}.ct-8879a9{color:#79C0FF}.ct-2278fa{color:#79C0FF}.ct-68bf07{color:#79C0FF}.ct-6cd1fc{color:#C9D1D9}.ct-edb52b{color:#D2A8FF}.ct-e77c6d{color:#7EE787}.ct-efed79{color:#79C0FF}.ct-82f423{color:#79C0FF}.ct-8e03c3{color:#79C0FF}.ct-b91a4c{color:#C9D1D9}.ct-dbcf68{color:#FF7B72}.light .ct-dbcf68{color:#859900}.light .ct-b91a4c{color:#657B83}.light .ct-8e03c3{color:#859900}.light .ct-82f423{color:#268BD2}.light .ct-efed79{color:#D33682}.light .ct-e77c6d{color:#268BD2}.light .ct-edb52b{color:#268BD2}.light .ct-6cd1fc{color:#657B83}.light .ct-68bf07{color:#859900}.light .ct-2278fa{color:#268BD2}.light .ct-8879a9{color:#D33682}.light .ct-39b93b{color:#859900}.light .ct-fbde32{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Test if browser supports CSS rules.md","_source":"content","_file":"CSS/Test if browser supports CSS rules.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/a1s3E9iAyd.json b/api/_content/query/a1s3E9iAyd.json
index a602af8..7dec9a0 100644
--- a/api/_content/query/a1s3E9iAyd.json
+++ b/api/_content/query/a1s3E9iAyd.json
@@ -1 +1 @@
-{"_path":"/docker/wait-for-mysql","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Mysql","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8507"},"children":[{"type":"text","value":"# Waits for mysql to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70b749"},"children":[{"type":"text","value":"wait_for_mysql"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" query="}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\"SELECT count(*) FROM users\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-4a8507"},"children":[{"type":"text","value":"# 3 minutes limit"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-e57ca8"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" mysql --user="}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" -e "}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-26517c"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e57ca8"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":"\"[Error] can't properly query MySQL after "}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-c3bb0d"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-e55956"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-a50f05"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e57ca8"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fbf9b"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5ccace"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a8507"},"children":[{"type":"text","value":"# usage: wait_for_mysql miin-mysql-dev root password database"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-26517c{color:#79C0FF}.ct-c3bb0d{color:#C9D1D9}.ct-e55956{color:#C9D1D9}.ct-e57ca8{color:#79C0FF}.ct-1fbf9b{color:#FF7B72}.ct-a50f05{color:#A5D6FF}.ct-5ccace{color:#C9D1D9}.ct-70b749{color:#D2A8FF}.ct-4a8507{color:#8B949E}.light .ct-4a8507{color:#93A1A1}.light .ct-70b749{color:#268BD2}.light .ct-5ccace{color:#657B83}.light .ct-a50f05{color:#2AA198}.light .ct-1fbf9b{color:#859900}.light .ct-e57ca8{color:#268BD2}.light .ct-e55956{color:#859900}.light .ct-c3bb0d{color:#268BD2}.light .ct-26517c{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for mysql.md","_source":"content","_file":"Docker/Wait for mysql.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/docker/wait-for-mysql","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Wait For Mysql","description":"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.com/vishnubob/wait-for-it","rel":["nofollow"]},"children":[{"type":"text","value":"wait-for-it.sh"}]},{"type":"text","value":" doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This script waits for first successful query from database or exits with non-zero status after timeout."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Don't forget to change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"$query"}]},{"type":"text","value":" for the actually working one."}]},{"type":"element","tag":"code","props":{"code":"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 >/dev/null 2>&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8bfaab"},"children":[{"type":"text","value":"# Waits for mysql to become actually available"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5bdad6"},"children":[{"type":"text","value":"wait_for_mysql"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":"() {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" query="}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\"SELECT count(*) FROM users\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" timeout=180 "}]},{"type":"element","tag":"span","props":{"class":"ct-8bfaab"},"children":[{"type":"text","value":"# 3 minutes limit"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" i=0"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"while"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-a7fb56"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" -it "}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" mysql --user="}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" -e "}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"query"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"do"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" sleep 1"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" i="}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"$(("}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-bc3d47"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"))"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" [[ "}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"-ge"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"timeout"}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" ]]"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":";"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"then"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7fb56"},"children":[{"type":"text","value":"echo"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":"\"[Error] can't properly query MySQL after "}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"${"}]},{"type":"element","tag":"span","props":{"class":"ct-e4c0f5"},"children":[{"type":"text","value":"i"}]},{"type":"element","tag":"span","props":{"class":"ct-a7151b"},"children":[{"type":"text","value":"}"}]},{"type":"element","tag":"span","props":{"class":"ct-2c4b57"},"children":[{"type":"text","value":" secs\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a7fb56"},"children":[{"type":"text","value":"exit"}]},{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" 1"}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"fi"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8dc176"},"children":[{"type":"text","value":"done"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e9b20a"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8bfaab"},"children":[{"type":"text","value":"# usage: wait_for_mysql miin-mysql-dev root password database"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"Wait%20for%20redis"},"children":[{"type":"text","value":"Wait for redis"}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-bc3d47{color:#79C0FF}.ct-e4c0f5{color:#C9D1D9}.ct-a7151b{color:#C9D1D9}.ct-a7fb56{color:#79C0FF}.ct-8dc176{color:#FF7B72}.ct-2c4b57{color:#A5D6FF}.ct-e9b20a{color:#C9D1D9}.ct-5bdad6{color:#D2A8FF}.ct-8bfaab{color:#8B949E}.light .ct-8bfaab{color:#93A1A1}.light .ct-5bdad6{color:#268BD2}.light .ct-e9b20a{color:#657B83}.light .ct-2c4b57{color:#2AA198}.light .ct-8dc176{color:#859900}.light .ct-a7fb56{color:#268BD2}.light .ct-a7151b{color:#859900}.light .ct-e4c0f5{color:#268BD2}.light .ct-bc3d47{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Wait for mysql.md","_source":"content","_file":"Docker/Wait for mysql.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/aP6pCxBj14.json b/api/_content/query/aP6pCxBj14.json
index 14a746e..8589215 100644
--- a/api/_content/query/aP6pCxBj14.json
+++ b/api/_content/query/aP6pCxBj14.json
@@ -1 +1 @@
-{"_path":"/linux/resume-or-start-screen-session","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Resume Or Start Screen Session","description":"Running this script will enter currently running screen session or will start new one.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":"( screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-ec43e4"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":" ( screen -d bash "}]},{"type":"element","tag":"span","props":{"class":"ct-ec43e4"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":" screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-ec43e4"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-db49b0"},"children":[{"type":"text","value":" screen -SAm bash bash ) )"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-ec43e4{color:#FF7B72}.ct-db49b0{color:#C9D1D9}.light .ct-db49b0{color:#657B83}.light .ct-ec43e4{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Resume or start screen session.md","_source":"content","_file":"Linux/Resume or start screen session.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/linux/resume-or-start-screen-session","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Resume Or Start Screen Session","description":"Running this script will enter currently running screen session or will start new one.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Running this script will enter currently running "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"screen"}]},{"type":"text","value":" session or will start new one."}]},{"type":"element","tag":"code","props":{"code":"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":"( screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-25b057"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":" ( screen -d bash "}]},{"type":"element","tag":"span","props":{"class":"ct-25b057"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":" screen -r bash "}]},{"type":"element","tag":"span","props":{"class":"ct-25b057"},"children":[{"type":"text","value":"||"}]},{"type":"element","tag":"span","props":{"class":"ct-601819"},"children":[{"type":"text","value":" screen -SAm bash bash ) )"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-25b057{color:#FF7B72}.ct-601819{color:#C9D1D9}.light .ct-601819{color:#657B83}.light .ct-25b057{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Resume or start screen session.md","_source":"content","_file":"Linux/Resume or start screen session.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/arOc40mIpI.json b/api/_content/query/arOc40mIpI.json
index c6b2422..a52fcce 100644
--- a/api/_content/query/arOc40mIpI.json
+++ b/api/_content/query/arOc40mIpI.json
@@ -1 +1 @@
-{"_path":"/docker/drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Drone Ci","description":"Can be used with Private docker registry to deploy things using #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"drone repo update $1 --trusted=true && drone repo info $1\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"build-master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"plugins/docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"when"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"branch"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"dockerfile"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"Dockerfile"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"tag"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"${DRONE_BRANCH}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"global_docker_login"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"global_docker_password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"global_docker_registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"repo"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"docker_repo"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"drone"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone/drone:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_ID=secret_id"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_SECRET=client_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_SERVER_HOST=drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_USER_CREATE=\"username:user,admin:true\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_SERVER_PROTO=https"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_TLS_AUTOCERT=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_GIT_ALWAYS_AUTH=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_LOGS_DEBUG=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_LOGS_TRACE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"./data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"8090:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"drone-agent"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone__agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"drone/agent:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fb65a1"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_RPC_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-7193cf"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-99ea24"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" DRONE_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-99ea24"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" DRONE_TOKEN=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":"drone info"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":"drone repo update "}]},{"type":"element","tag":"span","props":{"class":"ct-284309"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-444ee1"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" --trusted=true "}]},{"type":"element","tag":"span","props":{"class":"ct-bd5f5f"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-da43a2"},"children":[{"type":"text","value":" drone repo info "}]},{"type":"element","tag":"span","props":{"class":"ct-284309"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-444ee1"},"children":[{"type":"text","value":"1"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-bd5f5f{color:#FF7B72}.ct-444ee1{color:#C9D1D9}.ct-284309{color:#C9D1D9}.ct-99ea24{color:#FF7B72}.ct-7193cf{color:#A5D6FF}.ct-da43a2{color:#C9D1D9}.ct-fb65a1{color:#7EE787}.light .ct-fb65a1{color:#268BD2}.light .ct-da43a2{color:#657B83}.light .ct-7193cf{color:#2AA198}.light .ct-99ea24{color:#073642}.light .ct-284309{color:#859900}.light .ct-444ee1{color:#268BD2}.light .ct-bd5f5f{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"pushing-to-private-docker_registry","depth":2,"text":"Pushing to private docker_registry"},{"id":"docker-compose-file-for-drone-ci","depth":2,"text":"Docker-compose file for drone-ci"},{"id":"caching-builds","depth":2,"text":"Caching builds"},{"id":"get-user-info","depth":2,"text":"Get user info"},{"id":"mark-user-as-trusted","depth":2,"text":"Mark user as trusted"}]}},"_type":"markdown","_id":"content:Docker:Drone-ci.md","_source":"content","_file":"Docker/Drone-ci.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/docker/drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Drone Ci","description":"Can be used with Private docker registry to deploy things using #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n"}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"drone repo update $1 --trusted=true && drone repo info $1\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Can be used with "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"Private docker registry"}]},{"type":"text","value":" to deploy things using #docker."}]},{"type":"element","tag":"h2","props":{"id":"pushing-to-private-docker_registry"},"children":[{"type":"text","value":"Pushing to private docker_registry"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should specify "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_login"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_password"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"global_docker_registry"}]},{"type":"text","value":" organizations variables in your "},{"type":"element","tag":"strong","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":". And "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker_repo"}]},{"type":"text","value":" variable for your repo as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docker.yourdomain.com/your-image"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This is example of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".droneci"}]},{"type":"text","value":" for "},{"type":"element","tag":"a","props":{"href":"Private%20docker%20registry"},"children":[{"type":"text","value":"private docker registry"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins/docker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"build-master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"plugins/docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"when"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"branch"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"master"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"dockerfile"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"Dockerfile"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"tag"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"${DRONE_BRANCH}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"global_docker_login"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"global_docker_password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"registry"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"global_docker_registry"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"repo"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"docker_repo"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-for-drone-ci"},"children":[{"type":"text","value":"Docker-compose file for drone-ci"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"The "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone"}]},{"type":"text","value":" service is ui itself and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone-agent"}]},{"type":"text","value":" is runner for builds, that can be started on different machine (or machines)."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Change "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"secret_id"}]},{"type":"text","value":", "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"rpc_secret"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"drone.url"}]},{"type":"text","value":" to something you like."}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone/drone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - ./data:/data\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone/agent:latest\n command: agent\n restart: always\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - DRONE_RPC_SERVER=https://drone.url\n - DRONE_RPC_SECRET=rpc_secret\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"drone"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone/drone:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_ID=secret_id"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_GITHUB_CLIENT_SECRET=client_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_SERVER_HOST=drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_USER_CREATE=\"username:user,admin:true\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_SERVER_PROTO=https"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_TLS_AUTOCERT=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_GIT_ALWAYS_AUTH=false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_LOGS_DEBUG=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_LOGS_TRACE=true"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"./data:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"8090:80"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"drone-agent"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone__agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"drone/agent:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"agent"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"/var/run/docker.sock:/var/run/docker.sock"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ffab44"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_RPC_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-8ea36a"},"children":[{"type":"text","value":"DRONE_RPC_SECRET=rpc_secret"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"caching-builds"},"children":[{"type":"text","value":"Caching builds"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Haven't checked that yet, but there's a "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/the-ultimate-droneci-caching-guide","rel":["nofollow"]},"children":[{"type":"text","value":"manual"}]},{"type":"text","value":" from "},{"type":"element","tag":"a","props":{"href":"https://laszlo.cloud/","rel":["nofollow"]},"children":[{"type":"text","value":"Laszlo Fogas"}]},{"type":"text","value":" about that."}]},{"type":"element","tag":"h2","props":{"id":"get-user-info"},"children":[{"type":"text","value":"Get user info"}]},{"type":"element","tag":"code","props":{"code":"export DRONE_SERVER=https://drone.url\nexport DRONE_TOKEN=password\ndrone info\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3b0169"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" DRONE_SERVER=https://drone.url"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3b0169"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" DRONE_TOKEN=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":"drone info"}]}]}]}]}]},{"type":"element","tag":"h2","props":{"id":"mark-user-as-trusted"},"children":[{"type":"text","value":"Mark user as trusted"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"drone repo update $1 --trusted=true && drone repo info $1\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":"drone repo update "}]},{"type":"element","tag":"span","props":{"class":"ct-e22f74"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-de839e"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" --trusted=true "}]},{"type":"element","tag":"span","props":{"class":"ct-a7bf35"},"children":[{"type":"text","value":"&&"}]},{"type":"element","tag":"span","props":{"class":"ct-66c1f2"},"children":[{"type":"text","value":" drone repo info "}]},{"type":"element","tag":"span","props":{"class":"ct-e22f74"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-de839e"},"children":[{"type":"text","value":"1"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-a7bf35{color:#FF7B72}.ct-de839e{color:#C9D1D9}.ct-e22f74{color:#C9D1D9}.ct-3b0169{color:#FF7B72}.ct-8ea36a{color:#A5D6FF}.ct-66c1f2{color:#C9D1D9}.ct-ffab44{color:#7EE787}.light .ct-ffab44{color:#268BD2}.light .ct-66c1f2{color:#657B83}.light .ct-8ea36a{color:#2AA198}.light .ct-3b0169{color:#073642}.light .ct-e22f74{color:#859900}.light .ct-de839e{color:#268BD2}.light .ct-a7bf35{color:#859900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"pushing-to-private-docker_registry","depth":2,"text":"Pushing to private docker_registry"},{"id":"docker-compose-file-for-drone-ci","depth":2,"text":"Docker-compose file for drone-ci"},{"id":"caching-builds","depth":2,"text":"Caching builds"},{"id":"get-user-info","depth":2,"text":"Get user info"},{"id":"mark-user-as-trusted","depth":2,"text":"Mark user as trusted"}]}},"_type":"markdown","_id":"content:Docker:Drone-ci.md","_source":"content","_file":"Docker/Drone-ci.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/eIcZslqPOz.json b/api/_content/query/eIcZslqPOz.json
index ecca762..2f14aa2 100644
--- a/api/_content/query/eIcZslqPOz.json
+++ b/api/_content/query/eIcZslqPOz.json
@@ -1 +1 @@
-{"_path":"/git/force-git-to-use-https","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Force Git To Use HTTPS","description":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[url \"https://github.com\"]\n insteadOf = git://github.com\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":"[url "}]},{"type":"element","tag":"span","props":{"class":"ct-708ecc"},"children":[{"type":"text","value":"\"https://github.com\""}]},{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":" insteadOf "}]},{"type":"element","tag":"span","props":{"class":"ct-576914"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-04d8c6"},"children":[{"type":"text","value":" git:"}]},{"type":"element","tag":"span","props":{"class":"ct-b38bad"},"children":[{"type":"text","value":"//github.com"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b38bad{color:#8B949E}.ct-576914{color:#FF7B72}.ct-708ecc{color:#A5D6FF}.ct-04d8c6{color:#C9D1D9}.light .ct-04d8c6{color:#657B83}.light .ct-708ecc{color:#2AA198}.light .ct-576914{color:#859900}.light .ct-b38bad{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Force git to use HTTPS.md","_source":"content","_file":"Git/Force git to use HTTPS.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/git/force-git-to-use-https","_dir":"git","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Force Git To Use HTTPS","description":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"[url \"https://github.com\"]\n insteadOf = git://github.com\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Put this inside your "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"~/.gitconfig"}]},{"type":"text","value":":"}]},{"type":"element","tag":"code","props":{"code":"[url \"https://github.com\"]\n insteadOf = git://github.com\n","language":"c"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":"[url "}]},{"type":"element","tag":"span","props":{"class":"ct-4e2a11"},"children":[{"type":"text","value":"\"https://github.com\""}]},{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":" insteadOf "}]},{"type":"element","tag":"span","props":{"class":"ct-0b086c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-79f868"},"children":[{"type":"text","value":" git:"}]},{"type":"element","tag":"span","props":{"class":"ct-2cc518"},"children":[{"type":"text","value":"//github.com"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-2cc518{color:#8B949E}.ct-0b086c{color:#FF7B72}.ct-4e2a11{color:#A5D6FF}.ct-79f868{color:#C9D1D9}.light .ct-79f868{color:#657B83}.light .ct-4e2a11{color:#2AA198}.light .ct-0b086c{color:#859900}.light .ct-2cc518{color:#93A1A1}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Git:Force git to use HTTPS.md","_source":"content","_file":"Git/Force git to use HTTPS.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/epeSDkttbj.json b/api/_content/query/epeSDkttbj.json
index a5327e8..f41600d 100644
--- a/api/_content/query/epeSDkttbj.json
+++ b/api/_content/query/epeSDkttbj.json
@@ -1 +1 @@
-{"_path":"/css/sass-nth-child-iterate-mixin","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Sass Nth Child Iterate Mixin","description":"Say, we need to color n items by specific colors, which depend on its position. #SCSS supports iteration over lists for that purposes:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-78d561"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85c0d9"},"children":[{"type":"text","value":"color-per-child"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-78d561"},"children":[{"type":"text","value":"@each"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-78d561"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ad16d4"},"children":[{"type":"text","value":"&"}]},{"type":"element","tag":"span","props":{"class":"ct-ff2dca"},"children":[{"type":"text","value":":nth-child"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"#{"}]},{"type":"element","tag":"span","props":{"class":"ct-0590fc"},"children":[{"type":"text","value":"index"}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"(($colors), ($color))}"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5f6e85"},"children":[{"type":"text","value":"color"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-2270c7"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-4a01b1"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9f574b"},"children":[{"type":"text","value":".item"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f005ac"},"children":[{"type":"text","value":"@include"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3e505e"},"children":[{"type":"text","value":"color_per_child"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#ded187"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#dbde87"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#bade87"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#9cde87"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-b03ccc"},"children":[{"type":"text","value":"#87deaa"}]},{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-59c4a2"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b03ccc{color:#79C0FF}.ct-3e505e{color:#D2A8FF}.ct-f005ac{color:#FF7B72}.ct-9f574b{color:#79C0FF}.ct-59c4a2{color:#C9D1D9}.ct-5f6e85{color:#79C0FF}.ct-0590fc{color:#79C0FF}.ct-ff2dca{color:#79C0FF}.ct-ad16d4{color:#7EE787}.ct-2270c7{color:#FFA657}.ct-85c0d9{color:#D2A8FF}.ct-4a01b1{color:#C9D1D9}.ct-78d561{color:#FF7B72}.light .ct-78d561{color:#859900}.light .ct-4a01b1{color:#657B83}.light .ct-85c0d9{color:#268BD2}.light .ct-2270c7{color:#657B83}.light .ct-ad16d4{color:#268BD2}.light .ct-ff2dca{color:#93A1A1}.light .ct-0590fc{color:#268BD2}.light .ct-5f6e85{color:#859900}.light .ct-59c4a2{color:#657B83}.light .ct-9f574b{color:#93A1A1}.light .ct-f005ac{color:#859900}.light .ct-3e505e{color:#268BD2}.light .ct-b03ccc{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Sass nth-child iterate mixin.md","_source":"content","_file":"CSS/Sass nth-child iterate mixin.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/css/sass-nth-child-iterate-mixin","_dir":"css","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Sass Nth Child Iterate Mixin","description":"Say, we need to color n items by specific colors, which depend on its position. #SCSS supports iteration over lists for that purposes:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Say, we need to color "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" items by specific colors, which depend on its position. #SCSS supports "},{"type":"element","tag":"a","props":{"href":"https://sass-lang.com/documentation/at-rules/control/each","rel":["nofollow"]},"children":[{"type":"text","value":"iteration over lists"}]},{"type":"text","value":" for that purposes:"}]},{"type":"element","tag":"code","props":{"code":"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b277f3"},"children":[{"type":"text","value":"@mixin"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d670a"},"children":[{"type":"text","value":"color-per-child"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b277f3"},"children":[{"type":"text","value":"@each"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b277f3"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$colors"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a71f0f"},"children":[{"type":"text","value":"&"}]},{"type":"element","tag":"span","props":{"class":"ct-aa41da"},"children":[{"type":"text","value":":nth-child"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"#{"}]},{"type":"element","tag":"span","props":{"class":"ct-c4485f"},"children":[{"type":"text","value":"index"}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"(($colors), ($color))}"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c18acb"},"children":[{"type":"text","value":"color"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-259557"},"children":[{"type":"text","value":"$color"}]},{"type":"element","tag":"span","props":{"class":"ct-e6daf7"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage is simple:"}]},{"type":"element","tag":"code","props":{"code":".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","language":"scss"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ab6de3"},"children":[{"type":"text","value":".item"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-26dd38"},"children":[{"type":"text","value":"@include"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-21f33b"},"children":[{"type":"text","value":"color_per_child"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#ded187"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#dbde87"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#bade87"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#9cde87"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c0c245"},"children":[{"type":"text","value":"#87deaa"}]},{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"));"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-d60e7d"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c0c245{color:#79C0FF}.ct-21f33b{color:#D2A8FF}.ct-26dd38{color:#FF7B72}.ct-ab6de3{color:#79C0FF}.ct-d60e7d{color:#C9D1D9}.ct-c18acb{color:#79C0FF}.ct-c4485f{color:#79C0FF}.ct-aa41da{color:#79C0FF}.ct-a71f0f{color:#7EE787}.ct-259557{color:#FFA657}.ct-1d670a{color:#D2A8FF}.ct-e6daf7{color:#C9D1D9}.ct-b277f3{color:#FF7B72}.light .ct-b277f3{color:#859900}.light .ct-e6daf7{color:#657B83}.light .ct-1d670a{color:#268BD2}.light .ct-259557{color:#657B83}.light .ct-a71f0f{color:#268BD2}.light .ct-aa41da{color:#93A1A1}.light .ct-c4485f{color:#268BD2}.light .ct-c18acb{color:#859900}.light .ct-d60e7d{color:#657B83}.light .ct-ab6de3{color:#93A1A1}.light .ct-26dd38{color:#859900}.light .ct-21f33b{color:#268BD2}.light .ct-c0c245{color:#CB4B16}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:CSS:Sass nth-child iterate mixin.md","_source":"content","_file":"CSS/Sass nth-child iterate mixin.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/gviYR2nAXj.json b/api/_content/query/gviYR2nAXj.json
index 28f58fc..c6b208c 100644
--- a/api/_content/query/gviYR2nAXj.json
+++ b/api/_content/query/gviYR2nAXj.json
@@ -1 +1 @@
-{"_path":"/linux/gitea-for-git-hosting","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Gitea For Git Hosting","description":"Self-hosted #git repositories with gitea and #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"gitea"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"external"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c68ffc"},"children":[{"type":"text","value":"false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"gitea/gitea:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"USER_UID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"USER_GID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"./var/lib/gitea:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"./etc/gitea:/etc/gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"/etc/timezone:/etc/timezone:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"/etc/localtime:/etc/localtime:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dfedfa"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"\"3000:3000\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1d1885"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-f868d0"},"children":[{"type":"text","value":"\"222:22\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-c68ffc{color:#79C0FF}.ct-f868d0{color:#A5D6FF}.ct-1d1885{color:#C9D1D9}.ct-dfedfa{color:#7EE787}.light .ct-dfedfa{color:#268BD2}.light .ct-1d1885{color:#657B83}.light .ct-f868d0{color:#2AA198}.light .ct-c68ffc{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-with-docker-compose","depth":2,"text":"Setting up with docker-compose"}]}},"_type":"markdown","_id":"content:Linux:Gitea for git hosting.md","_source":"content","_file":"Linux/Gitea for git hosting.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/linux/gitea-for-git-hosting","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Gitea For Git Hosting","description":"Self-hosted #git repositories with gitea and #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Self-hosted #git repositories with "},{"type":"element","tag":"a","props":{"href":"https://gitea.io/ru-ru/","rel":["nofollow"]},"children":[{"type":"text","value":"gitea"}]},{"type":"text","value":" and #docker."}]},{"type":"element","tag":"h2","props":{"id":"setting-up-with-docker-compose"},"children":[{"type":"text","value":"Setting up with docker-compose"}]},{"type":"element","tag":"code","props":{"code":"version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea/gitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - ./var/lib/gitea:/data\n - ./etc/gitea:/etc/gitea\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"\"3\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"gitea"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"external"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-8d9103"},"children":[{"type":"text","value":"false"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"server"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"gitea/gitea:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"USER_UID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"USER_GID=1000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"always"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"networks"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"./var/lib/gitea:/data"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"./etc/gitea:/etc/gitea"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"/etc/timezone:/etc/timezone:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"/etc/localtime:/etc/localtime:ro"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2192d"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"\"3000:3000\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-776d60"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-591a8d"},"children":[{"type":"text","value":"\"222:22\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8d9103{color:#79C0FF}.ct-591a8d{color:#A5D6FF}.ct-776d60{color:#C9D1D9}.ct-b2192d{color:#7EE787}.light .ct-b2192d{color:#268BD2}.light .ct-776d60{color:#657B83}.light .ct-591a8d{color:#2AA198}.light .ct-8d9103{color:#B58900}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"setting-up-with-docker-compose","depth":2,"text":"Setting up with docker-compose"}]}},"_type":"markdown","_id":"content:Linux:Gitea for git hosting.md","_source":"content","_file":"Linux/Gitea for git hosting.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/iZIUw8pCoM.json b/api/_content/query/iZIUw8pCoM.json
index fc13c80..f06d762 100644
--- a/api/_content/query/iZIUw8pCoM.json
+++ b/api/_content/query/iZIUw8pCoM.json
@@ -1 +1 @@
-{"_path":"/typescript/type-guards","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Type Guards","description":"Useful for type checking at compile and run time:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-138491"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b796fd"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-15dca2"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-948562"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-948562"},"children":[{"type":"text","value":"Bird"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-15dca2"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f21965"},"children":[{"type":"text","value":"is"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-948562"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-6efcfa"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f94cce"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9418c1"},"children":[{"type":"text","value":"undefined"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-85c28d"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-80cbd7"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"getSmallPet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-4141b8"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-915af4"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-371350"},"children":[{"type":"text","value":"fly"}]},{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f75c61"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-371350{color:#D2A8FF}.ct-80cbd7{color:#79C0FF}.ct-85c28d{color:#FF7B72}.ct-9418c1{color:#79C0FF}.ct-f94cce{color:#FFA657}.ct-915af4{color:#C9D1D9}.ct-4141b8{color:#FF7B72}.ct-f75c61{color:#C9D1D9}.ct-948562{color:#FFA657}.ct-f21965{color:#FF7B72}.ct-15dca2{color:#FFA657}.ct-b796fd{color:#D2A8FF}.ct-6efcfa{color:#C9D1D9}.ct-138491{color:#FF7B72}.light .ct-138491{color:#073642}.light .ct-6efcfa{color:#657B83}.light .ct-b796fd{color:#268BD2}.light .ct-15dca2{color:#657B83}.light .ct-f21965{color:#859900}.light .ct-948562{color:#268BD2}.light .ct-f75c61{color:#657B83}.light .ct-4141b8{color:#859900}.light .ct-915af4{color:#268BD2}.light .ct-f94cce{color:#268BD2}.light .ct-9418c1{color:#B58900}.light .ct-85c28d{color:#073642}.light .ct-80cbd7{color:#268BD2}.light .ct-371350{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Type guards.md","_source":"content","_file":"Typescript/Type guards.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/typescript/type-guards","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Type Guards","description":"Useful for type checking at compile and run time:","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Useful for type checking at compile and run time:"}]},{"type":"element","tag":"code","props":{"code":"function isFish(pet: Fish | Bird): pet is Fish {\n return (pet as Fish).swim !== undefined;\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-cfdc67"},"children":[{"type":"text","value":"function"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3073f0"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-efe9ec"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f25460"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f25460"},"children":[{"type":"text","value":"Bird"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":")"}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-efe9ec"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1f4d57"},"children":[{"type":"text","value":"is"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f25460"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-b29a33"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"as"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-329c83"},"children":[{"type":"text","value":"Fish"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":")."}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"!=="}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9b70c1"},"children":[{"type":"text","value":"undefined"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Usage:"}]},{"type":"element","tag":"code","props":{"code":"const pet = getSmallPet();\n \nif (isFish(pet)) {\n pet.swim();\n} else {\n pet.fly();\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-2465e5"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cfade6"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"getSmallPet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"isFish"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":")) {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"swim"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"} "}]},{"type":"element","tag":"span","props":{"class":"ct-8b80ca"},"children":[{"type":"text","value":"else"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-31eb3b"},"children":[{"type":"text","value":"pet"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-74a62f"},"children":[{"type":"text","value":"fly"}]},{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-665607"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-74a62f{color:#D2A8FF}.ct-cfade6{color:#79C0FF}.ct-2465e5{color:#FF7B72}.ct-9b70c1{color:#79C0FF}.ct-329c83{color:#FFA657}.ct-31eb3b{color:#C9D1D9}.ct-8b80ca{color:#FF7B72}.ct-665607{color:#C9D1D9}.ct-f25460{color:#FFA657}.ct-1f4d57{color:#FF7B72}.ct-efe9ec{color:#FFA657}.ct-3073f0{color:#D2A8FF}.ct-b29a33{color:#C9D1D9}.ct-cfdc67{color:#FF7B72}.light .ct-cfdc67{color:#073642}.light .ct-b29a33{color:#657B83}.light .ct-3073f0{color:#268BD2}.light .ct-efe9ec{color:#657B83}.light .ct-1f4d57{color:#859900}.light .ct-f25460{color:#268BD2}.light .ct-665607{color:#657B83}.light .ct-8b80ca{color:#859900}.light .ct-31eb3b{color:#268BD2}.light .ct-329c83{color:#268BD2}.light .ct-9b70c1{color:#B58900}.light .ct-2465e5{color:#073642}.light .ct-cfade6{color:#268BD2}.light .ct-74a62f{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Type guards.md","_source":"content","_file":"Typescript/Type guards.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/ki2hTtdZ9z.json b/api/_content/query/ki2hTtdZ9z.json
index 9f5c327..e8a0257 100644
--- a/api/_content/query/ki2hTtdZ9z.json
+++ b/api/_content/query/ki2hTtdZ9z.json
@@ -1 +1 @@
-{"_path":"/typescript/flatten-object-with-periods","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Flatten Object With Periods","description":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'./en.json'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"typeof"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b0a50d"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-dd90c5"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-9d1d29"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-c39fb5"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-9d1d29"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ddf795"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-c39fb5"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-9d1d29"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ddf795"},"children":[{"type":"text","value":"TranslateOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-94a616"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-b0a50d"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"I18nLib"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-49a6c2"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-f14d0f"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// plural object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"''"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" { ["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"-?:"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]>> }["}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bff26a"},"children":[{"type":"text","value":"// Fix it for you plural form"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'one'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'few'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'many'"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"}${''"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-49fc29"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"'.'}${"}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-494636"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-7a9043"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-303a3b"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"4"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-a198cf"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-04960c"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-87bd42"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-df5c8f"},"children":[{"type":"text","value":">];"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-49fc29{color:#A5D6FF}.ct-87bd42{color:#79C0FF}.ct-303a3b{color:#79C0FF}.ct-bff26a{color:#8B949E}.ct-49a6c2{color:#D2A8FF}.ct-ddf795{color:#FFA657}.ct-c39fb5{color:#FFA657}.ct-9d1d29{color:#FF7B72}.ct-dd90c5{color:#D2A8FF}.ct-94a616{color:#C9D1D9}.ct-b0a50d{color:#FF7B72}.ct-04960c{color:#FFA657}.ct-7a9043{color:#FF7B72}.ct-494636{color:#A5D6FF}.ct-f14d0f{color:#C9D1D9}.ct-df5c8f{color:#C9D1D9}.ct-a198cf{color:#FF7B72}.light .ct-a198cf{color:#859900}.light .ct-df5c8f{color:#657B83}.light .ct-f14d0f{color:#268BD2}.light .ct-494636{color:#2AA198}.light .ct-7a9043{color:#073642}.light .ct-04960c{color:#268BD2}.light .ct-b0a50d{color:#073642}.light .ct-94a616{color:#657B83}.light .ct-dd90c5{color:#268BD2}.light .ct-9d1d29{color:#859900}.light .ct-c39fb5{color:#657B83}.light .ct-ddf795{color:#268BD2}.light .ct-49a6c2{color:#268BD2}.light .ct-bff26a{color:#93A1A1}.light .ct-303a3b{color:#859900}.light .ct-87bd42{color:#D33682}.light .ct-49fc29{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Flatten object with periods.md","_source":"content","_file":"Typescript/Flatten object with periods.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/typescript/flatten-object-with-periods","_dir":"typescript","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Flatten Object With Periods","description":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This helper generates Typescript types for i18n dictionary json\nfiles by flattening it with period delimiter. Supports plural forms."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Used for typing "},{"type":"element","tag":"a","props":{"href":"https://www.npmjs.com/package/i18n-js","rel":["nofollow"]},"children":[{"type":"text","value":"i18n.js"}]},{"type":"text","value":" dictionaries;"}]},{"type":"element","tag":"code","props":{"code":"import en from './en.json';\ntype TranslationPath = Flatten;\n\nconst t = (key: TranslationPath, options?: TranslateOptions) =>\n I18nLib.t(key, options);\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"import"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"from"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'./en.json'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"typeof"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"en"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9c6a9e"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e75aca"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0e1dff"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-52a8c3"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-0e1dff"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5cf4"},"children":[{"type":"text","value":"TranslationPath"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-52a8c3"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-0e1dff"},"children":[{"type":"text","value":"?:"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1a5cf4"},"children":[{"type":"text","value":"TranslateOptions"}]},{"type":"element","tag":"span","props":{"class":"ct-5b0d40"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-9c6a9e"},"children":[{"type":"text","value":"=>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"I18nLib"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-00f008"},"children":[{"type":"text","value":"t"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"key"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-6e0b60"},"children":[{"type":"text","value":"options"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":");"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Flatten type defined here:"}]},{"type":"element","tag":"code","props":{"code":"// This one based on answer from StackOverflow:\n// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object\n\nexport type Flatten = [D] extends [never]\n ? never\n : T extends PluralForm // plural object\n ? ''\n : T extends object\n ? { [K in keyof T]-?: Join> }[keyof T]\n : '';\n\n// Fix it for you plural form\ntype PluralForm = Record<'one' | 'few' | 'many', string>;\n\ntype Join = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never;\n\ntype Prev = [never, 0, 1, 2, 3, 4, 5, ...Array<0>];\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// This one based on answer from StackOverflow:"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// https://stackoverflow.com/questions/58434389/typescript-deep-keyof-of-a-nested-object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"export"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"] "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// plural object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"''"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"object"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" { ["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"in"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]"}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"-?:"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Flatten"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"], "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"["}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"D"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]>> }["}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"keyof"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"T"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"]"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a6989f"},"children":[{"type":"text","value":"// Fix it for you plural form"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"PluralForm"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Record"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'one'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'few'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'many'"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":">;"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Join"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"string"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"number"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"`${"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"K"}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"}${''"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"extends"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"?"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"''"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b9a2e0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"'.'}${"}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"P"}]},{"type":"element","tag":"span","props":{"class":"ct-a65580"},"children":[{"type":"text","value":"}`"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-34fed5"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Prev"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-0d1c1f"},"children":[{"type":"text","value":"never"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"1"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"2"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"3"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"4"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"5"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-afd604"},"children":[{"type":"text","value":"..."}]},{"type":"element","tag":"span","props":{"class":"ct-d7ac62"},"children":[{"type":"text","value":"Array"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-94f218"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-f354ee"},"children":[{"type":"text","value":">];"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b9a2e0{color:#A5D6FF}.ct-94f218{color:#79C0FF}.ct-0d1c1f{color:#79C0FF}.ct-a6989f{color:#8B949E}.ct-00f008{color:#D2A8FF}.ct-1a5cf4{color:#FFA657}.ct-52a8c3{color:#FFA657}.ct-0e1dff{color:#FF7B72}.ct-e75aca{color:#D2A8FF}.ct-5b0d40{color:#C9D1D9}.ct-9c6a9e{color:#FF7B72}.ct-d7ac62{color:#FFA657}.ct-34fed5{color:#FF7B72}.ct-a65580{color:#A5D6FF}.ct-6e0b60{color:#C9D1D9}.ct-f354ee{color:#C9D1D9}.ct-afd604{color:#FF7B72}.light .ct-afd604{color:#859900}.light .ct-f354ee{color:#657B83}.light .ct-6e0b60{color:#268BD2}.light .ct-a65580{color:#2AA198}.light .ct-34fed5{color:#073642}.light .ct-d7ac62{color:#268BD2}.light .ct-9c6a9e{color:#073642}.light .ct-5b0d40{color:#657B83}.light .ct-e75aca{color:#268BD2}.light .ct-0e1dff{color:#859900}.light .ct-52a8c3{color:#657B83}.light .ct-1a5cf4{color:#268BD2}.light .ct-00f008{color:#268BD2}.light .ct-a6989f{color:#93A1A1}.light .ct-0d1c1f{color:#859900}.light .ct-94f218{color:#D33682}.light .ct-b9a2e0{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Typescript:Flatten object with periods.md","_source":"content","_file":"Typescript/Flatten object with periods.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/kmbybMtElx.json b/api/_content/query/kmbybMtElx.json
index 9dc519b..ecf4f41 100644
--- a/api/_content/query/kmbybMtElx.json
+++ b/api/_content/query/kmbybMtElx.json
@@ -1 +1 @@
-{"_path":"/linux/google-photos-alternative-with-photoprism","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Google Photos Alternative With Photoprism","description":"Photo Prism is a free alternative to Google photos, can be set up with #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"'3.5'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"photoprism"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism__app"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism/photoprism:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"depends_on"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"mariadb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"2342:2342"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01eeba"},"children":[{"type":"text","value":"# HTTP port (host:container)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_ADMIN_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"password\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"https://service.url/\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_ORIGINALS_LIMIT"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-ae9c82"},"children":[{"type":"text","value":"5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_HTTP_COMPRESSION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"gzip\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DEBUG"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_PUBLIC"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_READONLY"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_EXPERIMENTAL"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CHOWN"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_WEBDAV"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_SETTINGS"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_TENSORFLOW"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_FACES"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CLASSIFICATION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DARKTABLE_PRESETS"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DETECT_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_UPLOAD_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"true\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_DRIVER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_SERVER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"mariadb:3306\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_NAME"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"photoprism\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"root\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"insecure\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_TITLE"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"PhotoPrism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_CAPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"Browse Your Life\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_DESCRIPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_AUTHOR"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"HOME"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"working_dir"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./data/originals:/photoprism/originals\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./data/imports:/photoprism/import\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./data/storage:/photoprism/storage\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"mariadb"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism__db"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"mariadb:10.6"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"\"./database:/var/lib/mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-01eeba"},"children":[{"type":"text","value":"# Important, don't remove"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_ROOT_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"insecure"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_DATABASE"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-058624"},"children":[{"type":"text","value":"MYSQL_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-9246a2"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-bd827c"},"children":[{"type":"text","value":"insecure"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-ae9c82{color:#79C0FF}.ct-01eeba{color:#8B949E}.ct-bd827c{color:#A5D6FF}.ct-9246a2{color:#C9D1D9}.ct-058624{color:#7EE787}.light .ct-058624{color:#268BD2}.light .ct-9246a2{color:#657B83}.light .ct-bd827c{color:#2AA198}.light .ct-01eeba{color:#93A1A1}.light .ct-ae9c82{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"docker-compose-file-to-run-it","depth":2,"text":"Docker compose file to run it"}]}},"_type":"markdown","_id":"content:Linux:Google photos alternative with Photoprism.md","_source":"content","_file":"Linux/Google photos alternative with Photoprism.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/linux/google-photos-alternative-with-photoprism","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Google Photos Alternative With Photoprism","description":"Photo Prism is a free alternative to Google photos, can be set up with #docker.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://photoprism.app/","rel":["nofollow"]},"children":[{"type":"text","value":"Photo Prism"}]},{"type":"text","value":" is a free alternative to Google photos, can be set up with #docker."}]},{"type":"element","tag":"h2","props":{"id":"docker-compose-file-to-run-it"},"children":[{"type":"text","value":"Docker compose file to run it"}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Check out current "},{"type":"element","tag":"a","props":{"href":"https://dl.photoprism.app/docker/docker-compose.yml","rel":["nofollow"]},"children":[{"type":"text","value":"example"}]},{"type":"text","value":" at photoprism's "},{"type":"element","tag":"a","props":{"href":"https://docs.photoprism.app/getting-started/docker-compose/","rel":["nofollow"]},"children":[{"type":"text","value":"documentation"}]},{"type":"text","value":"."}]},{"type":"element","tag":"code","props":{"code":"version: '3.5'\n\nservices:\n photoprism:\n container_name: photoprism__app\n image: photoprism/photoprism:latest\n depends_on:\n - mariadb\n restart: unless-stopped\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n ports:\n - 2342:2342 # HTTP port (host:container)\n environment:\n PHOTOPRISM_ADMIN_PASSWORD: \"password\"\n PHOTOPRISM_SITE_URL: \"https://service.url/\"\n PHOTOPRISM_ORIGINALS_LIMIT: 5000\n PHOTOPRISM_HTTP_COMPRESSION: \"gzip\"\n PHOTOPRISM_DEBUG: \"false\" \n PHOTOPRISM_PUBLIC: \"false\" \n PHOTOPRISM_READONLY: \"false\" \n PHOTOPRISM_EXPERIMENTAL: \"false\"\n PHOTOPRISM_DISABLE_CHOWN: \"false\"\n PHOTOPRISM_DISABLE_WEBDAV: \"false\" \n PHOTOPRISM_DISABLE_SETTINGS: \"false\"\n PHOTOPRISM_DISABLE_TENSORFLOW: \"false\"\n PHOTOPRISM_DISABLE_FACES: \"false\" \n PHOTOPRISM_DISABLE_CLASSIFICATION: \"false\"\n PHOTOPRISM_DARKTABLE_PRESETS: \"false\" \n PHOTOPRISM_DETECT_NSFW: \"false\" \n PHOTOPRISM_UPLOAD_NSFW: \"true\" \n PHOTOPRISM_DATABASE_DRIVER: \"mysql\" \n PHOTOPRISM_DATABASE_SERVER: \"mariadb:3306\"\n PHOTOPRISM_DATABASE_NAME: \"photoprism\" \n PHOTOPRISM_DATABASE_USER: \"root\" \n PHOTOPRISM_DATABASE_PASSWORD: \"insecure\" \n PHOTOPRISM_SITE_TITLE: \"PhotoPrism\"\n PHOTOPRISM_SITE_CAPTION: \"Browse Your Life\"\n PHOTOPRISM_SITE_DESCRIPTION: \"\"\n PHOTOPRISM_SITE_AUTHOR: \"\"\n HOME: \"/photoprism\"\n working_dir: \"/photoprism\"\n volumes:\n - \"./data/originals:/photoprism/originals\" \n - \"./data/imports:/photoprism/import\"\n - \"./data/storage:/photoprism/storage\"\n mariadb:\n container_name: photoprism__db\n restart: unless-stopped\n image: mariadb:10.6\n security_opt:\n - seccomp:unconfined\n - apparmor:unconfined\n command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120\n volumes:\n - \"./database:/var/lib/mysql\" # Important, don't remove\n environment:\n MYSQL_ROOT_PASSWORD: insecure\n MYSQL_DATABASE: photoprism\n MYSQL_USER: photoprism\n MYSQL_PASSWORD: insecure\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"version"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"'3.5'"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"services"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"photoprism"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism__app"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism/photoprism:latest"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"depends_on"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"mariadb"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"ports"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"2342:2342"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d08ea5"},"children":[{"type":"text","value":"# HTTP port (host:container)"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_ADMIN_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"password\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_URL"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"https://service.url/\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_ORIGINALS_LIMIT"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b8b9f9"},"children":[{"type":"text","value":"5000"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_HTTP_COMPRESSION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"gzip\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DEBUG"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_PUBLIC"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_READONLY"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_EXPERIMENTAL"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CHOWN"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_WEBDAV"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_SETTINGS"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_TENSORFLOW"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_FACES"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DISABLE_CLASSIFICATION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DARKTABLE_PRESETS"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DETECT_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"false\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_UPLOAD_NSFW"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"true\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_DRIVER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_SERVER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"mariadb:3306\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_NAME"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"photoprism\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"root\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_DATABASE_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"insecure\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_TITLE"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"PhotoPrism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_CAPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"Browse Your Life\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_DESCRIPTION"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"PHOTOPRISM_SITE_AUTHOR"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"HOME"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"working_dir"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"/photoprism\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./data/originals:/photoprism/originals\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./data/imports:/photoprism/import\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./data/storage:/photoprism/storage\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"mariadb"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"container_name"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism__db"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"restart"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"unless-stopped"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"mariadb:10.6"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"security_opt"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"seccomp:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"apparmor:unconfined"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"command"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"volumes"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"\"./database:/var/lib/mysql\""}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d08ea5"},"children":[{"type":"text","value":"# Important, don't remove"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"environment"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_ROOT_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"insecure"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_DATABASE"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_USER"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"photoprism"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-e60b7e"},"children":[{"type":"text","value":"MYSQL_PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-ae203a"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-c16363"},"children":[{"type":"text","value":"insecure"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b8b9f9{color:#79C0FF}.ct-d08ea5{color:#8B949E}.ct-c16363{color:#A5D6FF}.ct-ae203a{color:#C9D1D9}.ct-e60b7e{color:#7EE787}.light .ct-e60b7e{color:#268BD2}.light .ct-ae203a{color:#657B83}.light .ct-c16363{color:#2AA198}.light .ct-d08ea5{color:#93A1A1}.light .ct-b8b9f9{color:#D33682}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"docker-compose-file-to-run-it","depth":2,"text":"Docker compose file to run it"}]}},"_type":"markdown","_id":"content:Linux:Google photos alternative with Photoprism.md","_source":"content","_file":"Linux/Google photos alternative with Photoprism.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/pVAGVLBNPu.json b/api/_content/query/pVAGVLBNPu.json
index 46a7e91..c31f01c 100644
--- a/api/_content/query/pVAGVLBNPu.json
+++ b/api/_content/query/pVAGVLBNPu.json
@@ -1 +1 @@
-{"_path":"/linux/rsync-file-with-ssh","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Rsync File With SSH","description":"Downloads file from #SSH with rsync and puts it in current folder.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-06a595"},"children":[{"type":"text","value":"#!/bin/bash"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"PORT=22"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"HOST=example.com"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"REMOTE_PATH=/tmp"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"REMOTE_FILE=sample.text"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"DEST_PATH=./"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":"rsync -a -e "}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\"ssh -p "}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"PORT"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" -P -v \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"HOST"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"REMOTE_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"REMOTE_FILE"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ff3e51"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-49822f"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-00a1d6"},"children":[{"type":"text","value":"DEST_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-20787d"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-00a1d6{color:#C9D1D9}.ct-49822f{color:#C9D1D9}.ct-20787d{color:#A5D6FF}.ct-ff3e51{color:#C9D1D9}.ct-06a595{color:#8B949E}.light .ct-06a595{color:#93A1A1}.light .ct-ff3e51{color:#657B83}.light .ct-20787d{color:#2AA198}.light .ct-49822f{color:#859900}.light .ct-00a1d6{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Rsync file with SSH.md","_source":"content","_file":"Linux/Rsync file with SSH.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/linux/rsync-file-with-ssh","_dir":"linux","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Rsync File With SSH","description":"Downloads file from #SSH with rsync and puts it in current folder.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Downloads file from #SSH with rsync and puts it in current folder."}]},{"type":"element","tag":"code","props":{"code":"#!/bin/bash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=/tmp\nREMOTE_FILE=sample.text\nDEST_PATH=./\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","language":"bash"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-513342"},"children":[{"type":"text","value":"#!/bin/bash"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"PORT=22"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"USER=user"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"HOST=example.com"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"REMOTE_PATH=/tmp"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"REMOTE_FILE=sample.text"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"DEST_PATH=./"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":"rsync -a -e "}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\"ssh -p "}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"PORT"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" -P -v \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"@"}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"HOST"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"REMOTE_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"/"}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"REMOTE_FILE"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" \\"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-04df41"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-2a82e3"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8bb2e9"},"children":[{"type":"text","value":"DEST_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-c53a8d"},"children":[{"type":"text","value":"\""}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-8bb2e9{color:#C9D1D9}.ct-2a82e3{color:#C9D1D9}.ct-c53a8d{color:#A5D6FF}.ct-04df41{color:#C9D1D9}.ct-513342{color:#8B949E}.light .ct-513342{color:#93A1A1}.light .ct-04df41{color:#657B83}.light .ct-c53a8d{color:#2AA198}.light .ct-2a82e3{color:#859900}.light .ct-8bb2e9{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Linux:Rsync file with SSH.md","_source":"content","_file":"Linux/Rsync file with SSH.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/pv8ckH0an3.json b/api/_content/query/pv8ckH0an3.json
index aa19e74..677320e 100644
--- a/api/_content/query/pv8ckH0an3.json
+++ b/api/_content/query/pv8ckH0an3.json
@@ -1 +1 @@
-{"_path":"/frontend/react-native/preserve-flatlist-scroll-position-in-react-native","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Preserve FlatList Scroll Position In React Native","description":"Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d6f3ac"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-12be29"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"; }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84cdd7"},"children":[{"type":"text","value":"SomeList"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" ({ "}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// set it to `true` before interaction and back to `false` right after"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"NativeSyntheticEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-cb4a15"},"children":[{"type":"text","value":"NativeScrollEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":">) "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"nativeEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"contentOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"y"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-85ddd9"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-84cdd7"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a8bed"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-239076"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-97ed5c"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a8bed"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-1287c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-5370b0"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"scrollToOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" offset: "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" animated: "}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// onInteraction wraps interaction to preserve scroll position"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"onInteraction"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6a2abe"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-286615"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-158371"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-4ce872"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-51c814"},"children":[{"type":"text","value":"500"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"setSelectedSubThemes"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-0a347b"},"children":[{"type":"text","value":"FlatList"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-ef8184"},"children":[{"type":"text","value":"// ...required FlatList options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-79eccc"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-fd34a7"},"children":[{"type":"text","value":"/>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b7cc7c"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-0a347b{color:#FFA657}.ct-7a8bed{color:#79C0FF}.ct-85ddd9{color:#79C0FF}.ct-79eccc{color:#C9D1D9}.ct-4ce872{color:#79C0FF}.ct-51c814{color:#79C0FF}.ct-286615{color:#79C0FF}.ct-239076{color:#FFA657}.ct-cb4a15{color:#FFA657}.ct-97ed5c{color:#FF7B72}.ct-84cdd7{color:#D2A8FF}.ct-5370b0{color:#C9D1D9}.ct-1287c4{color:#FF7B72}.ct-12be29{color:#79C0FF}.ct-6a2abe{color:#D2A8FF}.ct-fd34a7{color:#FF7B72}.ct-d6f3ac{color:#FFA657}.ct-b7cc7c{color:#C9D1D9}.ct-158371{color:#FF7B72}.ct-ef8184{color:#8B949E}.light .ct-ef8184{color:#93A1A1}.light .ct-158371{color:#073642}.light .ct-b7cc7c{color:#657B83}.light .ct-d6f3ac{color:#268BD2}.light .ct-fd34a7{color:#859900}.light .ct-6a2abe{color:#268BD2}.light .ct-12be29{color:#859900}.light .ct-1287c4{color:#073642}.light .ct-5370b0{color:#657B83}.light .ct-84cdd7{color:#268BD2}.light .ct-97ed5c{color:#859900}.light .ct-cb4a15{color:#268BD2}.light .ct-239076{color:#657B83}.light .ct-286615{color:#268BD2}.light .ct-51c814{color:#D33682}.light .ct-4ce872{color:#B58900}.light .ct-79eccc{color:#268BD2}.light .ct-85ddd9{color:#268BD2}.light .ct-7a8bed{color:#859900}.light .ct-0a347b{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React Native:Preserve FlatList scroll position in React Native.md","_source":"content","_file":"Frontend/React Native/Preserve FlatList scroll position in React Native.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/frontend/react-native/preserve-flatlist-scroll-position-in-react-native","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Preserve FlatList Scroll Position In React Native","description":"Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC = ({ interact }) => {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n // set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent) => {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) => {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n // onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () => {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() => {\n interact();\n }, 0);\n\n setTimeout(() => {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \n )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6c2b5b"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1d213f"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"; }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0527be"},"children":[{"type":"text","value":"SomeList"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" ({ "}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// set it to `true` before interaction and back to `false` right after"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"NativeSyntheticEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-f00f39"},"children":[{"type":"text","value":"NativeScrollEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":">) "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"nativeEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"contentOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"y"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-222587"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-0527be"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c0d4f3"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-3eadb3"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-46376e"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-c0d4f3"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-560b8c"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-6780b2"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"scrollToOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" offset: "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" animated: "}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// onInteraction wraps interaction to preserve scroll position"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"onInteraction"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-123153"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b2b766"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-6ff8c4"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-82e7b0"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" }, "}]},{"type":"element","tag":"span","props":{"class":"ct-7c8979"},"children":[{"type":"text","value":"500"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ["}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"setSelectedSubThemes"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-4221fb"},"children":[{"type":"text","value":"FlatList"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-70d397"},"children":[{"type":"text","value":"// ...required FlatList options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-7a2c79"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-bdcddc"},"children":[{"type":"text","value":"/>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":" )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-96a177"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-4221fb{color:#FFA657}.ct-c0d4f3{color:#79C0FF}.ct-222587{color:#79C0FF}.ct-7a2c79{color:#C9D1D9}.ct-82e7b0{color:#79C0FF}.ct-7c8979{color:#79C0FF}.ct-b2b766{color:#79C0FF}.ct-3eadb3{color:#FFA657}.ct-f00f39{color:#FFA657}.ct-46376e{color:#FF7B72}.ct-0527be{color:#D2A8FF}.ct-6780b2{color:#C9D1D9}.ct-560b8c{color:#FF7B72}.ct-1d213f{color:#79C0FF}.ct-123153{color:#D2A8FF}.ct-bdcddc{color:#FF7B72}.ct-6c2b5b{color:#FFA657}.ct-96a177{color:#C9D1D9}.ct-6ff8c4{color:#FF7B72}.ct-70d397{color:#8B949E}.light .ct-70d397{color:#93A1A1}.light .ct-6ff8c4{color:#073642}.light .ct-96a177{color:#657B83}.light .ct-6c2b5b{color:#268BD2}.light .ct-bdcddc{color:#859900}.light .ct-123153{color:#268BD2}.light .ct-1d213f{color:#859900}.light .ct-560b8c{color:#073642}.light .ct-6780b2{color:#657B83}.light .ct-0527be{color:#268BD2}.light .ct-46376e{color:#859900}.light .ct-f00f39{color:#268BD2}.light .ct-3eadb3{color:#657B83}.light .ct-b2b766{color:#268BD2}.light .ct-7c8979{color:#D33682}.light .ct-82e7b0{color:#B58900}.light .ct-7a2c79{color:#268BD2}.light .ct-222587{color:#268BD2}.light .ct-c0d4f3{color:#859900}.light .ct-4221fb{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React Native:Preserve FlatList scroll position in React Native.md","_source":"content","_file":"Frontend/React Native/Preserve FlatList scroll position in React Native.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/rNRhET0KmZ.json b/api/_content/query/rNRhET0KmZ.json
index 624a013..8b92e36 100644
--- a/api/_content/query/rNRhET0KmZ.json
+++ b/api/_content/query/rNRhET0KmZ.json
@@ -1 +1 @@
-{"_path":"/docker/github-pages-with-drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Github Pages With Drone Ci","description":"To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"node:16"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"commands"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"yarn"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"yarn generate"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"rm -rf ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"mv ./.output/public ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"touch ./docs/.nojekyll"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"publish"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"plugins/gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"target_branch"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"github_username"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-a3e2c3"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-1e1301"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-09ba81"},"children":[{"type":"text","value":"github_token"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-09ba81{color:#A5D6FF}.ct-1e1301{color:#C9D1D9}.ct-a3e2c3{color:#7EE787}.light .ct-a3e2c3{color:#268BD2}.light .ct-1e1301{color:#657B83}.light .ct-09ba81{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"additional-reading","depth":2,"text":"Additional reading"}]}},"_type":"markdown","_id":"content:Docker:Github pages with drone-ci.md","_source":"content","_file":"Docker/Github pages with drone-ci.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/docker/github-pages-with-drone-ci","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Github Pages With Drone Ci","description":"To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n"}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"To deploy github pages with "},{"type":"element","tag":"a","props":{"href":"Drone-ci"},"children":[{"type":"text","value":"Drone-ci"}]},{"type":"text","value":" you will need "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".drone.yml"}]},{"type":"text","value":" as specified below. You also should define secrets "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_username"}]},{"type":"text","value":" and "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"github_token"}]},{"type":"text","value":" (get it "},{"type":"element","tag":"a","props":{"href":"https://github.com/settings/tokens","rel":["nofollow"]},"children":[{"type":"text","value":"here"}]},{"type":"text","value":") in your drone's repository setup."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Github repository should be named as "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"yourname.github.io"}]},{"type":"text","value":" and it could be accessed at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/"}]},{"type":"text","value":". Otherwise it'll be available at "},{"type":"element","tag":"a","props":{"href":"https://yourname.github.io/repo-name/","rel":["nofollow"]},"children":[{"type":"text","value":"https://yourname.github.io/repo-name/"}]},{"type":"text","value":", what you might not like."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"You should create branch named "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" in that repo and setup GH Pages at "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"https://github.com//.github.io/settings/pages"}]},{"type":"text","value":"."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"This config will update "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"gh-pages"}]},{"type":"text","value":" branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins."}]},{"type":"element","tag":"code","props":{"code":"kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf ./docs\n - mv ./.output/public ./docs\n - touch ./docs/.nojekyll\n - name: publish\n image: plugins/gh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","language":"yaml"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"kind"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"pipeline"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"docker"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"platform"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"os"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"linux"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"arch"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"amd64"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"steps"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"build"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"node:16"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"commands"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"yarn"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"yarn generate"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"rm -rf ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"mv ./.output/public ./docs"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"touch ./docs/.nojekyll"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" - "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"name"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"publish"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"image"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"plugins/gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"settings"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"target_branch"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"gh-pages"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"username"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"github_username"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"password"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":":"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-20ff57"},"children":[{"type":"text","value":"from_secret"}]},{"type":"element","tag":"span","props":{"class":"ct-a0923d"},"children":[{"type":"text","value":": "}]},{"type":"element","tag":"span","props":{"class":"ct-b63ea4"},"children":[{"type":"text","value":"github_token"}]}]}]}]}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Here we're moving "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./.output/public"}]},{"type":"text","value":" to "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"./docs"}]},{"type":"text","value":", because #nuxt creates symlink for "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"docs"}]},{"type":"text","value":" and git can't work with that."}]},{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Also we create "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".nojekyll"}]},{"type":"text","value":" at the root of repo, so github's internal engine won't "},{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"ignore files that start with underscore"}]},{"type":"text","value":"."}]},{"type":"element","tag":"h2","props":{"id":"additional-reading"},"children":[{"type":"text","value":"Additional reading"}]},{"type":"element","tag":"ul","props":{},"children":[{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://plugins.drone.io/plugins/gh-pages","rel":["nofollow"]},"children":[{"type":"text","value":"Drone Github Pages Documentation"}]}]},{"type":"element","tag":"li","props":{},"children":[{"type":"element","tag":"a","props":{"href":"https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/","rel":["nofollow"]},"children":[{"type":"text","value":"Bypassing Jekyll on GitHub Pages"}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-b63ea4{color:#A5D6FF}.ct-a0923d{color:#C9D1D9}.ct-20ff57{color:#7EE787}.light .ct-20ff57{color:#268BD2}.light .ct-a0923d{color:#657B83}.light .ct-b63ea4{color:#2AA198}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[{"id":"additional-reading","depth":2,"text":"Additional reading"}]}},"_type":"markdown","_id":"content:Docker:Github pages with drone-ci.md","_source":"content","_file":"Docker/Github pages with drone-ci.md","_extension":"md"}
\ No newline at end of file
diff --git a/api/_content/query/v8MG1Q8wMg.json b/api/_content/query/v8MG1Q8wMg.json
index 02142d6..daab5c6 100644
--- a/api/_content/query/v8MG1Q8wMg.json
+++ b/api/_content/query/v8MG1Q8wMg.json
@@ -1 +1 @@
-{"_path":"/docker/seed-dump-inside-docker","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Seed Dump Inside Docker","description":"If you need to seed .sql dump in #docker container, just run this command. Also you can try to rsync file with SSH to get it from remote host.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bd9672"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bd9672"},"children":[{"type":"text","value":"# usage: ./script.sh \"/path/to/dump.sql\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-bd9672"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"DUMP_PATH="}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"CONTAINER="}]},{"type":"element","tag":"span","props":{"class":"ct-ab3f0c"},"children":[{"type":"text","value":"\"db\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"USER=root"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"PASSWORD=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"DB=database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":"cat "}]},{"type":"element","tag":"span","props":{"class":"ct-ab3f0c"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"DUMP_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-ab3f0c"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1fdd24"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-862a36"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" -i "}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"CONTAINER"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" mysql -u"}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" -p"}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-3ec785"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5a1c83"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-8376c3"},"children":[{"type":"text","value":"DB"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-862a36{color:#79C0FF}.ct-1fdd24{color:#FF7B72}.ct-ab3f0c{color:#A5D6FF}.ct-8376c3{color:#C9D1D9}.ct-5a1c83{color:#C9D1D9}.ct-3ec785{color:#C9D1D9}.ct-bd9672{color:#8B949E}.light .ct-bd9672{color:#93A1A1}.light .ct-3ec785{color:#657B83}.light .ct-5a1c83{color:#859900}.light .ct-8376c3{color:#268BD2}.light .ct-ab3f0c{color:#2AA198}.light .ct-1fdd24{color:#859900}.light .ct-862a36{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Seed dump inside docker.md","_source":"content","_file":"Docker/Seed dump inside docker.md","_extension":"md"}
\ No newline at end of file
+{"_path":"/docker/seed-dump-inside-docker","_dir":"docker","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Seed Dump Inside Docker","description":"If you need to seed .sql dump in #docker container, just run this command. Also you can try to rsync file with SSH to get it from remote host.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"If you need to seed "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":".sql"}]},{"type":"text","value":" dump in #docker container, just run this command. Also you can try to "},{"type":"element","tag":"a","props":{"href":"/linux/Rsync%20file%20with%20SSH"},"children":[{"type":"text","value":"rsync file with SSH"}]},{"type":"text","value":" to get it from remote host."}]},{"type":"element","tag":"code","props":{"code":"#####\n# usage: ./script.sh \"/path/to/dump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","language":"shell"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-772b12"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-772b12"},"children":[{"type":"text","value":"# usage: ./script.sh \"/path/to/dump.sql\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-772b12"},"children":[{"type":"text","value":"#####"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"DUMP_PATH="}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"1"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"CONTAINER="}]},{"type":"element","tag":"span","props":{"class":"ct-adb761"},"children":[{"type":"text","value":"\"db\""}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"USER=root"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"PASSWORD=password"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"DB=database"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":"cat "}]},{"type":"element","tag":"span","props":{"class":"ct-adb761"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"DUMP_PATH"}]},{"type":"element","tag":"span","props":{"class":"ct-adb761"},"children":[{"type":"text","value":"\""}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-d978b6"},"children":[{"type":"text","value":"|"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" docker "}]},{"type":"element","tag":"span","props":{"class":"ct-4dc312"},"children":[{"type":"text","value":"exec"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" -i "}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"CONTAINER"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" mysql -u"}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"USER"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" -p"}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"PASSWORD"}]},{"type":"element","tag":"span","props":{"class":"ct-8eeb74"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-3f3bb1"},"children":[{"type":"text","value":"$"}]},{"type":"element","tag":"span","props":{"class":"ct-38695f"},"children":[{"type":"text","value":"DB"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-4dc312{color:#79C0FF}.ct-d978b6{color:#FF7B72}.ct-adb761{color:#A5D6FF}.ct-38695f{color:#C9D1D9}.ct-3f3bb1{color:#C9D1D9}.ct-8eeb74{color:#C9D1D9}.ct-772b12{color:#8B949E}.light .ct-772b12{color:#93A1A1}.light .ct-8eeb74{color:#657B83}.light .ct-3f3bb1{color:#859900}.light .ct-38695f{color:#268BD2}.light .ct-adb761{color:#2AA198}.light .ct-d978b6{color:#859900}.light .ct-4dc312{color:#268BD2}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Docker:Seed dump inside docker.md","_source":"content","_file":"Docker/Seed dump inside docker.md","_extension":"md"}
\ No newline at end of file
diff --git a/bio/_payload.js b/bio/_payload.js
index 50e4600..257f9d4 100644
--- a/bio/_payload.js
+++ b/bio/_payload.js
@@ -1 +1 @@
-export default {data:{},prerenderedAt:1667989024705}
\ No newline at end of file
+export default {data:{},prerenderedAt:1668068038722}
\ No newline at end of file
diff --git a/bio/index.html b/bio/index.html
index dc1aed6..43d8c2e 100644
--- a/bio/index.html
+++ b/bio/index.html
@@ -1,12 +1,12 @@
-
-
Howdy!
My name is Fedor Katurov, I'm a fullstack developer from Siberia.
I develop frontend applications with React, Vue and numerous other frameworks for the most of my time, but I'm also capable of doing Typescript and Golang backend.
Skills
React
Classes and FC-s, hooks, context, redux, redux-saga, mobx
Typescript
For both frontend and backend development: generics, guards, infers
SSR (Next, Gatsby)
Automated generation, incremental, static, and dynamic rendering
Vue.js & Nuxt
Common SPA-s and SSR blogs like this one, with composition API, and Vuex
React Native
Basic developing and releasing experience without native modules
Golang
Monolith and microservice apps with REST, GraphQL, and GRPC
Docker
Docker, docker-compose, private registries, gitlab-ci, and drone-ci
HTML, CSS, SVG
Adaptive markup, all modern techniques, preprocessors, and CSS-in-JS
Linux Shell
Linux user since 2003, can write scripts to automate my work. BTW, I use Arch!
GraphQL
Both server- and client-side. Queries, mutations, cache manipulation
REST API
With Axios, fetch, express, gorilla-mux, and gin-gonic
SQL
Base queries, JOIN-s, indexes and simpl query optimizations
My name is Fedor Katurov, I'm a fullstack developer from Siberia.
I develop frontend applications with React, Vue and numerous other frameworks for the most of my time, but I'm also capable of doing Typescript and Golang backend.
Community blog with a long 13-year history, features photo, video and audio embedding.
-Beeing initially written with Drupal 5, went through refactoring to Laravel + Vue and then, nowadays works on React and Golang stack.
Local cycling community Web Maps made with React, Leaflet, and Golang.
+Beeing initially written with Drupal 5, went through refactoring to Laravel + Vue and then, nowadays works on React and Golang stack.
Local cycling community Web Maps made with React, Leaflet, and Golang.
-Implements automatic route building with OSRM and map rasterization with canvas. Used by users in local cycling communities for ride sharing.
Frontend for personal knowledge database managed by Obsidian.md software.
+Implements automatic route building with OSRM and map rasterization with canvas. Used by users in local cycling communities for ride sharing.
Frontend for personal knowledge database managed by Obsidian.md software.
-Made with nuxt3, nuxt-content plugin and some customizations. Deployed with drone-ci directly to github-pages.
// first we need to authorizeconstauthorize=async () => {awaitweb3.currentProvider.request({ method: 'eth_requestAccounts' });}// then we can get wallet addressconstgetCurrentAddressUser= () => {returnweb3.currentProvider.selectedAddress;}
// first we need to authorizeconstauthorize=async () => {awaitweb3.currentProvider.request({ method: 'eth_requestAccounts' });}// then we can get wallet addressconstgetCurrentAddressUser= () => {returnweb3.currentProvider.selectedAddress;}
Getting history for Transfer events for specific values. More info can be found here
//example options(optional)letoptions= { filter: {// only get events where transfer value was 1000 or 1337 value: ['1000', '1337'] },// number | "earliest" | "pending" | "latest" fromBlock: 0, toBlock: 'latest' };myContract.getPastEvents('Transfer', options) .thenlog(results)) .catch
Getting history for Transfer events for specific values. More info can be found here
//example options(optional)letoptions= { filter: {// only get events where transfer value was 1000 or 1337 value: ['1000', '1337'] },// number | "earliest" | "pending" | "latest" fromBlock: 0, toBlock: 'latest' };myContract.getPastEvents('Transfer', options) .thenlog(results)) .catch
\ No newline at end of file
diff --git a/css/automatic-grid-like-masonry-with-pure-css/_payload.js b/css/automatic-grid-like-masonry-with-pure-css/_payload.js
index ba2419e..0a0a218 100644
--- a/css/automatic-grid-like-masonry-with-pure-css/_payload.js
+++ b/css/automatic-grid-like-masonry-with-pure-css/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:Q,_path:R},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-yoYMujrz1O":{_path:R,_dir:"css",_draft:y,_partial:y,_locale:"en",_empty:y,title:Q,description:z,excerpt:{type:S,children:[{type:a,tag:T,props:{},children:[{type:c,value:z}]},{type:a,tag:g,props:{code:A,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:A}]}]}]},{type:a,tag:q,props:{id:B},children:[{type:c,value:C}]},{type:a,tag:g,props:{code:D,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:D}]}]}]},{type:a,tag:q,props:{id:E},children:[{type:c,value:F}]},{type:a,tag:g,props:{code:G,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:G}]}]}]},{type:a,tag:q,props:{id:H},children:[{type:c,value:I}]},{type:a,tag:g,props:{code:J,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:J}]}]}]}]},body:{type:S,children:[{type:a,tag:T,props:{},children:[{type:c,value:z}]},{type:a,tag:g,props:{code:A,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:U},children:[{type:c,value:"$cell: "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"250"}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:U},children:[{type:c,value:"$gap: "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"20"}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".grid"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"display"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"grid"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-template-columns"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:V},children:[{type:c,value:"repeat"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:"auto-fit"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:V},children:[{type:c,value:"minmax"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:"$cell"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:"ct-80bfbe"},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:"ct-3451a2"},children:[{type:c,value:"fr"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"));"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:"grid-auto-rows"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"256"}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-auto-flow"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"row"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"dense"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-column-gap"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-row-gap"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:q,props:{id:B},children:[{type:c,value:C}]},{type:a,tag:g,props:{code:D,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".h-2"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F takes 2 columns"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:"grid-column-end"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:b}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".v-2"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F takes 2 rows"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:"grid-row-end"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:b}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:q,props:{id:E},children:[{type:c,value:F}]},{type:a,tag:g,props:{code:G,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".full-width"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F height: 1 row"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:ab}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:q,props:{id:H},children:[{type:c,value:I}]},{type:a,tag:g,props:{code:J,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".top-right"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"3"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F height here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:ab}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"-2"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F width here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-d3fe3c{color:#8B949E}.ct-8f9e10{color:#79C0FF}.ct-3451a2{color:#FF7B72}.ct-80bfbe{color:#79C0FF}.ct-815e2d{color:#FFA657}.ct-621784{color:#79C0FF}.ct-3cd20c{color:#79C0FF}.ct-60b55e{color:#79C0FF}.ct-4a8b8f{color:#C9D1D9}.ct-20d114{color:#79C0FF}.ct-a9e8e9{color:#C9D1D9}.ct-ecfd74{color:#FF7B72}.ct-99ada1{color:#79C0FF}.ct-04cdd5{color:#FFA657}.light .ct-04cdd5{color:#657B83}.light .ct-99ada1{color:#D33682}.light .ct-ecfd74{color:#859900}.light .ct-a9e8e9{color:#657B83}.light .ct-20d114{color:#93A1A1}.light .ct-4a8b8f{color:#657B83}.light .ct-60b55e{color:#859900}.light .ct-3cd20c{color:#657B83}.light .ct-621784{color:#268BD2}.light .ct-815e2d{color:#657B83}.light .ct-80bfbe{color:#D33682}.light .ct-3451a2{color:#859900}.light .ct-8f9e10{color:#859900}.light .ct-d3fe3c{color:#93A1A1}"}]}],toc:{title:l,searchDepth:ae,depth:ae,links:[{id:B,depth:P,text:C},{id:E,depth:P,text:F},{id:H,depth:P,text:I}]}},_type:"markdown",_id:"content:CSS:Automatic Grid like Masonry with pure CSS.md",_source:"content",_file:"CSS\u002FAutomatic Grid like Masonry with pure CSS.md",_extension:"md"}},prerenderedAt:1667989032123}}("element","span","text","ct-a9e8e9","line","ct-4a8b8f","code","ct-99ada1",": ",";"," ","","ct-8f9e10","scss","pre"," ","h3","ct-ecfd74","ct-20d114","ct-60b55e","}","ct-d3fe3c","ct-815e2d","1",false,"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows\u002Fcolumns.","$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","basic-elements-with-double-height-or-width","Basic elements with double height or width",".h-2 { \u002F\u002F takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { \u002F\u002F takes 2 rows\n grid-row-end: span 2;\n}\n","header-that-fills-all-columns","Header, that fills all columns",".full-width {\n grid-row: 1 \u002F 2; \u002F\u002F height: 1 row\n grid-column: 1 \u002F -1;\n}\n","stamp-element-that-takes-3-rows-in-the-top-right-corner","Stamp element, that takes 3 rows in the top right corner",".top-right {\n grid-row: 1 \u002F 3; \u002F\u002F height here\n grid-column: -2 \u002F -1; \u002F\u002F width here\n}\n","px"," {","ct-3cd20c","2","; ",3,"Automatic Grid Like Masonry With Pure CSS","\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css","root","p","ct-04cdd5","ct-621784","(",", ","$gap"," { "," ","grid-row","\u002F","grid-column"," \u002F ","-1",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:Q,_path:R},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-yoYMujrz1O":{_path:R,_dir:"css",_draft:y,_partial:y,_locale:"en",_empty:y,title:Q,description:z,excerpt:{type:S,children:[{type:a,tag:T,props:{},children:[{type:c,value:z}]},{type:a,tag:g,props:{code:A,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:A}]}]}]},{type:a,tag:q,props:{id:B},children:[{type:c,value:C}]},{type:a,tag:g,props:{code:D,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:D}]}]}]},{type:a,tag:q,props:{id:E},children:[{type:c,value:F}]},{type:a,tag:g,props:{code:G,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:G}]}]}]},{type:a,tag:q,props:{id:H},children:[{type:c,value:I}]},{type:a,tag:g,props:{code:J,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:c,value:J}]}]}]}]},body:{type:S,children:[{type:a,tag:T,props:{},children:[{type:c,value:z}]},{type:a,tag:g,props:{code:A,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:U},children:[{type:c,value:"$cell: "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"250"}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:U},children:[{type:c,value:"$gap: "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"20"}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".grid"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"display"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"grid"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-template-columns"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:V},children:[{type:c,value:"repeat"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:"auto-fit"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:V},children:[{type:c,value:"minmax"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:"$cell"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:"ct-6acf01"},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:"ct-ce779c"},children:[{type:c,value:"fr"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"));"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:"grid-auto-rows"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"256"}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-auto-flow"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"row"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"dense"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-column-gap"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"grid-row-gap"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:w},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:q,props:{id:B},children:[{type:c,value:C}]},{type:a,tag:g,props:{code:D,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".h-2"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F takes 2 columns"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:"grid-column-end"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:b}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".v-2"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F takes 2 rows"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:"grid-row-end"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:b}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:q,props:{id:E},children:[{type:c,value:F}]},{type:a,tag:g,props:{code:G,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".full-width"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F height: 1 row"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:ab}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:q,props:{id:H},children:[{type:c,value:I}]},{type:a,tag:g,props:{code:J,language:n},children:[{type:a,tag:o,props:{},children:[{type:a,tag:g,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:".top-right"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"3"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F height here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:m},children:[{type:c,value:ab}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"-2"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"\u002F\u002F width here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-db38f7{color:#8B949E}.ct-d7d03c{color:#79C0FF}.ct-ce779c{color:#FF7B72}.ct-6acf01{color:#79C0FF}.ct-a907d5{color:#FFA657}.ct-3b2b55{color:#79C0FF}.ct-594f96{color:#79C0FF}.ct-d6bfa1{color:#79C0FF}.ct-9415e6{color:#C9D1D9}.ct-ca227d{color:#79C0FF}.ct-58c1dc{color:#C9D1D9}.ct-03d16f{color:#FF7B72}.ct-5591e5{color:#79C0FF}.ct-f41fce{color:#FFA657}.light .ct-f41fce{color:#657B83}.light .ct-5591e5{color:#D33682}.light .ct-03d16f{color:#859900}.light .ct-58c1dc{color:#657B83}.light .ct-ca227d{color:#93A1A1}.light .ct-9415e6{color:#657B83}.light .ct-d6bfa1{color:#859900}.light .ct-594f96{color:#657B83}.light .ct-3b2b55{color:#268BD2}.light .ct-a907d5{color:#657B83}.light .ct-6acf01{color:#D33682}.light .ct-ce779c{color:#859900}.light .ct-d7d03c{color:#859900}.light .ct-db38f7{color:#93A1A1}"}]}],toc:{title:l,searchDepth:ae,depth:ae,links:[{id:B,depth:P,text:C},{id:E,depth:P,text:F},{id:H,depth:P,text:I}]}},_type:"markdown",_id:"content:CSS:Automatic Grid like Masonry with pure CSS.md",_source:"content",_file:"CSS\u002FAutomatic Grid like Masonry with pure CSS.md",_extension:"md"}},prerenderedAt:1668068045457}}("element","span","text","ct-58c1dc","line","ct-9415e6","code","ct-5591e5",": ",";"," ","","ct-d7d03c","scss","pre"," ","h3","ct-03d16f","ct-ca227d","ct-d6bfa1","}","ct-db38f7","ct-a907d5","1",false,"Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows\u002Fcolumns.","$cell: 250px;\n$gap: 20px;\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));\n grid-auto-rows: 256px;\n grid-auto-flow: row dense;\n grid-column-gap: $gap;\n grid-row-gap: $gap;\n}\n","basic-elements-with-double-height-or-width","Basic elements with double height or width",".h-2 { \u002F\u002F takes 2 columns\n grid-column-end: span 2;\n}\n\n.v-2 { \u002F\u002F takes 2 rows\n grid-row-end: span 2;\n}\n","header-that-fills-all-columns","Header, that fills all columns",".full-width {\n grid-row: 1 \u002F 2; \u002F\u002F height: 1 row\n grid-column: 1 \u002F -1;\n}\n","stamp-element-that-takes-3-rows-in-the-top-right-corner","Stamp element, that takes 3 rows in the top right corner",".top-right {\n grid-row: 1 \u002F 3; \u002F\u002F height here\n grid-column: -2 \u002F -1; \u002F\u002F width here\n}\n","px"," {","ct-594f96","2","; ",3,"Automatic Grid Like Masonry With Pure CSS","\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css","root","p","ct-f41fce","ct-3b2b55","(",", ","$gap"," { "," ","grid-row","\u002F","grid-column"," \u002F ","-1",2))
\ No newline at end of file
diff --git a/css/automatic-grid-like-masonry-with-pure-css/index.html b/css/automatic-grid-like-masonry-with-pure-css/index.html
index 6b739bd..fa65bf9 100644
--- a/css/automatic-grid-like-masonry-with-pure-css/index.html
+++ b/css/automatic-grid-like-masonry-with-pure-css/index.html
@@ -1,6 +1,6 @@
-Automatic Grid Like Masonry With Pure CSS • Obsidian Garden
-
Automatic Grid Like Masonry With Pure CSS
Grid, that places items by density. Pure #css solution. Can be used with items, that take different amount of rows/columns.
\ No newline at end of file
diff --git a/css/sass-nth-child-iterate-mixin/_payload.js b/css/sass-nth-child-iterate-mixin/_payload.js
index 9cf4764..d001cdb 100644
--- a/css/sass-nth-child-iterate-mixin/_payload.js
+++ b/css/sass-nth-child-iterate-mixin/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:t,_path:u},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-ex7u9maCrE":{_path:u,_dir:"css",_draft:p,_partial:p,_locale:"en",_empty:p,title:t,description:"Say, we need to color n items by specific colors, which depend on its position. #SCSS supports iteration over lists for that purposes:",excerpt:{type:v,children:[{type:a,tag:l,props:{},children:[{type:b,value:w},{type:a,tag:x,props:{},children:[{type:b,value:y}]},{type:b,value:z},{type:a,tag:A,props:{href:B,rel:[C]},children:[{type:b,value:D}]},{type:b,value:E}]},{type:a,tag:g,props:{code:q,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:b,value:q}]}]}]},{type:a,tag:l,props:{},children:[{type:b,value:F}]},{type:a,tag:g,props:{code:r,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:b,value:r}]}]}]}]},body:{type:v,children:[{type:a,tag:l,props:{},children:[{type:b,value:w},{type:a,tag:x,props:{},children:[{type:b,value:y}]},{type:b,value:z},{type:a,tag:A,props:{href:B,rel:[C]},children:[{type:b,value:D}]},{type:b,value:E}]},{type:a,tag:g,props:{code:q,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:s},children:[{type:b,value:"@mixin"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:"ct-85c0d9"},children:[{type:b,value:"color-per-child"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:G}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:H}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"@each"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:K}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"in"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:H}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:L}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:"ct-ad16d4"},children:[{type:b,value:"&"}]},{type:a,tag:c,props:{class:"ct-ff2dca"},children:[{type:b,value:":nth-child"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:G}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"#{"}]},{type:a,tag:c,props:{class:"ct-0590fc"},children:[{type:b,value:"index"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"(($colors), ($color))}"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:"ct-5f6e85"},children:[{type:b,value:"color"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:": "}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:K}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:";"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:M}]}]}]}]}]},{type:a,tag:l,props:{},children:[{type:b,value:F}]},{type:a,tag:g,props:{code:r,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:"ct-9f574b"},children:[{type:b,value:".item"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:L}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:"ct-f005ac"},children:[{type:b,value:"@include"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:"ct-3e505e"},children:[{type:b,value:"color_per_child"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:"(("}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#ded187"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#dbde87"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#bade87"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#9cde87"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#87deaa"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:"));"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:M}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-b03ccc{color:#79C0FF}.ct-3e505e{color:#D2A8FF}.ct-f005ac{color:#FF7B72}.ct-9f574b{color:#79C0FF}.ct-59c4a2{color:#C9D1D9}.ct-5f6e85{color:#79C0FF}.ct-0590fc{color:#79C0FF}.ct-ff2dca{color:#79C0FF}.ct-ad16d4{color:#7EE787}.ct-2270c7{color:#FFA657}.ct-85c0d9{color:#D2A8FF}.ct-4a01b1{color:#C9D1D9}.ct-78d561{color:#FF7B72}.light .ct-78d561{color:#859900}.light .ct-4a01b1{color:#657B83}.light .ct-85c0d9{color:#268BD2}.light .ct-2270c7{color:#657B83}.light .ct-ad16d4{color:#268BD2}.light .ct-ff2dca{color:#93A1A1}.light .ct-0590fc{color:#268BD2}.light .ct-5f6e85{color:#859900}.light .ct-59c4a2{color:#657B83}.light .ct-9f574b{color:#93A1A1}.light .ct-f005ac{color:#859900}.light .ct-3e505e{color:#268BD2}.light .ct-b03ccc{color:#CB4B16}"}]}],toc:{title:i,searchDepth:N,depth:N,links:[]}},_type:"markdown",_id:"content:CSS:Sass nth-child iterate mixin.md",_source:"content",_file:"CSS\u002FSass nth-child iterate mixin.md",_extension:"md"}},prerenderedAt:1667989032175}}("element","text","span","ct-4a01b1","ct-59c4a2","line","code","ct-2270c7",""," ","ct-b03ccc","p","scss","pre",", ",false,"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n",".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","ct-78d561","Sass Nth Child Iterate Mixin","\u002Fcss\u002Fsass-nth-child-iterate-mixin","root","Say, we need to color ","code-inline","n"," items by specific colors, which depend on its position. #SCSS supports ","a","https:\u002F\u002Fsass-lang.com\u002Fdocumentation\u002Fat-rules\u002Fcontrol\u002Feach","nofollow","iteration over lists"," for that purposes:","Usage is simple:","(","$colors",") {"," ","$color"," {","}",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:t,_path:u},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-ex7u9maCrE":{_path:u,_dir:"css",_draft:p,_partial:p,_locale:"en",_empty:p,title:t,description:"Say, we need to color n items by specific colors, which depend on its position. #SCSS supports iteration over lists for that purposes:",excerpt:{type:v,children:[{type:a,tag:l,props:{},children:[{type:b,value:w},{type:a,tag:x,props:{},children:[{type:b,value:y}]},{type:b,value:z},{type:a,tag:A,props:{href:B,rel:[C]},children:[{type:b,value:D}]},{type:b,value:E}]},{type:a,tag:g,props:{code:q,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:b,value:q}]}]}]},{type:a,tag:l,props:{},children:[{type:b,value:F}]},{type:a,tag:g,props:{code:r,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:b,value:r}]}]}]}]},body:{type:v,children:[{type:a,tag:l,props:{},children:[{type:b,value:w},{type:a,tag:x,props:{},children:[{type:b,value:y}]},{type:b,value:z},{type:a,tag:A,props:{href:B,rel:[C]},children:[{type:b,value:D}]},{type:b,value:E}]},{type:a,tag:g,props:{code:q,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:s},children:[{type:b,value:"@mixin"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:"ct-1d670a"},children:[{type:b,value:"color-per-child"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:G}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:H}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"@each"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:K}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"in"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:H}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:L}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:"ct-a71f0f"},children:[{type:b,value:"&"}]},{type:a,tag:c,props:{class:"ct-aa41da"},children:[{type:b,value:":nth-child"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:G}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"#{"}]},{type:a,tag:c,props:{class:"ct-c4485f"},children:[{type:b,value:"index"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"(($colors), ($color))}"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:"ct-c18acb"},children:[{type:b,value:"color"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:": "}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:K}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:";"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:M}]}]}]}]}]},{type:a,tag:l,props:{},children:[{type:b,value:F}]},{type:a,tag:g,props:{code:r,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:g,props:{__ignoreMap:i},children:[{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:"ct-ab6de3"},children:[{type:b,value:".item"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:L}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:"ct-26dd38"},children:[{type:b,value:"@include"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:"ct-21f33b"},children:[{type:b,value:"color_per_child"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:"(("}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#ded187"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#dbde87"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#bade87"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#9cde87"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:k},children:[{type:b,value:"#87deaa"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:"));"}]}]},{type:a,tag:c,props:{class:f},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:M}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-c0c245{color:#79C0FF}.ct-21f33b{color:#D2A8FF}.ct-26dd38{color:#FF7B72}.ct-ab6de3{color:#79C0FF}.ct-d60e7d{color:#C9D1D9}.ct-c18acb{color:#79C0FF}.ct-c4485f{color:#79C0FF}.ct-aa41da{color:#79C0FF}.ct-a71f0f{color:#7EE787}.ct-259557{color:#FFA657}.ct-1d670a{color:#D2A8FF}.ct-e6daf7{color:#C9D1D9}.ct-b277f3{color:#FF7B72}.light .ct-b277f3{color:#859900}.light .ct-e6daf7{color:#657B83}.light .ct-1d670a{color:#268BD2}.light .ct-259557{color:#657B83}.light .ct-a71f0f{color:#268BD2}.light .ct-aa41da{color:#93A1A1}.light .ct-c4485f{color:#268BD2}.light .ct-c18acb{color:#859900}.light .ct-d60e7d{color:#657B83}.light .ct-ab6de3{color:#93A1A1}.light .ct-26dd38{color:#859900}.light .ct-21f33b{color:#268BD2}.light .ct-c0c245{color:#CB4B16}"}]}],toc:{title:i,searchDepth:N,depth:N,links:[]}},_type:"markdown",_id:"content:CSS:Sass nth-child iterate mixin.md",_source:"content",_file:"CSS\u002FSass nth-child iterate mixin.md",_extension:"md"}},prerenderedAt:1668068045513}}("element","text","span","ct-e6daf7","ct-d60e7d","line","code","ct-259557",""," ","ct-c0c245","p","scss","pre",", ",false,"@mixin color-per-child($colors) {\n @each $color in $colors {\n &:nth-child(#{index(($colors), ($color))}) {\n color: $color;\n }\n }\n}\n",".item {\n @include color_per_child((#ded187, #dbde87, #bade87, #9cde87, #87deaa));\n}\n","ct-b277f3","Sass Nth Child Iterate Mixin","\u002Fcss\u002Fsass-nth-child-iterate-mixin","root","Say, we need to color ","code-inline","n"," items by specific colors, which depend on its position. #SCSS supports ","a","https:\u002F\u002Fsass-lang.com\u002Fdocumentation\u002Fat-rules\u002Fcontrol\u002Feach","nofollow","iteration over lists"," for that purposes:","Usage is simple:","(","$colors",") {"," ","$color"," {","}",2))
\ No newline at end of file
diff --git a/css/sass-nth-child-iterate-mixin/index.html b/css/sass-nth-child-iterate-mixin/index.html
index 882ae07..882ed4d 100644
--- a/css/sass-nth-child-iterate-mixin/index.html
+++ b/css/sass-nth-child-iterate-mixin/index.html
@@ -1,6 +1,6 @@
-Sass Nth Child Iterate Mixin • Obsidian Garden
-
Sass Nth Child Iterate Mixin
Say, we need to color n items by specific colors, which depend on its position. #SCSS supports iteration over lists for that purposes:
\ No newline at end of file
diff --git a/css/test-if-browser-supports-css-rules/_payload.js b/css/test-if-browser-supports-css-rules/_payload.js
index fa09673..3cbc9da 100644
--- a/css/test-if-browser-supports-css-rules/_payload.js
+++ b/css/test-if-browser-supports-css-rules/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:x,_path:y}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-OwjCJk80Rt":{_path:y,_dir:l,_draft:m,_partial:m,_locale:"en",_empty:m,title:x,description:n,excerpt:{type:z,children:[{type:a,tag:j,props:{},children:[{type:b,value:n}]},{type:a,tag:f,props:{code:o,language:l},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:b,value:o}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:A},{type:a,tag:B,props:{},children:[{type:b,value:p}]},{type:b,value:C}]},{type:a,tag:f,props:{code:q,language:D},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:b,value:q}]}]}]}]},body:{type:z,children:[{type:a,tag:j,props:{},children:[{type:b,value:n}]},{type:a,tag:f,props:{code:o,language:l},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:G},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:H},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:u}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:")) {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:"ct-8efaba"},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:": blur(5px);"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:K}]}]}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:A},{type:a,tag:B,props:{},children:[{type:b,value:p}]},{type:b,value:C}]},{type:a,tag:f,props:{code:q,language:D},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:"ct-46d403"},children:[{type:b,value:"can_backdrop"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:i},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:"ct-347d2b"},children:[{type:b,value:"-webkit-backdrop-filter"}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:"ct-6b2723"},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:u}]},{type:a,tag:c,props:{class:"ct-f79b21"},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:"ct-73c01d"},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:")) "}]},{type:a,tag:c,props:{class:"ct-625845"},children:[{type:b,value:"or"}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:L}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:G},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:H},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:u}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"))"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" ) {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"@content"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:";"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:K}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-625845{color:#79C0FF}.ct-73c01d{color:#FF7B72}.ct-f79b21{color:#79C0FF}.ct-6b2723{color:#79C0FF}.ct-347d2b{color:#79C0FF}.ct-d590c2{color:#C9D1D9}.ct-46d403{color:#D2A8FF}.ct-8efaba{color:#7EE787}.ct-1c9a55{color:#79C0FF}.ct-df79b9{color:#79C0FF}.ct-747a85{color:#79C0FF}.ct-00ce74{color:#C9D1D9}.ct-ca30ca{color:#FF7B72}.light .ct-ca30ca{color:#859900}.light .ct-00ce74{color:#657B83}.light .ct-747a85{color:#859900}.light .ct-df79b9{color:#268BD2}.light .ct-1c9a55{color:#D33682}.light .ct-8efaba{color:#268BD2}.light .ct-46d403{color:#268BD2}.light .ct-d590c2{color:#657B83}.light .ct-347d2b{color:#859900}.light .ct-6b2723{color:#268BD2}.light .ct-f79b21{color:#D33682}.light .ct-73c01d{color:#859900}.light .ct-625845{color:#657B83}"}]}],toc:{title:h,searchDepth:N,depth:N,links:[]}},_type:"markdown",_id:"content:CSS:Test if browser supports CSS rules.md",_source:"content",_file:"CSS\u002FTest if browser supports CSS rules.md",_extension:"md"}},prerenderedAt:1667989032213}}("element","text","span","ct-00ce74","line","code","ct-ca30ca","","ct-d590c2","p","pre","css",false,"To test if browser supports some #CSS rules, do following:","@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","@mixin","@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","backdrop-filter",": ","blur","(","5","px","Test If Browser Supports CSS Rules","\u002Fcss\u002Ftest-if-browser-supports-css-rules","root","This ","code-inline"," will only apply rule if browser support backdrop filtering:","scss","@supports"," (","ct-747a85","ct-df79b9","ct-1c9a55"," ","}"," "," (",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:x,_path:y}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-OwjCJk80Rt":{_path:y,_dir:l,_draft:m,_partial:m,_locale:"en",_empty:m,title:x,description:n,excerpt:{type:z,children:[{type:a,tag:j,props:{},children:[{type:b,value:n}]},{type:a,tag:f,props:{code:o,language:l},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:b,value:o}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:A},{type:a,tag:B,props:{},children:[{type:b,value:p}]},{type:b,value:C}]},{type:a,tag:f,props:{code:q,language:D},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:b,value:q}]}]}]}]},body:{type:z,children:[{type:a,tag:j,props:{},children:[{type:b,value:n}]},{type:a,tag:f,props:{code:o,language:l},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:G},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:H},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:u}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:")) {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:"ct-e77c6d"},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:": blur(5px);"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:K}]}]}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:A},{type:a,tag:B,props:{},children:[{type:b,value:p}]},{type:b,value:C}]},{type:a,tag:f,props:{code:q,language:D},children:[{type:a,tag:k,props:{},children:[{type:a,tag:f,props:{__ignoreMap:h},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:"ct-edb52b"},children:[{type:b,value:"can_backdrop"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:i},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:"ct-68bf07"},children:[{type:b,value:"-webkit-backdrop-filter"}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:"ct-2278fa"},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:u}]},{type:a,tag:c,props:{class:"ct-8879a9"},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:"ct-39b93b"},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:")) "}]},{type:a,tag:c,props:{class:"ct-fbde32"},children:[{type:b,value:"or"}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:L}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:G},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:H},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:u}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"))"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" ) {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"@content"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:";"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:K}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-fbde32{color:#79C0FF}.ct-39b93b{color:#FF7B72}.ct-8879a9{color:#79C0FF}.ct-2278fa{color:#79C0FF}.ct-68bf07{color:#79C0FF}.ct-6cd1fc{color:#C9D1D9}.ct-edb52b{color:#D2A8FF}.ct-e77c6d{color:#7EE787}.ct-efed79{color:#79C0FF}.ct-82f423{color:#79C0FF}.ct-8e03c3{color:#79C0FF}.ct-b91a4c{color:#C9D1D9}.ct-dbcf68{color:#FF7B72}.light .ct-dbcf68{color:#859900}.light .ct-b91a4c{color:#657B83}.light .ct-8e03c3{color:#859900}.light .ct-82f423{color:#268BD2}.light .ct-efed79{color:#D33682}.light .ct-e77c6d{color:#268BD2}.light .ct-edb52b{color:#268BD2}.light .ct-6cd1fc{color:#657B83}.light .ct-68bf07{color:#859900}.light .ct-2278fa{color:#268BD2}.light .ct-8879a9{color:#D33682}.light .ct-39b93b{color:#859900}.light .ct-fbde32{color:#657B83}"}]}],toc:{title:h,searchDepth:N,depth:N,links:[]}},_type:"markdown",_id:"content:CSS:Test if browser supports CSS rules.md",_source:"content",_file:"CSS\u002FTest if browser supports CSS rules.md",_extension:"md"}},prerenderedAt:1668068045552}}("element","text","span","ct-b91a4c","line","code","ct-dbcf68","","ct-6cd1fc","p","pre","css",false,"To test if browser supports some #CSS rules, do following:","@supports (backdrop-filter: blur(5px)) {\n backdrop-filter: blur(5px);\n}\n","@mixin","@mixin can_backdrop {\n @supports (\n (-webkit-backdrop-filter: blur(5px)) or \n (backdrop-filter: blur(5px))\n ) {\n @content;\n }\n}\n","backdrop-filter",": ","blur","(","5","px","Test If Browser Supports CSS Rules","\u002Fcss\u002Ftest-if-browser-supports-css-rules","root","This ","code-inline"," will only apply rule if browser support backdrop filtering:","scss","@supports"," (","ct-8e03c3","ct-82f423","ct-efed79"," ","}"," "," (",2))
\ No newline at end of file
diff --git a/css/test-if-browser-supports-css-rules/index.html b/css/test-if-browser-supports-css-rules/index.html
index e4f7a5a..f80662c 100644
--- a/css/test-if-browser-supports-css-rules/index.html
+++ b/css/test-if-browser-supports-css-rules/index.html
@@ -1,6 +1,6 @@
-Test If Browser Supports CSS Rules • Obsidian Garden
-
Test If Browser Supports CSS Rules
To test if browser supports some #CSS rules, do following:
\ No newline at end of file
diff --git a/docker/building-static-pages-with-docker/_payload.js b/docker/building-static-pages-with-docker/_payload.js
index 12ef38a..cef82f8 100644
--- a/docker/building-static-pages-with-docker/_payload.js
+++ b/docker/building-static-pages-with-docker/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:h,_path:i},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-QKxL2z8jga":{_path:i,_dir:"docker",_draft:d,_partial:d,_locale:"en",_empty:d,title:h,description:e,excerpt:{type:j,children:[{type:a,tag:k,props:{},children:[{type:b,value:e}]},{type:a,tag:c,props:{code:f,language:l},children:[{type:a,tag:m,props:{},children:[{type:a,tag:c,props:{__ignoreMap:g},children:[{type:b,value:f}]}]}]}]},body:{type:j,children:[{type:a,tag:k,props:{},children:[{type:b,value:e}]},{type:a,tag:c,props:{code:f,language:l},children:[{type:a,tag:m,props:{},children:[{type:a,tag:c,props:{__ignoreMap:g},children:[{type:a,tag:n,props:{class:"line"},children:[{type:a,tag:n,props:{},children:[{type:b,value:"FROM node:16-alpine as builder\nWORKDIR \u002Fapp\nCOPY package.json yarn.lock .\u002F\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder \u002Fapp\u002Fdist \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml"}]}]}]}]}]}],toc:{title:g,searchDepth:o,depth:o,links:[]}},_type:"markdown",_id:"content:Docker:Building static pages with Docker.md",_source:"content",_file:"Docker\u002FBuilding static pages with Docker.md",_extension:"md"}},prerenderedAt:1667989032277}}("element","text","code",false,"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:","FROM node:16-alpine as builder\nWORKDIR \u002Fapp\nCOPY package.json yarn.lock .\u002F\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder \u002Fapp\u002Fdist \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\n","","Building Static Pages With Docker","\u002Fdocker\u002Fbuilding-static-pages-with-docker","root","p","Dockerfile","pre","span",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:h,_path:i},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-QKxL2z8jga":{_path:i,_dir:"docker",_draft:d,_partial:d,_locale:"en",_empty:d,title:h,description:e,excerpt:{type:j,children:[{type:a,tag:k,props:{},children:[{type:b,value:e}]},{type:a,tag:c,props:{code:f,language:l},children:[{type:a,tag:m,props:{},children:[{type:a,tag:c,props:{__ignoreMap:g},children:[{type:b,value:f}]}]}]}]},body:{type:j,children:[{type:a,tag:k,props:{},children:[{type:b,value:e}]},{type:a,tag:c,props:{code:f,language:l},children:[{type:a,tag:m,props:{},children:[{type:a,tag:c,props:{__ignoreMap:g},children:[{type:a,tag:n,props:{class:"line"},children:[{type:a,tag:n,props:{},children:[{type:b,value:"FROM node:16-alpine as builder\nWORKDIR \u002Fapp\nCOPY package.json yarn.lock .\u002F\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder \u002Fapp\u002Fdist \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml"}]}]}]}]}]}],toc:{title:g,searchDepth:o,depth:o,links:[]}},_type:"markdown",_id:"content:Docker:Building static pages with Docker.md",_source:"content",_file:"Docker\u002FBuilding static pages with Docker.md",_extension:"md"}},prerenderedAt:1668068045596}}("element","text","code",false,"Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:","FROM node:16-alpine as builder\nWORKDIR \u002Fapp\nCOPY package.json yarn.lock .\u002F\nRUN yarn\nCOPY . .\n\n# your generate command here\nRUN yarn generate\n\nFROM nginx\nCOPY --from=builder \u002Fapp\u002Fdist \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\n","","Building Static Pages With Docker","\u002Fdocker\u002Fbuilding-static-pages-with-docker","root","p","Dockerfile","pre","span",2))
\ No newline at end of file
diff --git a/docker/building-static-pages-with-docker/index.html b/docker/building-static-pages-with-docker/index.html
index 55a6427..bce8ef2 100644
--- a/docker/building-static-pages-with-docker/index.html
+++ b/docker/building-static-pages-with-docker/index.html
@@ -1,8 +1,8 @@
-Building Static Pages With Docker • Obsidian Garden
-
Building Static Pages With Docker
Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:
FROM node:16-alpine as builder
+
Building Static Pages With Docker
Sample #Dockerfile for static Typescript builds such a #nextjs, #gatsby or #nuxt:
FROM node:16-alpine as builder
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn
@@ -12,5 +12,5 @@ COPY . .
RUN yarn generate
FROM nginx
-COPY --from=builder /app/dist /usr/share/nginx/html
\ No newline at end of file
diff --git a/docker/drone-ci/_payload.js b/docker/drone-ci/_payload.js
index 8fcc73a..d654810 100644
--- a/docker/drone-ci/_payload.js
+++ b/docker/drone-ci/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:_,_path:$},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-uFdiCIitkN":{_path:$,_dir:aa,_draft:F,_partial:F,_locale:"en",_empty:F,title:_,description:"Can be used with Private docker registry to deploy things using #docker.",excerpt:{type:ab,children:[{type:a,tag:n,props:{},children:[{type:b,value:ac},{type:a,tag:q,props:{href:w},children:[{type:b,value:ad}]},{type:b,value:ae}]},{type:a,tag:o,props:{id:G},children:[{type:b,value:H}]},{type:a,tag:n,props:{},children:[{type:b,value:af},{type:a,tag:h,props:{},children:[{type:b,value:I}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:J}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:K}]},{type:b,value:ag},{type:a,tag:ah,props:{},children:[{type:b,value:v}]},{type:b,value:ai},{type:a,tag:h,props:{},children:[{type:b,value:L}]},{type:b,value:aj},{type:a,tag:h,props:{},children:[{type:b,value:ak}]},{type:b,value:x}]},{type:a,tag:n,props:{},children:[{type:b,value:al},{type:a,tag:h,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:q,props:{href:w},children:[{type:b,value:ao}]},{type:b,value:i}]},{type:a,tag:k,props:{code:M,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:M}]}]}]},{type:a,tag:o,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:n,props:{},children:[{type:b,value:ap},{type:a,tag:h,props:{},children:[{type:b,value:v}]},{type:b,value:aq},{type:a,tag:h,props:{},children:[{type:b,value:P}]},{type:b,value:ar}]},{type:a,tag:n,props:{},children:[{type:b,value:as},{type:a,tag:h,props:{},children:[{type:b,value:at}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:au}]},{type:b,value:av},{type:a,tag:h,props:{},children:[{type:b,value:aw}]},{type:b,value:ax}]},{type:a,tag:k,props:{code:Q,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:Q}]}]}]},{type:a,tag:o,props:{id:R},children:[{type:b,value:S}]},{type:a,tag:n,props:{},children:[{type:b,value:ay},{type:a,tag:q,props:{href:az,rel:[z]},children:[{type:b,value:aA}]},{type:b,value:aB},{type:a,tag:q,props:{href:aC,rel:[z]},children:[{type:b,value:aD}]},{type:b,value:aE}]},{type:a,tag:o,props:{id:T},children:[{type:b,value:U}]},{type:a,tag:k,props:{code:V,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:V}]}]}]},{type:a,tag:o,props:{id:W},children:[{type:b,value:X}]},{type:a,tag:n,props:{},children:[{type:b,value:aF},{type:a,tag:h,props:{},children:[{type:b,value:B}]},{type:b,value:x}]},{type:a,tag:k,props:{code:Y,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:Y}]}]}]}]},body:{type:ab,children:[{type:a,tag:n,props:{},children:[{type:b,value:ac},{type:a,tag:q,props:{href:w},children:[{type:b,value:ad}]},{type:b,value:ae}]},{type:a,tag:o,props:{id:G},children:[{type:b,value:H}]},{type:a,tag:n,props:{},children:[{type:b,value:af},{type:a,tag:h,props:{},children:[{type:b,value:I}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:J}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:K}]},{type:b,value:ag},{type:a,tag:ah,props:{},children:[{type:b,value:v}]},{type:b,value:ai},{type:a,tag:h,props:{},children:[{type:b,value:L}]},{type:b,value:aj},{type:a,tag:h,props:{},children:[{type:b,value:ak}]},{type:b,value:x}]},{type:a,tag:n,props:{},children:[{type:b,value:al},{type:a,tag:h,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:q,props:{href:w},children:[{type:b,value:ao}]},{type:b,value:i}]},{type:a,tag:k,props:{code:M,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"kind"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"pipeline"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:aG}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"build"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"type"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aa}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"platform"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"os"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"linux"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"arch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"amd64"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"steps"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" - "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aG}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"build-master"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:Z}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"plugins\u002Fdocker"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"when"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"branch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aH}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"master"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"settings"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"dockerfile"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"Dockerfile"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"tag"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aH}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"${DRONE_BRANCH}"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"username"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:I}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"password"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"registry"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:K}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"repo"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:L}]}]}]}]}]},{type:a,tag:o,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:n,props:{},children:[{type:b,value:ap},{type:a,tag:h,props:{},children:[{type:b,value:v}]},{type:b,value:aq},{type:a,tag:h,props:{},children:[{type:b,value:P}]},{type:b,value:ar}]},{type:a,tag:n,props:{},children:[{type:b,value:as},{type:a,tag:h,props:{},children:[{type:b,value:at}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:au}]},{type:b,value:av},{type:a,tag:h,props:{},children:[{type:b,value:aw}]},{type:b,value:ax}]},{type:a,tag:k,props:{code:Q,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"version"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\"3\""}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"services"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aI}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:v}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:Z}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"drone\u002Fdrone:latest"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aJ}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_GITHUB_CLIENT_ID=secret_id"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_GITHUB_CLIENT_SECRET=client_secret"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aK}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_SERVER_HOST=drone.url"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_USER_CREATE=\"username:user,admin:true\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_SERVER_PROTO=https"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_TLS_AUTOCERT=false"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_GIT_ALWAYS_AUTH=false"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_LOGS_DEBUG=true"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_LOGS_TRACE=true"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aL}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aM}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aN}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:".\u002Fdata:\u002Fdata"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"ports"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"8090:80"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aI}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"drone__agent"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:Z}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"drone\u002Fagent:latest"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"command"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"agent"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aL}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aM}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aN}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aJ}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_RPC_SERVER=https:\u002F\u002Fdrone.url"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aK}]}]}]}]}]},{type:a,tag:o,props:{id:R},children:[{type:b,value:S}]},{type:a,tag:n,props:{},children:[{type:b,value:ay},{type:a,tag:q,props:{href:az,rel:[z]},children:[{type:b,value:aA}]},{type:b,value:aB},{type:a,tag:q,props:{href:aC,rel:[z]},children:[{type:b,value:aD}]},{type:b,value:aE}]},{type:a,tag:o,props:{id:T},children:[{type:b,value:U}]},{type:a,tag:k,props:{code:V,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:aO},children:[{type:b,value:aP}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" DRONE_SERVER=https:\u002F\u002Fdrone.url"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:aO},children:[{type:b,value:aP}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" DRONE_TOKEN=password"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"drone info"}]}]}]}]}]},{type:a,tag:o,props:{id:W},children:[{type:b,value:X}]},{type:a,tag:n,props:{},children:[{type:b,value:aF},{type:a,tag:h,props:{},children:[{type:b,value:B}]},{type:b,value:x}]},{type:a,tag:k,props:{code:Y,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"drone repo update "}]},{type:a,tag:c,props:{class:aQ},children:[{type:b,value:aR}]},{type:a,tag:c,props:{class:aS},children:[{type:b,value:B}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" --trusted=true "}]},{type:a,tag:c,props:{class:"ct-bd5f5f"},children:[{type:b,value:"&&"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" drone repo info "}]},{type:a,tag:c,props:{class:aQ},children:[{type:b,value:aR}]},{type:a,tag:c,props:{class:aS},children:[{type:b,value:B}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-bd5f5f{color:#FF7B72}.ct-444ee1{color:#C9D1D9}.ct-284309{color:#C9D1D9}.ct-99ea24{color:#FF7B72}.ct-7193cf{color:#A5D6FF}.ct-da43a2{color:#C9D1D9}.ct-fb65a1{color:#7EE787}.light .ct-fb65a1{color:#268BD2}.light .ct-da43a2{color:#657B83}.light .ct-7193cf{color:#2AA198}.light .ct-99ea24{color:#073642}.light .ct-284309{color:#859900}.light .ct-444ee1{color:#268BD2}.light .ct-bd5f5f{color:#859900}"}]}],toc:{title:p,searchDepth:t,depth:t,links:[{id:G,depth:t,text:H},{id:N,depth:t,text:O},{id:R,depth:t,text:S},{id:T,depth:t,text:U},{id:W,depth:t,text:X}]}},_type:"markdown",_id:"content:Docker:Drone-ci.md",_source:"content",_file:"Docker\u002FDrone-ci.md",_extension:"md"}},prerenderedAt:1667989032339}}("element","text","span","ct-da43a2","line","ct-fb65a1","ct-7193cf","code-inline",":",": ","code"," "," - ","p","h2","","a","pre"," ",2,", ","drone","Private%20docker%20registry",".","yaml","nofollow","shell","1"," "," ","from_secret",false,"pushing-to-private-docker_registry","Pushing to private docker_registry","global_docker_login","global_docker_password","global_docker_registry","docker_repo","kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins\u002Fdocker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","docker-compose-file-for-drone-ci","Docker-compose file for drone-ci","drone-agent","version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone\u002Fdrone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - .\u002Fdata:\u002Fdata\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone\u002Fagent:latest\n command: agent\n restart: always\n volumes:\n - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n environment:\n - DRONE_RPC_SERVER=https:\u002F\u002Fdrone.url\n - DRONE_RPC_SECRET=rpc_secret\n","caching-builds","Caching builds","get-user-info","Get user info","export DRONE_SERVER=https:\u002F\u002Fdrone.url\nexport DRONE_TOKEN=password\ndrone info\n","mark-user-as-trusted","Mark user as trusted","drone repo update $1 --trusted=true && drone repo info $1\n","image","Drone Ci","\u002Fdocker\u002Fdrone-ci","docker","root","Can be used with ","Private docker registry"," to deploy things using #docker.","You should specify "," organizations variables in your ","strong",". And "," variable for your repo as ","docker.yourdomain.com\u002Fyour-image","This is example of ",".droneci"," for ","private docker registry","The "," service is ui itself and "," is runner for builds, that can be started on different machine (or machines).","Change ","secret_id","rpc_secret"," and ","drone.url"," to something you like.","Haven't checked that yet, but there's a ","https:\u002F\u002Flaszlo.cloud\u002Fthe-ultimate-droneci-caching-guide","manual"," from ","https:\u002F\u002Flaszlo.cloud\u002F","Laszlo Fogas"," about that.","Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to ","name"," - ","container_name","environment","DRONE_RPC_SECRET=rpc_secret","restart","always","volumes","ct-99ea24","export","ct-284309","$","ct-444ee1"))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:_,_path:$},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-uFdiCIitkN":{_path:$,_dir:aa,_draft:F,_partial:F,_locale:"en",_empty:F,title:_,description:"Can be used with Private docker registry to deploy things using #docker.",excerpt:{type:ab,children:[{type:a,tag:n,props:{},children:[{type:b,value:ac},{type:a,tag:q,props:{href:w},children:[{type:b,value:ad}]},{type:b,value:ae}]},{type:a,tag:o,props:{id:G},children:[{type:b,value:H}]},{type:a,tag:n,props:{},children:[{type:b,value:af},{type:a,tag:h,props:{},children:[{type:b,value:I}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:J}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:K}]},{type:b,value:ag},{type:a,tag:ah,props:{},children:[{type:b,value:v}]},{type:b,value:ai},{type:a,tag:h,props:{},children:[{type:b,value:L}]},{type:b,value:aj},{type:a,tag:h,props:{},children:[{type:b,value:ak}]},{type:b,value:x}]},{type:a,tag:n,props:{},children:[{type:b,value:al},{type:a,tag:h,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:q,props:{href:w},children:[{type:b,value:ao}]},{type:b,value:i}]},{type:a,tag:k,props:{code:M,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:M}]}]}]},{type:a,tag:o,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:n,props:{},children:[{type:b,value:ap},{type:a,tag:h,props:{},children:[{type:b,value:v}]},{type:b,value:aq},{type:a,tag:h,props:{},children:[{type:b,value:P}]},{type:b,value:ar}]},{type:a,tag:n,props:{},children:[{type:b,value:as},{type:a,tag:h,props:{},children:[{type:b,value:at}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:au}]},{type:b,value:av},{type:a,tag:h,props:{},children:[{type:b,value:aw}]},{type:b,value:ax}]},{type:a,tag:k,props:{code:Q,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:Q}]}]}]},{type:a,tag:o,props:{id:R},children:[{type:b,value:S}]},{type:a,tag:n,props:{},children:[{type:b,value:ay},{type:a,tag:q,props:{href:az,rel:[z]},children:[{type:b,value:aA}]},{type:b,value:aB},{type:a,tag:q,props:{href:aC,rel:[z]},children:[{type:b,value:aD}]},{type:b,value:aE}]},{type:a,tag:o,props:{id:T},children:[{type:b,value:U}]},{type:a,tag:k,props:{code:V,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:V}]}]}]},{type:a,tag:o,props:{id:W},children:[{type:b,value:X}]},{type:a,tag:n,props:{},children:[{type:b,value:aF},{type:a,tag:h,props:{},children:[{type:b,value:B}]},{type:b,value:x}]},{type:a,tag:k,props:{code:Y,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:b,value:Y}]}]}]}]},body:{type:ab,children:[{type:a,tag:n,props:{},children:[{type:b,value:ac},{type:a,tag:q,props:{href:w},children:[{type:b,value:ad}]},{type:b,value:ae}]},{type:a,tag:o,props:{id:G},children:[{type:b,value:H}]},{type:a,tag:n,props:{},children:[{type:b,value:af},{type:a,tag:h,props:{},children:[{type:b,value:I}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:J}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:K}]},{type:b,value:ag},{type:a,tag:ah,props:{},children:[{type:b,value:v}]},{type:b,value:ai},{type:a,tag:h,props:{},children:[{type:b,value:L}]},{type:b,value:aj},{type:a,tag:h,props:{},children:[{type:b,value:ak}]},{type:b,value:x}]},{type:a,tag:n,props:{},children:[{type:b,value:al},{type:a,tag:h,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:q,props:{href:w},children:[{type:b,value:ao}]},{type:b,value:i}]},{type:a,tag:k,props:{code:M,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"kind"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"pipeline"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:aG}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"build"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"type"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aa}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"platform"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"os"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"linux"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"arch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"amd64"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"steps"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" - "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aG}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"build-master"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:Z}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"plugins\u002Fdocker"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"when"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"branch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aH}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"master"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"settings"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"dockerfile"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"Dockerfile"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"tag"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aH}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"${DRONE_BRANCH}"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"username"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:I}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"password"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"registry"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:K}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:s}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"repo"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:L}]}]}]}]}]},{type:a,tag:o,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:n,props:{},children:[{type:b,value:ap},{type:a,tag:h,props:{},children:[{type:b,value:v}]},{type:b,value:aq},{type:a,tag:h,props:{},children:[{type:b,value:P}]},{type:b,value:ar}]},{type:a,tag:n,props:{},children:[{type:b,value:as},{type:a,tag:h,props:{},children:[{type:b,value:at}]},{type:b,value:u},{type:a,tag:h,props:{},children:[{type:b,value:au}]},{type:b,value:av},{type:a,tag:h,props:{},children:[{type:b,value:aw}]},{type:b,value:ax}]},{type:a,tag:k,props:{code:Q,language:y},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"version"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\"3\""}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"services"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:v}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aI}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:v}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:Z}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"drone\u002Fdrone:latest"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aJ}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_GITHUB_CLIENT_ID=secret_id"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_GITHUB_CLIENT_SECRET=client_secret"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aK}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_SERVER_HOST=drone.url"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_USER_CREATE=\"username:user,admin:true\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_SERVER_PROTO=https"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_TLS_AUTOCERT=false"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_GIT_ALWAYS_AUTH=false"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_LOGS_DEBUG=true"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_LOGS_TRACE=true"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aL}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aM}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aN}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:".\u002Fdata:\u002Fdata"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"ports"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"8090:80"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:C}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aI}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"drone__agent"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:Z}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"drone\u002Fagent:latest"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"command"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"agent"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aL}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aM}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aN}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:aJ}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"DRONE_RPC_SERVER=https:\u002F\u002Fdrone.url"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aK}]}]}]}]}]},{type:a,tag:o,props:{id:R},children:[{type:b,value:S}]},{type:a,tag:n,props:{},children:[{type:b,value:ay},{type:a,tag:q,props:{href:az,rel:[z]},children:[{type:b,value:aA}]},{type:b,value:aB},{type:a,tag:q,props:{href:aC,rel:[z]},children:[{type:b,value:aD}]},{type:b,value:aE}]},{type:a,tag:o,props:{id:T},children:[{type:b,value:U}]},{type:a,tag:k,props:{code:V,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:aO},children:[{type:b,value:aP}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" DRONE_SERVER=https:\u002F\u002Fdrone.url"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:aO},children:[{type:b,value:aP}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" DRONE_TOKEN=password"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"drone info"}]}]}]}]}]},{type:a,tag:o,props:{id:W},children:[{type:b,value:X}]},{type:a,tag:n,props:{},children:[{type:b,value:aF},{type:a,tag:h,props:{},children:[{type:b,value:B}]},{type:b,value:x}]},{type:a,tag:k,props:{code:Y,language:A},children:[{type:a,tag:r,props:{},children:[{type:a,tag:k,props:{__ignoreMap:p},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"drone repo update "}]},{type:a,tag:c,props:{class:aQ},children:[{type:b,value:aR}]},{type:a,tag:c,props:{class:aS},children:[{type:b,value:B}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" --trusted=true "}]},{type:a,tag:c,props:{class:"ct-a7bf35"},children:[{type:b,value:"&&"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" drone repo info "}]},{type:a,tag:c,props:{class:aQ},children:[{type:b,value:aR}]},{type:a,tag:c,props:{class:aS},children:[{type:b,value:B}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-a7bf35{color:#FF7B72}.ct-de839e{color:#C9D1D9}.ct-e22f74{color:#C9D1D9}.ct-3b0169{color:#FF7B72}.ct-8ea36a{color:#A5D6FF}.ct-66c1f2{color:#C9D1D9}.ct-ffab44{color:#7EE787}.light .ct-ffab44{color:#268BD2}.light .ct-66c1f2{color:#657B83}.light .ct-8ea36a{color:#2AA198}.light .ct-3b0169{color:#073642}.light .ct-e22f74{color:#859900}.light .ct-de839e{color:#268BD2}.light .ct-a7bf35{color:#859900}"}]}],toc:{title:p,searchDepth:t,depth:t,links:[{id:G,depth:t,text:H},{id:N,depth:t,text:O},{id:R,depth:t,text:S},{id:T,depth:t,text:U},{id:W,depth:t,text:X}]}},_type:"markdown",_id:"content:Docker:Drone-ci.md",_source:"content",_file:"Docker\u002FDrone-ci.md",_extension:"md"}},prerenderedAt:1668068045651}}("element","text","span","ct-66c1f2","line","ct-ffab44","ct-8ea36a","code-inline",":",": ","code"," "," - ","p","h2","","a","pre"," ",2,", ","drone","Private%20docker%20registry",".","yaml","nofollow","shell","1"," "," ","from_secret",false,"pushing-to-private-docker_registry","Pushing to private docker_registry","global_docker_login","global_docker_password","global_docker_registry","docker_repo","kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build-master\n image: plugins\u002Fdocker\n when:\n branch:\n - master\n settings:\n dockerfile: Dockerfile\n tag:\n - ${DRONE_BRANCH}\n username:\n from_secret: global_docker_login\n password:\n from_secret: global_docker_password\n registry:\n from_secret: global_docker_registry\n repo:\n from_secret: docker_repo\n","docker-compose-file-for-drone-ci","Docker-compose file for drone-ci","drone-agent","version: \"3\"\n\nservices:\n drone:\n container_name: drone\n image: drone\u002Fdrone:latest\n environment:\n - DRONE_GITHUB_CLIENT_ID=secret_id\n - DRONE_GITHUB_CLIENT_SECRET=client_secret\n - DRONE_RPC_SECRET=rpc_secret\n - DRONE_SERVER_HOST=drone.url\n - DRONE_USER_CREATE=\"username:user,admin:true\"\n - DRONE_SERVER_PROTO=https\n - DRONE_TLS_AUTOCERT=false\n - DRONE_GIT_ALWAYS_AUTH=false\n - DRONE_LOGS_DEBUG=true\n - DRONE_LOGS_TRACE=true\n restart: always\n volumes:\n - .\u002Fdata:\u002Fdata\n ports:\n - 8090:80\n drone-agent:\n container_name: drone__agent\n image: drone\u002Fagent:latest\n command: agent\n restart: always\n volumes:\n - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n environment:\n - DRONE_RPC_SERVER=https:\u002F\u002Fdrone.url\n - DRONE_RPC_SECRET=rpc_secret\n","caching-builds","Caching builds","get-user-info","Get user info","export DRONE_SERVER=https:\u002F\u002Fdrone.url\nexport DRONE_TOKEN=password\ndrone info\n","mark-user-as-trusted","Mark user as trusted","drone repo update $1 --trusted=true && drone repo info $1\n","image","Drone Ci","\u002Fdocker\u002Fdrone-ci","docker","root","Can be used with ","Private docker registry"," to deploy things using #docker.","You should specify "," organizations variables in your ","strong",". And "," variable for your repo as ","docker.yourdomain.com\u002Fyour-image","This is example of ",".droneci"," for ","private docker registry","The "," service is ui itself and "," is runner for builds, that can be started on different machine (or machines).","Change ","secret_id","rpc_secret"," and ","drone.url"," to something you like.","Haven't checked that yet, but there's a ","https:\u002F\u002Flaszlo.cloud\u002Fthe-ultimate-droneci-caching-guide","manual"," from ","https:\u002F\u002Flaszlo.cloud\u002F","Laszlo Fogas"," about that.","Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to ","name"," - ","container_name","environment","DRONE_RPC_SECRET=rpc_secret","restart","always","volumes","ct-3b0169","export","ct-e22f74","$","ct-de839e"))
\ No newline at end of file
diff --git a/docker/drone-ci/index.html b/docker/drone-ci/index.html
index 5cc52db..9f12eb9 100644
--- a/docker/drone-ci/index.html
+++ b/docker/drone-ci/index.html
@@ -1,6 +1,6 @@
-Drone Ci • Obsidian Garden
-
You should specify global_docker_login, global_docker_password, global_docker_registry organizations variables in your drone. And docker_repo variable for your repo as docker.yourdomain.com/your-image.
You should specify global_docker_login, global_docker_password, global_docker_registry organizations variables in your drone. And docker_repo variable for your repo as docker.yourdomain.com/your-image.
Sometimes it won't help, then connect to drone database with sqlite and change user's trusted flag to 1.
drone repo update $1 --trusted=true && drone repo info $1
\ No newline at end of file
diff --git a/docker/github-pages-with-drone-ci/_payload.js b/docker/github-pages-with-drone-ci/_payload.js
index f3507ca..c3cdae5 100644
--- a/docker/github-pages-with-drone-ci/_payload.js
+++ b/docker/github-pages-with-drone-ci/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:H,_path:I},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-ZOfNnzEGMw":{_path:I,_dir:J,_draft:x,_partial:x,_locale:"en",_empty:x,title:H,description:"To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.",excerpt:{type:K,children:[{type:a,tag:j,props:{},children:[{type:b,value:L},{type:a,tag:i,props:{href:p},children:[{type:b,value:p}]},{type:b,value:M},{type:a,tag:f,props:{},children:[{type:b,value:N}]},{type:b,value:O},{type:a,tag:f,props:{},children:[{type:b,value:y}]},{type:b,value:P},{type:a,tag:f,props:{},children:[{type:b,value:z}]},{type:b,value:Q},{type:a,tag:i,props:{href:R,rel:[k]},children:[{type:b,value:S}]},{type:b,value:T}]},{type:a,tag:j,props:{},children:[{type:b,value:U},{type:a,tag:f,props:{},children:[{type:b,value:V}]},{type:b,value:W},{type:a,tag:i,props:{href:q,rel:[k]},children:[{type:b,value:q}]},{type:b,value:X},{type:a,tag:i,props:{href:r,rel:[k]},children:[{type:b,value:r}]},{type:b,value:Y}]},{type:a,tag:j,props:{},children:[{type:b,value:Z},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:_},{type:a,tag:f,props:{},children:[{type:b,value:$}]},{type:b,value:s}]},{type:a,tag:j,props:{},children:[{type:b,value:aa},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:ab}]},{type:a,tag:t,props:{code:A,language:ac},children:[{type:a,tag:ad,props:{},children:[{type:a,tag:t,props:{__ignoreMap:B},children:[{type:b,value:A}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:ae},{type:a,tag:f,props:{},children:[{type:b,value:af}]},{type:b,value:ag},{type:a,tag:f,props:{},children:[{type:b,value:ah}]},{type:b,value:ai},{type:a,tag:f,props:{},children:[{type:b,value:aj}]},{type:b,value:ak}]},{type:a,tag:j,props:{},children:[{type:b,value:al},{type:a,tag:f,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:ao}]},{type:b,value:s}]},{type:a,tag:ap,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:aq,props:{},children:[{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:ar,rel:[k]},children:[{type:b,value:as}]}]},{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:at}]}]}]}]},body:{type:K,children:[{type:a,tag:j,props:{},children:[{type:b,value:L},{type:a,tag:i,props:{href:p},children:[{type:b,value:p}]},{type:b,value:M},{type:a,tag:f,props:{},children:[{type:b,value:N}]},{type:b,value:O},{type:a,tag:f,props:{},children:[{type:b,value:y}]},{type:b,value:P},{type:a,tag:f,props:{},children:[{type:b,value:z}]},{type:b,value:Q},{type:a,tag:i,props:{href:R,rel:[k]},children:[{type:b,value:S}]},{type:b,value:T}]},{type:a,tag:j,props:{},children:[{type:b,value:U},{type:a,tag:f,props:{},children:[{type:b,value:V}]},{type:b,value:W},{type:a,tag:i,props:{href:q,rel:[k]},children:[{type:b,value:q}]},{type:b,value:X},{type:a,tag:i,props:{href:r,rel:[k]},children:[{type:b,value:r}]},{type:b,value:Y}]},{type:a,tag:j,props:{},children:[{type:b,value:Z},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:_},{type:a,tag:f,props:{},children:[{type:b,value:$}]},{type:b,value:s}]},{type:a,tag:j,props:{},children:[{type:b,value:aa},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:ab}]},{type:a,tag:t,props:{code:A,language:ac},children:[{type:a,tag:ad,props:{},children:[{type:a,tag:t,props:{__ignoreMap:B},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"kind"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"pipeline"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:au}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"type"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"platform"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:av}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"os"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"linux"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:av}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"arch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"amd64"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"steps"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aw}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:au}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:ax}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"node:16"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"commands"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"yarn"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"yarn generate"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"rm -rf .\u002Fdocs"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"mv .\u002F.output\u002Fpublic .\u002Fdocs"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"touch .\u002Fdocs\u002F.nojekyll"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aw}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"publish"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:ax}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"plugins\u002Fgh-pages"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"settings"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"target_branch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:n}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"username"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ay}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:az}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"password"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ay}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:az}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:z}]}]}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:ae},{type:a,tag:f,props:{},children:[{type:b,value:af}]},{type:b,value:ag},{type:a,tag:f,props:{},children:[{type:b,value:ah}]},{type:b,value:ai},{type:a,tag:f,props:{},children:[{type:b,value:aj}]},{type:b,value:ak}]},{type:a,tag:j,props:{},children:[{type:b,value:al},{type:a,tag:f,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:ao}]},{type:b,value:s}]},{type:a,tag:ap,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:aq,props:{},children:[{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:ar,rel:[k]},children:[{type:b,value:as}]}]},{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:at}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-09ba81{color:#A5D6FF}.ct-1e1301{color:#C9D1D9}.ct-a3e2c3{color:#7EE787}.light .ct-a3e2c3{color:#268BD2}.light .ct-1e1301{color:#657B83}.light .ct-09ba81{color:#2AA198}"}]}],toc:{title:B,searchDepth:G,depth:G,links:[{id:C,depth:G,text:D}]}},_type:"markdown",_id:"content:Docker:Github pages with drone-ci.md",_source:"content",_file:"Docker\u002FGithub pages with drone-ci.md",_extension:"md"}},prerenderedAt:1667989032407}}("element","text","span","ct-1e1301","line","code-inline","ct-a3e2c3","ct-09ba81","a","p","nofollow",": ",":","gh-pages"," - ","Drone-ci","https:\u002F\u002Fyourname.github.io\u002F","https:\u002F\u002Fyourname.github.io\u002Frepo-name\u002F",".","code","https:\u002F\u002Fgithub.blog\u002F2009-12-29-bypassing-jekyll-on-github-pages\u002F","li"," ",false,"github_username","github_token","kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf .\u002Fdocs\n - mv .\u002F.output\u002Fpublic .\u002Fdocs\n - touch .\u002Fdocs\u002F.nojekyll\n - name: publish\n image: plugins\u002Fgh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","","additional-reading","Additional reading","name"," ",2,"Github Pages With Drone Ci","\u002Fdocker\u002Fgithub-pages-with-drone-ci","docker","root","To deploy github pages with "," you will need ",".drone.yml"," as specified below. You also should define secrets "," and "," (get it ","https:\u002F\u002Fgithub.com\u002Fsettings\u002Ftokens","here",") in your drone's repository setup.","Github repository should be named as ","yourname.github.io"," and it could be accessed at ",". Otherwise it'll be available at ",", what you might not like.","You should create branch named "," in that repo and setup GH Pages at ","https:\u002F\u002Fgithub.com\u002F\u003Cyourusername\u003E\u002F\u003Cyourusername\u003E.github.io\u002Fsettings\u002Fpages","This config will update "," branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins.","yaml","pre","Here we're moving ",".\u002F.output\u002Fpublic"," to ",".\u002Fdocs",", because #nuxt creates symlink for ","docs"," and git can't work with that.","Also we create ",".nojekyll"," at the root of repo, so github's internal engine won't ","ignore files that start with underscore","h2","ul","https:\u002F\u002Fplugins.drone.io\u002Fplugins\u002Fgh-pages","Drone Github Pages Documentation","Bypassing Jekyll on GitHub Pages","build"," "," - ","image"," ","from_secret"))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:H,_path:I},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-ZOfNnzEGMw":{_path:I,_dir:J,_draft:x,_partial:x,_locale:"en",_empty:x,title:H,description:"To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.",excerpt:{type:K,children:[{type:a,tag:j,props:{},children:[{type:b,value:L},{type:a,tag:i,props:{href:p},children:[{type:b,value:p}]},{type:b,value:M},{type:a,tag:f,props:{},children:[{type:b,value:N}]},{type:b,value:O},{type:a,tag:f,props:{},children:[{type:b,value:y}]},{type:b,value:P},{type:a,tag:f,props:{},children:[{type:b,value:z}]},{type:b,value:Q},{type:a,tag:i,props:{href:R,rel:[k]},children:[{type:b,value:S}]},{type:b,value:T}]},{type:a,tag:j,props:{},children:[{type:b,value:U},{type:a,tag:f,props:{},children:[{type:b,value:V}]},{type:b,value:W},{type:a,tag:i,props:{href:q,rel:[k]},children:[{type:b,value:q}]},{type:b,value:X},{type:a,tag:i,props:{href:r,rel:[k]},children:[{type:b,value:r}]},{type:b,value:Y}]},{type:a,tag:j,props:{},children:[{type:b,value:Z},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:_},{type:a,tag:f,props:{},children:[{type:b,value:$}]},{type:b,value:s}]},{type:a,tag:j,props:{},children:[{type:b,value:aa},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:ab}]},{type:a,tag:t,props:{code:A,language:ac},children:[{type:a,tag:ad,props:{},children:[{type:a,tag:t,props:{__ignoreMap:B},children:[{type:b,value:A}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:ae},{type:a,tag:f,props:{},children:[{type:b,value:af}]},{type:b,value:ag},{type:a,tag:f,props:{},children:[{type:b,value:ah}]},{type:b,value:ai},{type:a,tag:f,props:{},children:[{type:b,value:aj}]},{type:b,value:ak}]},{type:a,tag:j,props:{},children:[{type:b,value:al},{type:a,tag:f,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:ao}]},{type:b,value:s}]},{type:a,tag:ap,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:aq,props:{},children:[{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:ar,rel:[k]},children:[{type:b,value:as}]}]},{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:at}]}]}]}]},body:{type:K,children:[{type:a,tag:j,props:{},children:[{type:b,value:L},{type:a,tag:i,props:{href:p},children:[{type:b,value:p}]},{type:b,value:M},{type:a,tag:f,props:{},children:[{type:b,value:N}]},{type:b,value:O},{type:a,tag:f,props:{},children:[{type:b,value:y}]},{type:b,value:P},{type:a,tag:f,props:{},children:[{type:b,value:z}]},{type:b,value:Q},{type:a,tag:i,props:{href:R,rel:[k]},children:[{type:b,value:S}]},{type:b,value:T}]},{type:a,tag:j,props:{},children:[{type:b,value:U},{type:a,tag:f,props:{},children:[{type:b,value:V}]},{type:b,value:W},{type:a,tag:i,props:{href:q,rel:[k]},children:[{type:b,value:q}]},{type:b,value:X},{type:a,tag:i,props:{href:r,rel:[k]},children:[{type:b,value:r}]},{type:b,value:Y}]},{type:a,tag:j,props:{},children:[{type:b,value:Z},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:_},{type:a,tag:f,props:{},children:[{type:b,value:$}]},{type:b,value:s}]},{type:a,tag:j,props:{},children:[{type:b,value:aa},{type:a,tag:f,props:{},children:[{type:b,value:n}]},{type:b,value:ab}]},{type:a,tag:t,props:{code:A,language:ac},children:[{type:a,tag:ad,props:{},children:[{type:a,tag:t,props:{__ignoreMap:B},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"kind"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"pipeline"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:au}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"type"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"platform"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:av}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"os"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"linux"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:av}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"arch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"amd64"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:"steps"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aw}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:au}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:ax}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"node:16"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"commands"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"yarn"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"yarn generate"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"rm -rf .\u002Fdocs"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"mv .\u002F.output\u002Fpublic .\u002Fdocs"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"touch .\u002Fdocs\u002F.nojekyll"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:aw}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"publish"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:ax}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"plugins\u002Fgh-pages"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:w}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"settings"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"target_branch"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:n}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"username"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ay}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:az}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:F}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"password"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:m}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ay}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:az}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:z}]}]}]}]}]},{type:a,tag:j,props:{},children:[{type:b,value:ae},{type:a,tag:f,props:{},children:[{type:b,value:af}]},{type:b,value:ag},{type:a,tag:f,props:{},children:[{type:b,value:ah}]},{type:b,value:ai},{type:a,tag:f,props:{},children:[{type:b,value:aj}]},{type:b,value:ak}]},{type:a,tag:j,props:{},children:[{type:b,value:al},{type:a,tag:f,props:{},children:[{type:b,value:am}]},{type:b,value:an},{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:ao}]},{type:b,value:s}]},{type:a,tag:ap,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:aq,props:{},children:[{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:ar,rel:[k]},children:[{type:b,value:as}]}]},{type:a,tag:v,props:{},children:[{type:a,tag:i,props:{href:u,rel:[k]},children:[{type:b,value:at}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-b63ea4{color:#A5D6FF}.ct-a0923d{color:#C9D1D9}.ct-20ff57{color:#7EE787}.light .ct-20ff57{color:#268BD2}.light .ct-a0923d{color:#657B83}.light .ct-b63ea4{color:#2AA198}"}]}],toc:{title:B,searchDepth:G,depth:G,links:[{id:C,depth:G,text:D}]}},_type:"markdown",_id:"content:Docker:Github pages with drone-ci.md",_source:"content",_file:"Docker\u002FGithub pages with drone-ci.md",_extension:"md"}},prerenderedAt:1668068045729}}("element","text","span","ct-a0923d","line","code-inline","ct-20ff57","ct-b63ea4","a","p","nofollow",": ",":","gh-pages"," - ","Drone-ci","https:\u002F\u002Fyourname.github.io\u002F","https:\u002F\u002Fyourname.github.io\u002Frepo-name\u002F",".","code","https:\u002F\u002Fgithub.blog\u002F2009-12-29-bypassing-jekyll-on-github-pages\u002F","li"," ",false,"github_username","github_token","kind: pipeline\nname: build\ntype: docker\n\nplatform:\n os: linux\n arch: amd64\n\nsteps:\n - name: build\n image: node:16\n commands:\n - yarn\n - yarn generate\n - rm -rf .\u002Fdocs\n - mv .\u002F.output\u002Fpublic .\u002Fdocs\n - touch .\u002Fdocs\u002F.nojekyll\n - name: publish\n image: plugins\u002Fgh-pages\n settings:\n target_branch: gh-pages\n username:\n from_secret: github_username\n password:\n from_secret: github_token\n","","additional-reading","Additional reading","name"," ",2,"Github Pages With Drone Ci","\u002Fdocker\u002Fgithub-pages-with-drone-ci","docker","root","To deploy github pages with "," you will need ",".drone.yml"," as specified below. You also should define secrets "," and "," (get it ","https:\u002F\u002Fgithub.com\u002Fsettings\u002Ftokens","here",") in your drone's repository setup.","Github repository should be named as ","yourname.github.io"," and it could be accessed at ",". Otherwise it'll be available at ",", what you might not like.","You should create branch named "," in that repo and setup GH Pages at ","https:\u002F\u002Fgithub.com\u002F\u003Cyourusername\u003E\u002F\u003Cyourusername\u003E.github.io\u002Fsettings\u002Fpages","This config will update "," branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins.","yaml","pre","Here we're moving ",".\u002F.output\u002Fpublic"," to ",".\u002Fdocs",", because #nuxt creates symlink for ","docs"," and git can't work with that.","Also we create ",".nojekyll"," at the root of repo, so github's internal engine won't ","ignore files that start with underscore","h2","ul","https:\u002F\u002Fplugins.drone.io\u002Fplugins\u002Fgh-pages","Drone Github Pages Documentation","Bypassing Jekyll on GitHub Pages","build"," "," - ","image"," ","from_secret"))
\ No newline at end of file
diff --git a/docker/github-pages-with-drone-ci/index.html b/docker/github-pages-with-drone-ci/index.html
index e6e0e60..9684acb 100644
--- a/docker/github-pages-with-drone-ci/index.html
+++ b/docker/github-pages-with-drone-ci/index.html
@@ -1,6 +1,6 @@
-Github Pages With Drone Ci • Obsidian Garden
-
Github Pages With Drone Ci
To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.
You should create branch named gh-pages in that repo and setup GH Pages at https://github.com/<yourusername>/<yourusername>.github.io/settings/pages.
This config will update gh-pages branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins.
To deploy github pages with Drone-ci you will need .drone.yml as specified below. You also should define secrets github_username and github_token (get it here) in your drone's repository setup.
You should create branch named gh-pages in that repo and setup GH Pages at https://github.com/<yourusername>/<yourusername>.github.io/settings/pages.
This config will update gh-pages branch in your project, which will contain only generated content. I know, that's bad, but there's no better way to do that with generic drone plugins.
\ No newline at end of file
diff --git a/docker/private-docker-registry/_payload.js b/docker/private-docker-registry/_payload.js
index d19e7a0..4b4749c 100644
--- a/docker/private-docker-registry/_payload.js
+++ b/docker/private-docker-registry/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:B,_path:C},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-3LsByI0Qek":{_path:C,_dir:"docker",_draft:t,_partial:t,_locale:"en",_empty:t,title:B,description:"Suitable to work with Drone-ci for hosting private #docker images.",excerpt:{type:D,children:[{type:a,tag:n,props:{},children:[{type:c,value:E},{type:a,tag:F,props:{href:p},children:[{type:c,value:p}]},{type:c,value:G}]},{type:a,tag:q,props:{id:u},children:[{type:c,value:v}]},{type:a,tag:n,props:{},children:[{type:c,value:H}]},{type:a,tag:i,props:{code:w,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:c,value:w}]}]}]},{type:a,tag:i,props:{code:x,language:I},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:c,value:x}]}]}]},{type:a,tag:q,props:{id:y},children:[{type:c,value:z}]},{type:a,tag:n,props:{},children:[{type:c,value:J}]},{type:a,tag:K,props:{},children:[{type:a,tag:L,props:{},children:[{type:c,value:M}]}]},{type:a,tag:i,props:{code:A,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:c,value:A}]}]}]}]},body:{type:D,children:[{type:a,tag:n,props:{},children:[{type:c,value:E},{type:a,tag:F,props:{href:p},children:[{type:c,value:p}]},{type:c,value:G}]},{type:a,tag:q,props:{id:u},children:[{type:c,value:v}]},{type:a,tag:n,props:{},children:[{type:c,value:H}]},{type:a,tag:i,props:{code:w,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --entrypoint htpasswd registry:2 \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -Bbn user mypassword "}]},{type:a,tag:b,props:{class:"ct-9a510f"},children:[{type:c,value:"\u003E"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" auth\u002Fregistry.password"}]}]}]}]}]},{type:a,tag:i,props:{code:x,language:I},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"version"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"3\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"services"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"registry"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"docker__registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"registry:2"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"5000:5000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:U}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=\u002Fdata"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_AUTH=htpasswd"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_AUTH_HTPASSWD_REALM=Registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_AUTH_HTPASSWD_PATH=\u002Fauth\u002Fregistry.password"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_HTTP_SECRET=password"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_STORAGE_DELETE_ENABLED=true"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"volumes"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:".\u002Fregistry\u002Fauth:\u002Fauth"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:".\u002Fregistry\u002Fdata:\u002Fdata"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"ui"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"docker__ui"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"parabuzzle\u002Fcraneoperator:latest"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"80:80"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:U}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_HOST=registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_PORT=5000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_PROTOCOL=http"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"ALLOW_REGISTRY_LOGIN=true"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_ALLOW_DELETE=true"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"USERNAME=registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"PASSWORD=password"}]}]}]}]}]},{type:a,tag:q,props:{id:y},children:[{type:c,value:z}]},{type:a,tag:n,props:{},children:[{type:c,value:J}]},{type:a,tag:K,props:{},children:[{type:a,tag:L,props:{},children:[{type:c,value:M}]}]},{type:a,tag:i,props:{code:A,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:W},children:[{type:c,value:"# Try this first"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --rm anoxis\u002Fregistry-cli \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -r https:\u002F\u002Fregistry.url \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -l user:password \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --delete \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --num 2"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:W},children:[{type:c,value:"# Then this "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"docker run -it \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -v \u002Fpath\u002Fto\u002Fregistry\u002Fdata:\u002Fregistry \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e REGISTRY_URL=https:\u002F\u002Fregistry.url \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e DRY_RUN="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"false\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:X}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e REGISTRY_AUTH="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"user:password\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:X}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" mortensrasmussen\u002Fdocker-registry-manifest-cleanup"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-612ed3{color:#8B949E}.ct-eee4f4{color:#A5D6FF}.ct-1c98f9{color:#7EE787}.ct-9a510f{color:#FF7B72}.ct-2b1875{color:#C9D1D9}.light .ct-2b1875{color:#657B83}.light .ct-9a510f{color:#859900}.light .ct-1c98f9{color:#268BD2}.light .ct-eee4f4{color:#2AA198}.light .ct-612ed3{color:#93A1A1}"}]}],toc:{title:l,searchDepth:s,depth:s,links:[{id:u,depth:s,text:v},{id:y,depth:s,text:z}]}},_type:"markdown",_id:"content:Docker:Private docker registry.md",_source:"content",_file:"Docker\u002FPrivate docker registry.md",_extension:"md"}},prerenderedAt:1667989032464}}("element","span","text","ct-2b1875","line","ct-eee4f4","ct-1c98f9"," - ","code"," ",":","",": ","p","pre","Drone-ci","h2","shell",2,false,"sample-docker-compose-for-custom-docker-registry","Sample docker-compose for custom docker registry","docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword \u003E auth\u002Fregistry.password\n","version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=\u002Fdata\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=\u002Fauth\u002Fregistry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - .\u002Fregistry\u002Fauth:\u002Fauth\n - .\u002Fregistry\u002Fdata:\u002Fdata\n ui:\n container_name: docker__ui\n image: parabuzzle\u002Fcraneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","squash-layers-on-registry","Squash layers on registry","# Try this first\ndocker run \\\n --rm anoxis\u002Fregistry-cli \\\n -r https:\u002F\u002Fregistry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v \u002Fpath\u002Fto\u002Fregistry\u002Fdata:\u002Fregistry \\\n -e REGISTRY_URL=https:\u002F\u002Fregistry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen\u002Fdocker-registry-manifest-cleanup\n","Private Docker Registry","\u002Fdocker\u002Fprivate-docker-registry","root","Suitable to work with ","a"," for hosting private #docker images.","This one brings up private docker registry with ui. First you'll need to generate password for it:","yaml","Sometimes you need to squash all layers in docker registry to free up disk space.","ol","li","Run this command to mark oldest layers","docker run \\"," ","container_name","image","ports"," - ","restart","always","environment","ct-612ed3"," \\"))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:B,_path:C},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-3LsByI0Qek":{_path:C,_dir:"docker",_draft:t,_partial:t,_locale:"en",_empty:t,title:B,description:"Suitable to work with Drone-ci for hosting private #docker images.",excerpt:{type:D,children:[{type:a,tag:n,props:{},children:[{type:c,value:E},{type:a,tag:F,props:{href:p},children:[{type:c,value:p}]},{type:c,value:G}]},{type:a,tag:q,props:{id:u},children:[{type:c,value:v}]},{type:a,tag:n,props:{},children:[{type:c,value:H}]},{type:a,tag:i,props:{code:w,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:c,value:w}]}]}]},{type:a,tag:i,props:{code:x,language:I},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:c,value:x}]}]}]},{type:a,tag:q,props:{id:y},children:[{type:c,value:z}]},{type:a,tag:n,props:{},children:[{type:c,value:J}]},{type:a,tag:K,props:{},children:[{type:a,tag:L,props:{},children:[{type:c,value:M}]}]},{type:a,tag:i,props:{code:A,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:c,value:A}]}]}]}]},body:{type:D,children:[{type:a,tag:n,props:{},children:[{type:c,value:E},{type:a,tag:F,props:{href:p},children:[{type:c,value:p}]},{type:c,value:G}]},{type:a,tag:q,props:{id:u},children:[{type:c,value:v}]},{type:a,tag:n,props:{},children:[{type:c,value:H}]},{type:a,tag:i,props:{code:w,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --entrypoint htpasswd registry:2 \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -Bbn user mypassword "}]},{type:a,tag:b,props:{class:"ct-44c60f"},children:[{type:c,value:"\u003E"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" auth\u002Fregistry.password"}]}]}]}]}]},{type:a,tag:i,props:{code:x,language:I},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"version"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"3\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"services"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"registry"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"docker__registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"registry:2"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"5000:5000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:U}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=\u002Fdata"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_AUTH=htpasswd"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_AUTH_HTPASSWD_REALM=Registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_AUTH_HTPASSWD_PATH=\u002Fauth\u002Fregistry.password"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_HTTP_SECRET=password"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_STORAGE_DELETE_ENABLED=true"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"volumes"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:".\u002Fregistry\u002Fauth:\u002Fauth"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:".\u002Fregistry\u002Fdata:\u002Fdata"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"ui"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"docker__ui"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"parabuzzle\u002Fcraneoperator:latest"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"80:80"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:U}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_HOST=registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_PORT=5000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_PROTOCOL=http"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"ALLOW_REGISTRY_LOGIN=true"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"REGISTRY_ALLOW_DELETE=true"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"USERNAME=registry"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"PASSWORD=password"}]}]}]}]}]},{type:a,tag:q,props:{id:y},children:[{type:c,value:z}]},{type:a,tag:n,props:{},children:[{type:c,value:J}]},{type:a,tag:K,props:{},children:[{type:a,tag:L,props:{},children:[{type:c,value:M}]}]},{type:a,tag:i,props:{code:A,language:r},children:[{type:a,tag:o,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:W},children:[{type:c,value:"# Try this first"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --rm anoxis\u002Fregistry-cli \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -r https:\u002F\u002Fregistry.url \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -l user:password \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --delete \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" --num 2"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:W},children:[{type:c,value:"# Then this "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"docker run -it \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -v \u002Fpath\u002Fto\u002Fregistry\u002Fdata:\u002Fregistry \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e REGISTRY_URL=https:\u002F\u002Fregistry.url \\"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e DRY_RUN="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"false\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:X}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e REGISTRY_AUTH="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"user:password\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:X}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" mortensrasmussen\u002Fdocker-registry-manifest-cleanup"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-11fc25{color:#8B949E}.ct-8c8d33{color:#A5D6FF}.ct-55b310{color:#7EE787}.ct-44c60f{color:#FF7B72}.ct-197cbc{color:#C9D1D9}.light .ct-197cbc{color:#657B83}.light .ct-44c60f{color:#859900}.light .ct-55b310{color:#268BD2}.light .ct-8c8d33{color:#2AA198}.light .ct-11fc25{color:#93A1A1}"}]}],toc:{title:l,searchDepth:s,depth:s,links:[{id:u,depth:s,text:v},{id:y,depth:s,text:z}]}},_type:"markdown",_id:"content:Docker:Private docker registry.md",_source:"content",_file:"Docker\u002FPrivate docker registry.md",_extension:"md"}},prerenderedAt:1668068045793}}("element","span","text","ct-197cbc","line","ct-8c8d33","ct-55b310"," - ","code"," ",":","",": ","p","pre","Drone-ci","h2","shell",2,false,"sample-docker-compose-for-custom-docker-registry","Sample docker-compose for custom docker registry","docker run \\\n --entrypoint htpasswd registry:2 \\\n -Bbn user mypassword \u003E auth\u002Fregistry.password\n","version: \"3\"\nservices:\n registry:\n container_name: docker__registry\n image: registry:2\n ports:\n - 5000:5000\n restart: always\n environment:\n - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=\u002Fdata\n - REGISTRY_AUTH=htpasswd\n - REGISTRY_AUTH_HTPASSWD_REALM=Registry\n - REGISTRY_AUTH_HTPASSWD_PATH=\u002Fauth\u002Fregistry.password\n - REGISTRY_HTTP_SECRET=password\n - REGISTRY_STORAGE_DELETE_ENABLED=true\n volumes:\n - .\u002Fregistry\u002Fauth:\u002Fauth\n - .\u002Fregistry\u002Fdata:\u002Fdata\n ui:\n container_name: docker__ui\n image: parabuzzle\u002Fcraneoperator:latest\n ports:\n - 80:80\n restart: always\n environment:\n - REGISTRY_HOST=registry\n - REGISTRY_PORT=5000\n - REGISTRY_PROTOCOL=http\n - ALLOW_REGISTRY_LOGIN=true\n - REGISTRY_ALLOW_DELETE=true\n - USERNAME=registry\n - PASSWORD=password\n","squash-layers-on-registry","Squash layers on registry","# Try this first\ndocker run \\\n --rm anoxis\u002Fregistry-cli \\\n -r https:\u002F\u002Fregistry.url \\\n -l user:password \\\n --delete \\\n --num 2\n\n# Then this \ndocker run -it \\\n -v \u002Fpath\u002Fto\u002Fregistry\u002Fdata:\u002Fregistry \\\n -e REGISTRY_URL=https:\u002F\u002Fregistry.url \\\n -e DRY_RUN=\"false\" \\\n -e REGISTRY_AUTH=\"user:password\" \\\n mortensrasmussen\u002Fdocker-registry-manifest-cleanup\n","Private Docker Registry","\u002Fdocker\u002Fprivate-docker-registry","root","Suitable to work with ","a"," for hosting private #docker images.","This one brings up private docker registry with ui. First you'll need to generate password for it:","yaml","Sometimes you need to squash all layers in docker registry to free up disk space.","ol","li","Run this command to mark oldest layers","docker run \\"," ","container_name","image","ports"," - ","restart","always","environment","ct-11fc25"," \\"))
\ No newline at end of file
diff --git a/docker/private-docker-registry/index.html b/docker/private-docker-registry/index.html
index 83e27df..3f3fec1 100644
--- a/docker/private-docker-registry/index.html
+++ b/docker/private-docker-registry/index.html
@@ -1,6 +1,6 @@
-Private Docker Registry • Obsidian Garden
-
Private Docker Registry
Suitable to work with Drone-ci for hosting private #docker images.
Sometimes you need to squash all layers in docker registry to free up disk space.
Run this command to mark oldest layers
# Try this firstdocker run \ --rm anoxis/registry-cli \ -r https://registry.url \ -l user:password \ --delete \ --num 2# Then this docker run -it \ -v /path/to/registry/data:/registry \ -e REGISTRY_URL=https://registry.url \ -e DRY_RUN="false" \ -e REGISTRY_AUTH="user:password" \ mortensrasmussen/docker-registry-manifest-cleanup
\ No newline at end of file
diff --git a/docker/refresh-containers-on-pull/_payload.js b/docker/refresh-containers-on-pull/_payload.js
index c170502..508e865 100644
--- a/docker/refresh-containers-on-pull/_payload.js
+++ b/docker/refresh-containers-on-pull/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:t,_path:u},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-8eno4meLw0":{_path:u,_dir:"docker",_draft:n,_partial:n,_locale:"en",_empty:n,title:t,description:k,excerpt:{type:v,children:[{type:a,tag:w,props:{id:o},children:[{type:b,value:p}]},{type:a,tag:x,props:{},children:[{type:a,tag:h,props:{href:y,rel:[z]},children:[{type:b,value:A}]},{type:b,value:B},{type:a,tag:h,props:{href:C},children:[{type:b,value:D}]},{type:b,value:E},{type:a,tag:h,props:{href:l},children:[{type:b,value:l}]},{type:b,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:k},children:[{type:b,value:q}]}]}]}]},body:{type:v,children:[{type:a,tag:w,props:{id:o},children:[{type:b,value:p}]},{type:a,tag:x,props:{},children:[{type:a,tag:h,props:{href:y,rel:[z]},children:[{type:b,value:A}]},{type:b,value:B},{type:a,tag:h,props:{href:C},children:[{type:b,value:D}]},{type:b,value:E},{type:a,tag:h,props:{href:l},children:[{type:b,value:l}]},{type:b,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:k},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"version"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\"3\""}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"services"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"watchtower"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"container_name"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"docker__watchtower"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"image"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"v2tec\u002Fwatchtower"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"restart"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"always"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"volumes"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\u002Fhome\u002Fuser\u002F.docker\u002Fconfig.json:\u002Fconfig.json"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"command"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"--interval 60 image_1 image_2"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-572788{color:#A5D6FF}.ct-d8ca28{color:#C9D1D9}.ct-ff98de{color:#7EE787}.light .ct-ff98de{color:#268BD2}.light .ct-d8ca28{color:#657B83}.light .ct-572788{color:#2AA198}"}]}],toc:{title:k,searchDepth:s,depth:s,links:[{id:o,depth:s,text:p}]}},_type:"markdown",_id:"content:Docker:Refresh containers on pull.md",_source:"content",_file:"Docker\u002FRefresh containers on pull.md",_extension:"md"}},prerenderedAt:1667989032531}}("element","text","span","ct-d8ca28","line","ct-ff98de","ct-572788","a",": "," ","","Drone-ci","code",false,"setting-up-watchtower","Setting up watchtower","version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec\u002Fwatchtower\n restart: always\n volumes:\n - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n - \u002Fhome\u002Fuser\u002F.docker\u002Fconfig.json:\u002Fconfig.json\n command: --interval 60 image_1 image_2\n",":",2,"Refresh Containers On Pull","\u002Fdocker\u002Frefresh-containers-on-pull","root","h2","p","https:\u002F\u002Fcontainrrr.dev\u002Fwatchtower\u002F","nofollow","Watchtower"," will automatically pull updated #docker containers. Can be used with ","Private%20docker%20registry","Private docker registry"," and ",".","yaml","pre"," - "))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:t,_path:u},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-8eno4meLw0":{_path:u,_dir:"docker",_draft:n,_partial:n,_locale:"en",_empty:n,title:t,description:k,excerpt:{type:v,children:[{type:a,tag:w,props:{id:o},children:[{type:b,value:p}]},{type:a,tag:x,props:{},children:[{type:a,tag:h,props:{href:y,rel:[z]},children:[{type:b,value:A}]},{type:b,value:B},{type:a,tag:h,props:{href:C},children:[{type:b,value:D}]},{type:b,value:E},{type:a,tag:h,props:{href:l},children:[{type:b,value:l}]},{type:b,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:k},children:[{type:b,value:q}]}]}]}]},body:{type:v,children:[{type:a,tag:w,props:{id:o},children:[{type:b,value:p}]},{type:a,tag:x,props:{},children:[{type:a,tag:h,props:{href:y,rel:[z]},children:[{type:b,value:A}]},{type:b,value:B},{type:a,tag:h,props:{href:C},children:[{type:b,value:D}]},{type:b,value:E},{type:a,tag:h,props:{href:l},children:[{type:b,value:l}]},{type:b,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:k},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"version"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\"3\""}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"services"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"watchtower"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"container_name"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"docker__watchtower"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"image"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"v2tec\u002Fwatchtower"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"restart"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"always"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"volumes"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:I}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"\u002Fhome\u002Fuser\u002F.docker\u002Fconfig.json:\u002Fconfig.json"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"command"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"--interval 60 image_1 image_2"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-e17983{color:#A5D6FF}.ct-8a90fa{color:#C9D1D9}.ct-a14498{color:#7EE787}.light .ct-a14498{color:#268BD2}.light .ct-8a90fa{color:#657B83}.light .ct-e17983{color:#2AA198}"}]}],toc:{title:k,searchDepth:s,depth:s,links:[{id:o,depth:s,text:p}]}},_type:"markdown",_id:"content:Docker:Refresh containers on pull.md",_source:"content",_file:"Docker\u002FRefresh containers on pull.md",_extension:"md"}},prerenderedAt:1668068045857}}("element","text","span","ct-8a90fa","line","ct-a14498","ct-e17983","a",": "," ","","Drone-ci","code",false,"setting-up-watchtower","Setting up watchtower","version: \"3\"\n\nservices:\n watchtower:\n container_name: docker__watchtower\n image: v2tec\u002Fwatchtower\n restart: always\n volumes:\n - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n - \u002Fhome\u002Fuser\u002F.docker\u002Fconfig.json:\u002Fconfig.json\n command: --interval 60 image_1 image_2\n",":",2,"Refresh Containers On Pull","\u002Fdocker\u002Frefresh-containers-on-pull","root","h2","p","https:\u002F\u002Fcontainrrr.dev\u002Fwatchtower\u002F","nofollow","Watchtower"," will automatically pull updated #docker containers. Can be used with ","Private%20docker%20registry","Private docker registry"," and ",".","yaml","pre"," - "))
\ No newline at end of file
diff --git a/docker/refresh-containers-on-pull/index.html b/docker/refresh-containers-on-pull/index.html
index 8a281dc..26fbeb7 100644
--- a/docker/refresh-containers-on-pull/index.html
+++ b/docker/refresh-containers-on-pull/index.html
@@ -1,6 +1,6 @@
-Refresh Containers On Pull • Obsidian Garden
-
\ No newline at end of file
diff --git a/docker/seed-dump-inside-docker/_payload.js b/docker/seed-dump-inside-docker/_payload.js
index aea8757..89e3b3b 100644
--- a/docker/seed-dump-inside-docker/_payload.js
+++ b/docker/seed-dump-inside-docker/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:o,_path:p},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-TQfPEagSjQ":{_path:p,_dir:"docker",_draft:j,_partial:j,_locale:"en",_empty:j,title:o,description:"If you need to seed .sql dump in #docker container, just run this command. Also you can try to rsync file with SSH to get it from remote host.",excerpt:{type:q,children:[{type:a,tag:r,props:{},children:[{type:b,value:s},{type:a,tag:t,props:{},children:[{type:b,value:u}]},{type:b,value:v},{type:a,tag:w,props:{href:x},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:i,props:{code:k,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:b,value:k}]}]}]}]},body:{type:q,children:[{type:a,tag:r,props:{},children:[{type:b,value:s},{type:a,tag:t,props:{},children:[{type:b,value:u}]},{type:b,value:v},{type:a,tag:w,props:{href:x},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:i,props:{code:k,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:m},children:[{type:b,value:C}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:m},children:[{type:b,value:"# usage: .\u002Fscript.sh \"\u002Fpath\u002Fto\u002Fdump.sql\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:m},children:[{type:b,value:C}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"DUMP_PATH="}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"1"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"CONTAINER="}]},{type:a,tag:c,props:{class:n},children:[{type:b,value:"\"db\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"USER=root"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"PASSWORD=password"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"DB=database"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"cat "}]},{type:a,tag:c,props:{class:n},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"DUMP_PATH"}]},{type:a,tag:c,props:{class:n},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:"ct-1fdd24"},children:[{type:b,value:"|"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" docker "}]},{type:a,tag:c,props:{class:"ct-862a36"},children:[{type:b,value:"exec"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" -i "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"CONTAINER"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" mysql -u"}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"USER"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" -p"}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"PASSWORD"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"DB"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-862a36{color:#79C0FF}.ct-1fdd24{color:#FF7B72}.ct-ab3f0c{color:#A5D6FF}.ct-8376c3{color:#C9D1D9}.ct-5a1c83{color:#C9D1D9}.ct-3ec785{color:#C9D1D9}.ct-bd9672{color:#8B949E}.light .ct-bd9672{color:#93A1A1}.light .ct-3ec785{color:#657B83}.light .ct-5a1c83{color:#859900}.light .ct-8376c3{color:#268BD2}.light .ct-ab3f0c{color:#2AA198}.light .ct-1fdd24{color:#859900}.light .ct-862a36{color:#268BD2}"}]}],toc:{title:l,searchDepth:F,depth:F,links:[]}},_type:"markdown",_id:"content:Docker:Seed dump inside docker.md",_source:"content",_file:"Docker\u002FSeed dump inside docker.md",_extension:"md"}},prerenderedAt:1667989032581}}("element","text","span","ct-3ec785","line","ct-5a1c83","$","ct-8376c3","code",false,"#####\n# usage: .\u002Fscript.sh \"\u002Fpath\u002Fto\u002Fdump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","","ct-bd9672","ct-ab3f0c","Seed Dump Inside Docker","\u002Fdocker\u002Fseed-dump-inside-docker","root","p","If you need to seed ","code-inline",".sql"," dump in #docker container, just run this command. Also you can try to ","a","\u002Flinux\u002FRsync%20file%20with%20SSH","rsync file with SSH"," to get it from remote host.","shell","pre","#####","\""," ",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:o,_path:p},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-TQfPEagSjQ":{_path:p,_dir:"docker",_draft:j,_partial:j,_locale:"en",_empty:j,title:o,description:"If you need to seed .sql dump in #docker container, just run this command. Also you can try to rsync file with SSH to get it from remote host.",excerpt:{type:q,children:[{type:a,tag:r,props:{},children:[{type:b,value:s},{type:a,tag:t,props:{},children:[{type:b,value:u}]},{type:b,value:v},{type:a,tag:w,props:{href:x},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:i,props:{code:k,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:b,value:k}]}]}]}]},body:{type:q,children:[{type:a,tag:r,props:{},children:[{type:b,value:s},{type:a,tag:t,props:{},children:[{type:b,value:u}]},{type:b,value:v},{type:a,tag:w,props:{href:x},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:i,props:{code:k,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:i,props:{__ignoreMap:l},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:m},children:[{type:b,value:C}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:m},children:[{type:b,value:"# usage: .\u002Fscript.sh \"\u002Fpath\u002Fto\u002Fdump.sql\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:m},children:[{type:b,value:C}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"DUMP_PATH="}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"1"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"CONTAINER="}]},{type:a,tag:c,props:{class:n},children:[{type:b,value:"\"db\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"USER=root"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"PASSWORD=password"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"DB=database"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"cat "}]},{type:a,tag:c,props:{class:n},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"DUMP_PATH"}]},{type:a,tag:c,props:{class:n},children:[{type:b,value:D}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:"ct-d978b6"},children:[{type:b,value:"|"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" docker "}]},{type:a,tag:c,props:{class:"ct-4dc312"},children:[{type:b,value:"exec"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" -i "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"CONTAINER"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" mysql -u"}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"USER"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" -p"}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"PASSWORD"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"DB"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-4dc312{color:#79C0FF}.ct-d978b6{color:#FF7B72}.ct-adb761{color:#A5D6FF}.ct-38695f{color:#C9D1D9}.ct-3f3bb1{color:#C9D1D9}.ct-8eeb74{color:#C9D1D9}.ct-772b12{color:#8B949E}.light .ct-772b12{color:#93A1A1}.light .ct-8eeb74{color:#657B83}.light .ct-3f3bb1{color:#859900}.light .ct-38695f{color:#268BD2}.light .ct-adb761{color:#2AA198}.light .ct-d978b6{color:#859900}.light .ct-4dc312{color:#268BD2}"}]}],toc:{title:l,searchDepth:F,depth:F,links:[]}},_type:"markdown",_id:"content:Docker:Seed dump inside docker.md",_source:"content",_file:"Docker\u002FSeed dump inside docker.md",_extension:"md"}},prerenderedAt:1668068045901}}("element","text","span","ct-8eeb74","line","ct-3f3bb1","$","ct-38695f","code",false,"#####\n# usage: .\u002Fscript.sh \"\u002Fpath\u002Fto\u002Fdump.sql\"\n#####\n\nDUMP_PATH=$1\nCONTAINER=\"db\"\nUSER=root\nPASSWORD=password\nDB=database\n\ncat \"$DUMP_PATH\" | docker exec -i $CONTAINER mysql -u$USER -p$PASSWORD $DB\n","","ct-772b12","ct-adb761","Seed Dump Inside Docker","\u002Fdocker\u002Fseed-dump-inside-docker","root","p","If you need to seed ","code-inline",".sql"," dump in #docker container, just run this command. Also you can try to ","a","\u002Flinux\u002FRsync%20file%20with%20SSH","rsync file with SSH"," to get it from remote host.","shell","pre","#####","\""," ",2))
\ No newline at end of file
diff --git a/docker/seed-dump-inside-docker/index.html b/docker/seed-dump-inside-docker/index.html
index a71a8f7..dfbb8e2 100644
--- a/docker/seed-dump-inside-docker/index.html
+++ b/docker/seed-dump-inside-docker/index.html
@@ -1,6 +1,6 @@
-Seed Dump Inside Docker • Obsidian Garden
-
Seed Dump Inside Docker
If you need to seed .sql dump in #docker container, just run this command. Also you can try to rsync file with SSH to get it from remote host.
\ No newline at end of file
diff --git a/docker/wait-for-mysql/_payload.js b/docker/wait-for-mysql/_payload.js
index ee72806..115409d 100644
--- a/docker/wait-for-mysql/_payload.js
+++ b/docker/wait-for-mysql/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:z,_path:A},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-LRHpXC9dvS":{_path:A,_dir:"docker",_draft:r,_partial:r,_locale:"en",_empty:r,title:z,description:"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections",excerpt:{type:B,children:[{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:C,rel:[D]},children:[{type:c,value:E}]},{type:c,value:F}]},{type:a,tag:i,props:{},children:[{type:c,value:G}]},{type:a,tag:i,props:{},children:[{type:c,value:H},{type:a,tag:I,props:{},children:[{type:c,value:J}]},{type:c,value:K}]},{type:a,tag:n,props:{code:s,language:L},children:[{type:a,tag:M,props:{},children:[{type:a,tag:n,props:{__ignoreMap:t},children:[{type:c,value:s}]}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:N},children:[{type:c,value:O}]}]}]},body:{type:B,children:[{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:C,rel:[D]},children:[{type:c,value:E}]},{type:c,value:F}]},{type:a,tag:i,props:{},children:[{type:c,value:G}]},{type:a,tag:i,props:{},children:[{type:c,value:H},{type:a,tag:I,props:{},children:[{type:c,value:J}]},{type:c,value:K}]},{type:a,tag:n,props:{code:s,language:L},children:[{type:a,tag:M,props:{},children:[{type:a,tag:n,props:{__ignoreMap:t},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:u},children:[{type:c,value:"# Waits for mysql to become actually available"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:"ct-70b749"},children:[{type:c,value:"wait_for_mysql"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"() {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" query="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"SELECT count(*) FROM users\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" timeout=180 "}]},{type:a,tag:b,props:{class:u},children:[{type:c,value:"# 3 minutes limit"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i=0"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"while"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"!"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" docker "}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"exec"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" -it "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" mysql --user="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"2"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"query"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"do"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" sleep 1"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"$(("}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"+"}]},{type:a,tag:b,props:{class:"ct-26517c"},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"))"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"if"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" [[ "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"-ge"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"timeout"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ]]"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"then"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"echo"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"[Error] can't properly query MySQL after "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" secs\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"exit"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" 1"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"fi"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"done"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:u},children:[{type:c,value:"# usage: wait_for_mysql miin-mysql-dev root password database"}]}]}]}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:N},children:[{type:c,value:O}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-26517c{color:#79C0FF}.ct-c3bb0d{color:#C9D1D9}.ct-e55956{color:#C9D1D9}.ct-e57ca8{color:#79C0FF}.ct-1fbf9b{color:#FF7B72}.ct-a50f05{color:#A5D6FF}.ct-5ccace{color:#C9D1D9}.ct-70b749{color:#D2A8FF}.ct-4a8507{color:#8B949E}.light .ct-4a8507{color:#93A1A1}.light .ct-70b749{color:#268BD2}.light .ct-5ccace{color:#657B83}.light .ct-a50f05{color:#2AA198}.light .ct-1fbf9b{color:#859900}.light .ct-e57ca8{color:#268BD2}.light .ct-e55956{color:#859900}.light .ct-c3bb0d{color:#268BD2}.light .ct-26517c{color:#D33682}"}]}],toc:{title:t,searchDepth:S,depth:S,links:[]}},_type:"markdown",_id:"content:Docker:Wait for mysql.md",_source:"content",_file:"Docker\u002FWait for mysql.md",_extension:"md"}},prerenderedAt:1667989032618}}("element","span","text","ct-5ccace","line","ct-a50f05","ct-1fbf9b","ct-e55956","p","\"","ct-c3bb0d"," ","a","code"," ","$","}",false,"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 \u003E\u002Fdev\u002Fnull 2\u003E&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","","ct-4a8507","ct-e57ca8",";","i","${","Wait For Mysql","\u002Fdocker\u002Fwait-for-mysql","root","https:\u002F\u002Fgithub.com\u002Fvishnubob\u002Fwait-for-it","nofollow","wait-for-it.sh"," doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections","This script waits for first successful query from database or exits with non-zero status after timeout.","Don't forget to change ","code-inline","$query"," for the actually working one.","shell","pre","Wait%20for%20redis","Wait for redis","1"," "," ",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:z,_path:A},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-LRHpXC9dvS":{_path:A,_dir:"docker",_draft:r,_partial:r,_locale:"en",_empty:r,title:z,description:"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections",excerpt:{type:B,children:[{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:C,rel:[D]},children:[{type:c,value:E}]},{type:c,value:F}]},{type:a,tag:i,props:{},children:[{type:c,value:G}]},{type:a,tag:i,props:{},children:[{type:c,value:H},{type:a,tag:I,props:{},children:[{type:c,value:J}]},{type:c,value:K}]},{type:a,tag:n,props:{code:s,language:L},children:[{type:a,tag:M,props:{},children:[{type:a,tag:n,props:{__ignoreMap:t},children:[{type:c,value:s}]}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:N},children:[{type:c,value:O}]}]}]},body:{type:B,children:[{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:C,rel:[D]},children:[{type:c,value:E}]},{type:c,value:F}]},{type:a,tag:i,props:{},children:[{type:c,value:G}]},{type:a,tag:i,props:{},children:[{type:c,value:H},{type:a,tag:I,props:{},children:[{type:c,value:J}]},{type:c,value:K}]},{type:a,tag:n,props:{code:s,language:L},children:[{type:a,tag:M,props:{},children:[{type:a,tag:n,props:{__ignoreMap:t},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:u},children:[{type:c,value:"# Waits for mysql to become actually available"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:"ct-5bdad6"},children:[{type:c,value:"wait_for_mysql"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"() {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" query="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"SELECT count(*) FROM users\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" timeout=180 "}]},{type:a,tag:b,props:{class:u},children:[{type:c,value:"# 3 minutes limit"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i=0"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"while"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"!"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" docker "}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"exec"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" -it "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" mysql --user="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"2"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" -e "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"query"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"do"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" sleep 1"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i="}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"$(("}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"+"}]},{type:a,tag:b,props:{class:"ct-bc3d47"},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"))"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"if"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" [[ "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"-ge"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"timeout"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ]]"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"then"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"echo"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"[Error] can't properly query MySQL after "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" secs\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:v},children:[{type:c,value:"exit"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" 1"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"fi"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"done"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:u},children:[{type:c,value:"# usage: wait_for_mysql miin-mysql-dev root password database"}]}]}]}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:m,props:{href:N},children:[{type:c,value:O}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-bc3d47{color:#79C0FF}.ct-e4c0f5{color:#C9D1D9}.ct-a7151b{color:#C9D1D9}.ct-a7fb56{color:#79C0FF}.ct-8dc176{color:#FF7B72}.ct-2c4b57{color:#A5D6FF}.ct-e9b20a{color:#C9D1D9}.ct-5bdad6{color:#D2A8FF}.ct-8bfaab{color:#8B949E}.light .ct-8bfaab{color:#93A1A1}.light .ct-5bdad6{color:#268BD2}.light .ct-e9b20a{color:#657B83}.light .ct-2c4b57{color:#2AA198}.light .ct-8dc176{color:#859900}.light .ct-a7fb56{color:#268BD2}.light .ct-a7151b{color:#859900}.light .ct-e4c0f5{color:#268BD2}.light .ct-bc3d47{color:#D33682}"}]}],toc:{title:t,searchDepth:S,depth:S,links:[]}},_type:"markdown",_id:"content:Docker:Wait for mysql.md",_source:"content",_file:"Docker\u002FWait for mysql.md",_extension:"md"}},prerenderedAt:1668068045931}}("element","span","text","ct-e9b20a","line","ct-2c4b57","ct-8dc176","ct-a7151b","p","\"","ct-e4c0f5"," ","a","code"," ","$","}",false,"# Waits for mysql to become actually available\nwait_for_mysql() {\n query=\"SELECT count(*) FROM users\"\n \n timeout=180 # 3 minutes limit\n i=0\n \n while ! docker exec -it \"$1\" mysql --user=\"$2\" --password=\"$3\" -e \"$query\" $4 \u003E\u002Fdev\u002Fnull 2\u003E&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly query MySQL after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_mysql miin-mysql-dev root password database\n","","ct-8bfaab","ct-a7fb56",";","i","${","Wait For Mysql","\u002Fdocker\u002Fwait-for-mysql","root","https:\u002F\u002Fgithub.com\u002Fvishnubob\u002Fwait-for-it","nofollow","wait-for-it.sh"," doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections","This script waits for first successful query from database or exits with non-zero status after timeout.","Don't forget to change ","code-inline","$query"," for the actually working one.","shell","pre","Wait%20for%20redis","Wait for redis","1"," "," ",2))
\ No newline at end of file
diff --git a/docker/wait-for-mysql/index.html b/docker/wait-for-mysql/index.html
index 9f7a87e..7668fbb 100644
--- a/docker/wait-for-mysql/index.html
+++ b/docker/wait-for-mysql/index.html
@@ -1,6 +1,6 @@
-Wait For Mysql • Obsidian Garden
-
Wait For Mysql
wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections
This script waits for first successful query from database or exits with non-zero status after timeout.
Don't forget to change $query for the actually working one.
# Waits for mysql to become actually availablewait_for_mysql() { query="SELECT count(*) FROM users" timeout=180 # 3 minutes limit i=0while! docker exec -it "$1" mysql --user="$2"" -e "$query"do sleep 1; i=$(($i+1))if [[ ${i}-ge${timeout} ]];thenecho"[Error] can't properly query MySQL after ${i} secs"exit 1;fidone}# usage: wait_for_mysql miin-mysql-dev root password database
wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before #mysql is ready to accept connections
This script waits for first successful query from database or exits with non-zero status after timeout.
Don't forget to change $query for the actually working one.
# Waits for mysql to become actually availablewait_for_mysql() { query="SELECT count(*) FROM users" timeout=180 # 3 minutes limit i=0while! docker exec -it "$1" mysql --user="$2"" -e "$query"do sleep 1; i=$(($i+1))if [[ ${i}-ge${timeout} ]];thenecho"[Error] can't properly query MySQL after ${i} secs"exit 1;fidone}# usage: wait_for_mysql miin-mysql-dev root password database
\ No newline at end of file
diff --git a/docker/wait-for-redis/_payload.js b/docker/wait-for-redis/_payload.js
index 721eedd..c565d61 100644
--- a/docker/wait-for-redis/_payload.js
+++ b/docker/wait-for-redis/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:y,_path:z}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-Wzyty7vOmU":{_path:z,_dir:"docker",_draft:p,_partial:p,_locale:"en",_empty:p,title:y,description:"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections",excerpt:{type:A,children:[{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:B,rel:[C]},children:[{type:c,value:D}]},{type:c,value:E}]},{type:a,tag:j,props:{},children:[{type:c,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:c,value:q}]}]}]},{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:I},children:[{type:c,value:J}]}]}]},body:{type:A,children:[{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:B,rel:[C]},children:[{type:c,value:D}]},{type:c,value:E}]},{type:a,tag:j,props:{},children:[{type:c,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:"# Waits for redis to become actually available"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:"ct-9439e0"},children:[{type:c,value:"wait_for_redis"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"() {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" timeout=180 "}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:"# 3 minutes"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i=0"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"while"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"!"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" docker "}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"exec"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" -it "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" redis-cli -h localhost -p 6379 -a "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"2"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ping "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"|"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" grep "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"PONG\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\u003E"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fdev\u002Fnull "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"2\u003E&1;"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"do"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" sleep 1"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i="}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"$(("}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"+"}]},{type:a,tag:b,props:{class:"ct-203c5d"},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"))"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"if"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" [[ "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"-ge"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"timeout"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ]]"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"then"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"echo"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"[Error] can't properly ping Redis container after "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" secs\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"exit"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" 1"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"fi"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"done"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:"# usage: wait_for_redis miin-redis-dev password"}]}]}]}]}]},{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:I},children:[{type:c,value:J}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-203c5d{color:#79C0FF}.ct-0fe3ba{color:#C9D1D9}.ct-a015fb{color:#C9D1D9}.ct-95138e{color:#A5D6FF}.ct-db192f{color:#79C0FF}.ct-222421{color:#FF7B72}.ct-26852d{color:#C9D1D9}.ct-9439e0{color:#D2A8FF}.ct-63ea10{color:#8B949E}.light .ct-63ea10{color:#93A1A1}.light .ct-9439e0{color:#268BD2}.light .ct-26852d{color:#657B83}.light .ct-222421{color:#859900}.light .ct-db192f{color:#268BD2}.light .ct-95138e{color:#2AA198}.light .ct-a015fb{color:#859900}.light .ct-0fe3ba{color:#268BD2}.light .ct-203c5d{color:#D33682}"}]}],toc:{title:r,searchDepth:O,depth:O,links:[]}},_type:"markdown",_id:"content:Docker:Wait for redis.md",_source:"content",_file:"Docker\u002FWait for redis.md",_extension:"md"}},prerenderedAt:1667989032663}}("element","span","text","ct-26852d","line","ct-222421","ct-95138e","ct-a015fb"," ","p","ct-0fe3ba","a","code","\"","}",false,"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" \u003E\u002Fdev\u002Fnull 2\u003E&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","","ct-63ea10","ct-db192f","$",";","i","${","Wait For Redis","\u002Fdocker\u002Fwait-for-redis","root","https:\u002F\u002Fgithub.com\u002Fvishnubob\u002Fwait-for-it","nofollow","wait-for-it.sh"," doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections","This script waits for first successful ping or exits with non-zero status after 3 minutes.","shell","pre","Wait%20for%20mysql","Wait for mysql"," ","1"," "," ",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:y,_path:z}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-Wzyty7vOmU":{_path:z,_dir:"docker",_draft:p,_partial:p,_locale:"en",_empty:p,title:y,description:"wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections",excerpt:{type:A,children:[{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:B,rel:[C]},children:[{type:c,value:D}]},{type:c,value:E}]},{type:a,tag:j,props:{},children:[{type:c,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:c,value:q}]}]}]},{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:I},children:[{type:c,value:J}]}]}]},body:{type:A,children:[{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:B,rel:[C]},children:[{type:c,value:D}]},{type:c,value:E}]},{type:a,tag:j,props:{},children:[{type:c,value:F}]},{type:a,tag:m,props:{code:q,language:G},children:[{type:a,tag:H,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:"# Waits for redis to become actually available"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:"ct-5a016a"},children:[{type:c,value:"wait_for_redis"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"() {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" timeout=180 "}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:"# 3 minutes"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i=0"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"while"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"!"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" docker "}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"exec"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" -it "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" redis-cli -h localhost -p 6379 -a "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"2"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ping "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"|"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" grep "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"PONG\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\u003E"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fdev\u002Fnull "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"2\u003E&1;"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"do"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" sleep 1"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" i="}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"$(("}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"+"}]},{type:a,tag:b,props:{class:"ct-9ea1e0"},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"))"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"if"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" [[ "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"-ge"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"timeout"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ]]"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"then"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"echo"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"[Error] can't properly ping Redis container after "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" secs\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:"exit"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" 1"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"fi"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"done"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:o}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:"# usage: wait_for_redis miin-redis-dev password"}]}]}]}]}]},{type:a,tag:j,props:{},children:[{type:a,tag:l,props:{href:I},children:[{type:c,value:J}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-9ea1e0{color:#79C0FF}.ct-b588f8{color:#C9D1D9}.ct-560d90{color:#C9D1D9}.ct-daf8c0{color:#A5D6FF}.ct-88c314{color:#79C0FF}.ct-5c4ed1{color:#FF7B72}.ct-d05dd6{color:#C9D1D9}.ct-5a016a{color:#D2A8FF}.ct-e2a55f{color:#8B949E}.light .ct-e2a55f{color:#93A1A1}.light .ct-5a016a{color:#268BD2}.light .ct-d05dd6{color:#657B83}.light .ct-5c4ed1{color:#859900}.light .ct-88c314{color:#268BD2}.light .ct-daf8c0{color:#2AA198}.light .ct-560d90{color:#859900}.light .ct-b588f8{color:#268BD2}.light .ct-9ea1e0{color:#D33682}"}]}],toc:{title:r,searchDepth:O,depth:O,links:[]}},_type:"markdown",_id:"content:Docker:Wait for redis.md",_source:"content",_file:"Docker\u002FWait for redis.md",_extension:"md"}},prerenderedAt:1668068045968}}("element","span","text","ct-d05dd6","line","ct-5c4ed1","ct-daf8c0","ct-560d90"," ","p","ct-b588f8","a","code","\"","}",false,"# Waits for redis to become actually available\nwait_for_redis() {\n timeout=180 # 3 minutes\n i=0\n while ! docker exec -it \"$1\" redis-cli -h localhost -p 6379 -a \"$2\" ping | grep \"PONG\" \u003E\u002Fdev\u002Fnull 2\u003E&1; do\n sleep 1;\n\n i=$(($i+1))\n if [[ ${i} -ge ${timeout} ]]; then\n echo \"[Error] can't properly ping Redis container after ${i} secs\"\n exit 1;\n fi\n done\n}\n\n# usage: wait_for_redis miin-redis-dev password\n","","ct-e2a55f","ct-88c314","$",";","i","${","Wait For Redis","\u002Fdocker\u002Fwait-for-redis","root","https:\u002F\u002Fgithub.com\u002Fvishnubob\u002Fwait-for-it","nofollow","wait-for-it.sh"," doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections","This script waits for first successful ping or exits with non-zero status after 3 minutes.","shell","pre","Wait%20for%20mysql","Wait for mysql"," ","1"," "," ",2))
\ No newline at end of file
diff --git a/docker/wait-for-redis/index.html b/docker/wait-for-redis/index.html
index 95a78c5..5bbb239 100644
--- a/docker/wait-for-redis/index.html
+++ b/docker/wait-for-redis/index.html
@@ -1,6 +1,6 @@
-Wait For Redis • Obsidian Garden
-
Wait For Redis
wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections
This script waits for first successful ping or exits with non-zero status after 3 minutes.
# Waits for redis to become actually availablewait_for_redis() { timeout=180 # 3 minutes i=0while! docker exec -it "$1" redis-cli -h localhost -p 6379 -a "$2" ping | grep "PONG">/dev/null 2>&1;do sleep 1; i=$(($i+1))if [[ ${i}-ge${timeout} ]];thenecho"[Error] can't properly ping Redis container after ${i} secs"exit 1;fidone}# usage: wait_for_redis miin-redis-dev password
wait-for-it.sh doing a great job of waiting for different services to become alive, but on #MacOs #docker is binding port on container start, seconds before redis is ready to accept connections
This script waits for first successful ping or exits with non-zero status after 3 minutes.
# Waits for redis to become actually availablewait_for_redis() { timeout=180 # 3 minutes i=0while! docker exec -it "$1" redis-cli -h localhost -p 6379 -a "$2" ping | grep "PONG">/dev/null 2>&1;do sleep 1; i=$(($i+1))if [[ ${i}-ge${timeout} ]];thenecho"[Error] can't properly ping Redis container after ${i} secs"exit 1;fidone}# usage: wait_for_redis miin-redis-dev password
\ No newline at end of file
diff --git a/frontend/react-native/oauth2-login/_payload.js b/frontend/react-native/oauth2-login/_payload.js
index 277a9ef..316913f 100644
--- a/frontend/react-native/oauth2-login/_payload.js
+++ b/frontend/react-native/oauth2-login/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:U,_path:V},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-zuvbG5OO4q":{_path:V,_dir:"react-native",_draft:A,_partial:A,_locale:"en",_empty:A,title:U,description:B,excerpt:{type:W,children:[{type:a,tag:l,props:{},children:[{type:b,value:B}]},{type:a,tag:r,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:l,props:{},children:[{type:b,value:X},{type:a,tag:m,props:{href:s},children:[{type:b,value:s}]},{type:b,value:Y},{type:a,tag:Z,props:{},children:[{type:b,value:_}]},{type:b,value:E}]},{type:a,tag:t,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:k,props:{code:H,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:b,value:H}]}]}]},{type:a,tag:t,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:k,props:{code:K,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:b,value:K}]}]}]},{type:a,tag:r,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:$,rel:[w]},children:[{type:b,value:aa}]},{type:b,value:ab},{type:a,tag:m,props:{href:ac,rel:[w]},children:[{type:b,value:ad}]},{type:b,value:ae}]}]},body:{type:W,children:[{type:a,tag:l,props:{},children:[{type:b,value:B}]},{type:a,tag:r,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:l,props:{},children:[{type:b,value:X},{type:a,tag:m,props:{href:s},children:[{type:b,value:s}]},{type:b,value:Y},{type:a,tag:Z,props:{},children:[{type:b,value:_}]},{type:b,value:E}]},{type:a,tag:t,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:k,props:{code:H,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:i},children:[{type:b,value:"import"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" { "}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:O}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" } "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:"from"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'react-native-app-auth'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:af}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:Q},children:[{type:b,value:"\u002F\u002F ..."}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:R}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:ag}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:S},children:[{type:b,value:O}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:ah}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" issuer: "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'https:\u002F\u002Faccounts.google.com'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ai}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aj}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:af}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}.apps.googleusercontent.com`"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ak}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"`com.yourapp:\u002Foauth2redirect\u002Fgoogle`"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:al}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'openid'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:am}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'profile'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:an}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ao}]},{type:a,tag:c,props:{class:ap},children:[{type:b,value:aq}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ar}]}]}]}]}]},{type:a,tag:t,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:k,props:{code:K,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:as}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"; "}]},{type:a,tag:c,props:{class:Q},children:[{type:b,value:"\u002F\u002F better hide it somehow"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'com.yourapp'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:R}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:ag}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:S},children:[{type:b,value:O}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:ah}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" serviceConfiguration: {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" authorizationEndpoint: "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"`https:\u002F\u002Foauth.yandex.ru\u002Fauthorize?response_type=code&client_id=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}&redirect_uri=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:at}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:Q},children:[{type:b,value:"\u002F\u002F TODO: replace it with your own backend to secure client_secret:"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" tokenEndpoint: "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"`https:\u002F\u002Foauth.yandex.ru\u002Ftoken?grant_type=authorization_code&client_id=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}&client_secret=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:as}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}`"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" },"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ai}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ak}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aj}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:at}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:al}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'login:info'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:am}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'login:avatar'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:an}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ao}]},{type:a,tag:c,props:{class:ap},children:[{type:b,value:aq}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ar}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:S},children:[{type:b,value:"callback"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"("}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:R}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:"accessToken"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:");"}]}]}]}]}]},{type:a,tag:r,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:$,rel:[w]},children:[{type:b,value:aa}]},{type:b,value:ab},{type:a,tag:m,props:{href:ac,rel:[w]},children:[{type:b,value:ad}]},{type:b,value:ae}]},{type:a,tag:"style",children:[{type:b,value:".ct-04bda7{color:#79C0FF}.ct-f2d25a{color:#D2A8FF}.ct-6090e9{color:#8B949E}.ct-eff6f2{color:#79C0FF}.ct-6fad42{color:#FF7B72}.ct-a5991f{color:#A5D6FF}.ct-a522f0{color:#C9D1D9}.ct-b99985{color:#C9D1D9}.ct-73c90c{color:#FF7B72}.light .ct-73c90c{color:#859900}.light .ct-b99985{color:#657B83}.light .ct-a522f0{color:#268BD2}.light .ct-a5991f{color:#2AA198}.light .ct-6fad42{color:#073642}.light .ct-eff6f2{color:#268BD2}.light .ct-6090e9{color:#93A1A1}.light .ct-f2d25a{color:#268BD2}.light .ct-04bda7{color:#B58900}"}]}],toc:{title:q,searchDepth:z,depth:z,links:[{id:C,depth:z,text:D,children:[{id:F,depth:au,text:G},{id:I,depth:au,text:J}]},{id:L,depth:z,text:M}]}},_type:"markdown",_id:"content:Frontend:React Native:OAuth2 login.md",_source:"content",_file:"Frontend\u002FReact Native\u002FOAuth2 login.md",_extension:"md"}},prerenderedAt:1667989032700}}("element","text","span","ct-b99985","line"," ","ct-a5991f","ct-eff6f2","ct-73c90c",",","code","p","a","ct-6fad42","const","=","","h2","react-native-app-auth","h3","typescript","pre","nofollow",";","YANDEX_OAUTH_CLIENT",2,false,"Use #oauth2 login with React-Native","common-oauth2-providers","Common OAuth2 providers",".","example-for-google","Example for #Google","import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n\u002F\u002F ...\nconst authState = await authorize({\n issuer: 'https:\u002F\u002Faccounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:\u002Foauth2redirect\u002Fgoogle`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","example-for-yandex","Example for #Yandex","const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; \u002F\u002F better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https:\u002F\u002Foauth.yandex.ru\u002Fauthorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:\u002Foauth2redirect`,\n \u002F\u002F TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https:\u002F\u002Foauth.yandex.ru\u002Ftoken?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:\u002Foauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","apple-id-login","Apple ID login","ct-a522f0","authorize","'...'","ct-6090e9","authState","ct-f2d25a","APP_ID","OAuth2 Login","\u002Ffrontend\u002Freact-native\u002Foauth2-login","root","Can be handled by "," by redirecting to url ","code-inline","com.yourapp:\u002F\u002Foauth2provider","https:\u002F\u002Fgithub.com\u002Finvertase\u002Freact-native-apple-authentication","react-native-apple-authentication"," has its own ","https:\u002F\u002Fgithub.com\u002Finvertase\u002Freact-native-apple-authentication\u002Ftree\u002Fmain\u002Fdocs","documentation"," on setting up OAuth using Apple ID.","GOOGLE_OAUTH_CLIENT","await","({"," clientId: ","`${"," redirectUrl: "," scopes: [",", ","],"," dangerouslyAllowInsecureHttpRequests: ","ct-04bda7","true","});","YANDEX_OAUTH_SECRET","}:\u002Foauth2redirect`",3))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:U,_path:V},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-zuvbG5OO4q":{_path:V,_dir:"react-native",_draft:A,_partial:A,_locale:"en",_empty:A,title:U,description:B,excerpt:{type:W,children:[{type:a,tag:l,props:{},children:[{type:b,value:B}]},{type:a,tag:r,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:l,props:{},children:[{type:b,value:X},{type:a,tag:m,props:{href:s},children:[{type:b,value:s}]},{type:b,value:Y},{type:a,tag:Z,props:{},children:[{type:b,value:_}]},{type:b,value:E}]},{type:a,tag:t,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:k,props:{code:H,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:b,value:H}]}]}]},{type:a,tag:t,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:k,props:{code:K,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:b,value:K}]}]}]},{type:a,tag:r,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:$,rel:[w]},children:[{type:b,value:aa}]},{type:b,value:ab},{type:a,tag:m,props:{href:ac,rel:[w]},children:[{type:b,value:ad}]},{type:b,value:ae}]}]},body:{type:W,children:[{type:a,tag:l,props:{},children:[{type:b,value:B}]},{type:a,tag:r,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:l,props:{},children:[{type:b,value:X},{type:a,tag:m,props:{href:s},children:[{type:b,value:s}]},{type:b,value:Y},{type:a,tag:Z,props:{},children:[{type:b,value:_}]},{type:b,value:E}]},{type:a,tag:t,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:k,props:{code:H,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:i},children:[{type:b,value:"import"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" { "}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:O}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" } "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:"from"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'react-native-app-auth'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:af}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:Q},children:[{type:b,value:"\u002F\u002F ..."}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:R}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:ag}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:S},children:[{type:b,value:O}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:ah}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" issuer: "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'https:\u002F\u002Faccounts.google.com'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ai}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aj}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:af}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}.apps.googleusercontent.com`"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ak}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"`com.yourapp:\u002Foauth2redirect\u002Fgoogle`"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:al}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'openid'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:am}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'profile'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:an}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ao}]},{type:a,tag:c,props:{class:ap},children:[{type:b,value:aq}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ar}]}]}]}]}]},{type:a,tag:t,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:k,props:{code:K,language:u},children:[{type:a,tag:v,props:{},children:[{type:a,tag:k,props:{__ignoreMap:q},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:as}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:P}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"; "}]},{type:a,tag:c,props:{class:Q},children:[{type:b,value:"\u002F\u002F better hide it somehow"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'com.yourapp'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:x}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:n},children:[{type:b,value:o}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:R}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:ag}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:S},children:[{type:b,value:O}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:ah}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" serviceConfiguration: {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" authorizationEndpoint: "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"`https:\u002F\u002Foauth.yandex.ru\u002Fauthorize?response_type=code&client_id=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}&redirect_uri=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:at}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:Q},children:[{type:b,value:"\u002F\u002F TODO: replace it with your own backend to secure client_secret:"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" tokenEndpoint: "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"`https:\u002F\u002Foauth.yandex.ru\u002Ftoken?grant_type=authorization_code&client_id=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}&client_secret=${"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:as}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"}`"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" },"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ai}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:y}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ak}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:aj}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:at}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:al}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'login:info'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:am}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:"'login:avatar'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:an}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ao}]},{type:a,tag:c,props:{class:ap},children:[{type:b,value:aq}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:j}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:ar}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:S},children:[{type:b,value:"callback"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"("}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:R}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:E}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:"accessToken"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:");"}]}]}]}]}]},{type:a,tag:r,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:$,rel:[w]},children:[{type:b,value:aa}]},{type:b,value:ab},{type:a,tag:m,props:{href:ac,rel:[w]},children:[{type:b,value:ad}]},{type:b,value:ae}]},{type:a,tag:"style",children:[{type:b,value:".ct-9e7db7{color:#79C0FF}.ct-e3914c{color:#D2A8FF}.ct-c83c0b{color:#8B949E}.ct-1b9852{color:#79C0FF}.ct-16ef2e{color:#FF7B72}.ct-08ed27{color:#A5D6FF}.ct-6736c0{color:#C9D1D9}.ct-f88891{color:#C9D1D9}.ct-a8a6b1{color:#FF7B72}.light .ct-a8a6b1{color:#859900}.light .ct-f88891{color:#657B83}.light .ct-6736c0{color:#268BD2}.light .ct-08ed27{color:#2AA198}.light .ct-16ef2e{color:#073642}.light .ct-1b9852{color:#268BD2}.light .ct-c83c0b{color:#93A1A1}.light .ct-e3914c{color:#268BD2}.light .ct-9e7db7{color:#B58900}"}]}],toc:{title:q,searchDepth:z,depth:z,links:[{id:C,depth:z,text:D,children:[{id:F,depth:au,text:G},{id:I,depth:au,text:J}]},{id:L,depth:z,text:M}]}},_type:"markdown",_id:"content:Frontend:React Native:OAuth2 login.md",_source:"content",_file:"Frontend\u002FReact Native\u002FOAuth2 login.md",_extension:"md"}},prerenderedAt:1668068046012}}("element","text","span","ct-f88891","line"," ","ct-08ed27","ct-1b9852","ct-a8a6b1",",","code","p","a","ct-16ef2e","const","=","","h2","react-native-app-auth","h3","typescript","pre","nofollow",";","YANDEX_OAUTH_CLIENT",2,false,"Use #oauth2 login with React-Native","common-oauth2-providers","Common OAuth2 providers",".","example-for-google","Example for #Google","import { authorize } from 'react-native-app-auth';\n\nconst GOOGLE_OAUTH_CLIENT = '...';\n\n\u002F\u002F ...\nconst authState = await authorize({\n issuer: 'https:\u002F\u002Faccounts.google.com',\n clientId: `${GOOGLE_OAUTH_CLIENT}.apps.googleusercontent.com`,\n redirectUrl: `com.yourapp:\u002Foauth2redirect\u002Fgoogle`,\n scopes: ['openid', 'profile'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n","example-for-yandex","Example for #Yandex","const YANDEX_OAUTH_CLIENT = '...';\nconst YANDEX_OAUTH_SECRET = '...'; \u002F\u002F better hide it somehow\nconst APP_ID = 'com.yourapp';\n\nconst authState = await authorize({\n serviceConfiguration: {\n authorizationEndpoint: `https:\u002F\u002Foauth.yandex.ru\u002Fauthorize?response_type=code&client_id=${YANDEX_OAUTH_CLIENT}&redirect_uri=${APP_ID}:\u002Foauth2redirect`,\n \u002F\u002F TODO: replace it with your own backend to secure client_secret:\n tokenEndpoint: `https:\u002F\u002Foauth.yandex.ru\u002Ftoken?grant_type=authorization_code&client_id=${YANDEX_OAUTH_CLIENT}&client_secret=${YANDEX_OAUTH_SECRET}`,\n },\n clientId: YANDEX_OAUTH_CLIENT,\n redirectUrl: `${APP_ID}:\u002Foauth2redirect`,\n scopes: ['login:info', 'login:avatar'],\n dangerouslyAllowInsecureHttpRequests: true,\n});\n\ncallback(authState.accessToken);\n","apple-id-login","Apple ID login","ct-6736c0","authorize","'...'","ct-c83c0b","authState","ct-e3914c","APP_ID","OAuth2 Login","\u002Ffrontend\u002Freact-native\u002Foauth2-login","root","Can be handled by "," by redirecting to url ","code-inline","com.yourapp:\u002F\u002Foauth2provider","https:\u002F\u002Fgithub.com\u002Finvertase\u002Freact-native-apple-authentication","react-native-apple-authentication"," has its own ","https:\u002F\u002Fgithub.com\u002Finvertase\u002Freact-native-apple-authentication\u002Ftree\u002Fmain\u002Fdocs","documentation"," on setting up OAuth using Apple ID.","GOOGLE_OAUTH_CLIENT","await","({"," clientId: ","`${"," redirectUrl: "," scopes: [",", ","],"," dangerouslyAllowInsecureHttpRequests: ","ct-9e7db7","true","});","YANDEX_OAUTH_SECRET","}:\u002Foauth2redirect`",3))
\ No newline at end of file
diff --git a/frontend/react-native/oauth2-login/index.html b/frontend/react-native/oauth2-login/index.html
index 5194649..e622640 100644
--- a/frontend/react-native/oauth2-login/index.html
+++ b/frontend/react-native/oauth2-login/index.html
@@ -1,6 +1,6 @@
-OAuth2 Login • Obsidian Garden
-
\ No newline at end of file
diff --git a/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/_payload.js b/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/_payload.js
index dd653b6..5278b2a 100644
--- a/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/_payload.js
+++ b/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:$,_path:aa},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-Rv2z2spCBs":{_path:aa,_dir:"react-native",_draft:M,_partial:M,_locale:"en",_empty:M,title:$,description:"Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.",excerpt:{type:ab,children:[{type:a,tag:ac,props:{},children:[{type:c,value:ad},{type:a,tag:ae,props:{},children:[{type:c,value:N}]},{type:c,value:af}]},{type:a,tag:C,props:{code:O,language:ag},children:[{type:a,tag:ah,props:{},children:[{type:a,tag:C,props:{__ignoreMap:P},children:[{type:c,value:O}]}]}]}]},body:{type:ab,children:[{type:a,tag:ac,props:{},children:[{type:c,value:ad},{type:a,tag:ae,props:{},children:[{type:c,value:N}]},{type:c,value:af}]},{type:a,tag:C,props:{code:O,language:ag},children:[{type:a,tag:ah,props:{},children:[{type:a,tag:C,props:{__ignoreMap:P},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F interact() is doing some stuff, that changes FlatList scroll size"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:n},children:[{type:c,value:"type"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-d6f3ac"},children:[{type:c,value:ai}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" () "}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-12be29"},children:[{type:c,value:"void"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"; }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:x},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:aj},children:[{type:c,value:"SomeList"}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:"FC"}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:ai}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"\u003E "}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:" ({ "}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:" }) "}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F set it to `true` before interaction and back to `false` right after"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:i},children:[{type:c,value:" ("}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:"NativeSyntheticEvent"}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:"NativeScrollEvent"}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"\u003E) "}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"nativeEvent"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"contentOffset"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"y"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:al}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" [],"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:i},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-85ddd9"},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:aj},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"(("}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"_"}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:an},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:", "}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:an},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:") "}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"if"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"!"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:") {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"?."}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"scrollToOffset"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"({"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" offset: "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"+"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"-"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" animated: "}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:","}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" });"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }, []);"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F onInteraction wraps interaction to preserve scroll position"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:"onInteraction"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" () "}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:"true"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"();"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:at}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:at}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:"500"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:al}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ["}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"setSelectedSubThemes"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"],"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:"ct-0a347b"},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F ...required FlatList options"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"\u002F\u003E"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" )"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-0a347b{color:#FFA657}.ct-7a8bed{color:#79C0FF}.ct-85ddd9{color:#79C0FF}.ct-79eccc{color:#C9D1D9}.ct-4ce872{color:#79C0FF}.ct-51c814{color:#79C0FF}.ct-286615{color:#79C0FF}.ct-239076{color:#FFA657}.ct-cb4a15{color:#FFA657}.ct-97ed5c{color:#FF7B72}.ct-84cdd7{color:#D2A8FF}.ct-5370b0{color:#C9D1D9}.ct-1287c4{color:#FF7B72}.ct-12be29{color:#79C0FF}.ct-6a2abe{color:#D2A8FF}.ct-fd34a7{color:#FF7B72}.ct-d6f3ac{color:#FFA657}.ct-b7cc7c{color:#C9D1D9}.ct-158371{color:#FF7B72}.ct-ef8184{color:#8B949E}.light .ct-ef8184{color:#93A1A1}.light .ct-158371{color:#073642}.light .ct-b7cc7c{color:#657B83}.light .ct-d6f3ac{color:#268BD2}.light .ct-fd34a7{color:#859900}.light .ct-6a2abe{color:#268BD2}.light .ct-12be29{color:#859900}.light .ct-1287c4{color:#073642}.light .ct-5370b0{color:#657B83}.light .ct-84cdd7{color:#268BD2}.light .ct-97ed5c{color:#859900}.light .ct-cb4a15{color:#268BD2}.light .ct-239076{color:#657B83}.light .ct-286615{color:#268BD2}.light .ct-51c814{color:#D33682}.light .ct-4ce872{color:#B58900}.light .ct-79eccc{color:#268BD2}.light .ct-85ddd9{color:#268BD2}.light .ct-7a8bed{color:#859900}.light .ct-0a347b{color:#657B83}"}]}],toc:{title:P,searchDepth:av,depth:av,links:[]}},_type:"markdown",_id:"content:Frontend:React Native:Preserve FlatList scroll position in React Native.md",_source:"content",_file:"Frontend\u002FReact Native\u002FPreserve FlatList scroll position in React Native.md",_extension:"md"}},prerenderedAt:1667989032753}}("element","span","text","ct-b7cc7c","line"," ","ct-79eccc","ct-fd34a7","ct-5370b0","=","."," "," ","ct-158371","current","ct-6a2abe","=\u003E","const","ct-286615","ct-97ed5c"," {",";",":","ct-1287c4","(",");"," ","}","code","ct-ef8184","ct-cb4a15","ct-239076","ct-51c814","scrollHeight","shouldKeepScrollPosition","ct-4ce872","h","{",false,"FlatList","\u002F\u002F interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () =\u003E void; }\n\nconst SomeList: FC\u003CProps\u003E = ({ interact }) =\u003E {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n \u002F\u002F set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent\u003CNativeScrollEvent\u003E) =\u003E {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) =\u003E {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n \u002F\u002F onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () =\u003E {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() =\u003E {\n interact();\n }, 0);\n\n setTimeout(() =\u003E {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \u003CFlatList\n \u002F\u002F ...required FlatList options\n ref={ref}\n onContentSizeChange={onContentSizeChange}\n onRefresh={onRefresh}\n onScroll={onScroll}\n \u002F\u003E\n )\n}\n","","interact","\u003C","scrollPosition","useRef","0","false","onScroll","useCallback","onContentSizeChange"," (","ref","Preserve FlatList Scroll Position In React Native","\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native","root","p","Sometimes you need to keep scroll position of ","code-inline"," in React Native after some user interactions.","typescript","pre","Props","ct-84cdd7","event"," },"," );","ct-7a8bed","number","return","setTimeout","(() "," "," }, ","onRefresh",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:$,_path:aa},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-Rv2z2spCBs":{_path:aa,_dir:"react-native",_draft:M,_partial:M,_locale:"en",_empty:M,title:$,description:"Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.",excerpt:{type:ab,children:[{type:a,tag:ac,props:{},children:[{type:c,value:ad},{type:a,tag:ae,props:{},children:[{type:c,value:N}]},{type:c,value:af}]},{type:a,tag:C,props:{code:O,language:ag},children:[{type:a,tag:ah,props:{},children:[{type:a,tag:C,props:{__ignoreMap:P},children:[{type:c,value:O}]}]}]}]},body:{type:ab,children:[{type:a,tag:ac,props:{},children:[{type:c,value:ad},{type:a,tag:ae,props:{},children:[{type:c,value:N}]},{type:c,value:af}]},{type:a,tag:C,props:{code:O,language:ag},children:[{type:a,tag:ah,props:{},children:[{type:a,tag:C,props:{__ignoreMap:P},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F interact() is doing some stuff, that changes FlatList scroll size"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:n},children:[{type:c,value:"type"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-6c2b5b"},children:[{type:c,value:ai}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" () "}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-1d213f"},children:[{type:c,value:"void"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"; }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:x},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:aj},children:[{type:c,value:"SomeList"}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:"FC"}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:ai}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"\u003E "}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:" ({ "}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:" }) "}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F set it to `true` before interaction and back to `false` right after"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:i},children:[{type:c,value:" ("}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:"NativeSyntheticEvent"}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:E},children:[{type:c,value:"NativeScrollEvent"}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"\u003E) "}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"nativeEvent"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"contentOffset"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"y"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:al}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" [],"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:i},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-222587"},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:aj},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"(("}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"_"}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:an},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:", "}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:t},children:[{type:c,value:w}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:an},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:") "}]},{type:a,tag:b,props:{class:x},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"if"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"!"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:") {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"?."}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"scrollToOffset"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"({"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" offset: "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:S}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"+"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"-"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" animated: "}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:","}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" });"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }, []);"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F onInteraction wraps interaction to preserve scroll position"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:r}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:"onInteraction"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" () "}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:"true"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"();"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:at}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:u}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:J},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:at}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:"500"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:al}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ["}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"setSelectedSubThemes"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"],"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:"ct-4221fb"},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:D},children:[{type:c,value:"\u002F\u002F ...required FlatList options"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"\u002F\u003E"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" )"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-4221fb{color:#FFA657}.ct-c0d4f3{color:#79C0FF}.ct-222587{color:#79C0FF}.ct-7a2c79{color:#C9D1D9}.ct-82e7b0{color:#79C0FF}.ct-7c8979{color:#79C0FF}.ct-b2b766{color:#79C0FF}.ct-3eadb3{color:#FFA657}.ct-f00f39{color:#FFA657}.ct-46376e{color:#FF7B72}.ct-0527be{color:#D2A8FF}.ct-6780b2{color:#C9D1D9}.ct-560b8c{color:#FF7B72}.ct-1d213f{color:#79C0FF}.ct-123153{color:#D2A8FF}.ct-bdcddc{color:#FF7B72}.ct-6c2b5b{color:#FFA657}.ct-96a177{color:#C9D1D9}.ct-6ff8c4{color:#FF7B72}.ct-70d397{color:#8B949E}.light .ct-70d397{color:#93A1A1}.light .ct-6ff8c4{color:#073642}.light .ct-96a177{color:#657B83}.light .ct-6c2b5b{color:#268BD2}.light .ct-bdcddc{color:#859900}.light .ct-123153{color:#268BD2}.light .ct-1d213f{color:#859900}.light .ct-560b8c{color:#073642}.light .ct-6780b2{color:#657B83}.light .ct-0527be{color:#268BD2}.light .ct-46376e{color:#859900}.light .ct-f00f39{color:#268BD2}.light .ct-3eadb3{color:#657B83}.light .ct-b2b766{color:#268BD2}.light .ct-7c8979{color:#D33682}.light .ct-82e7b0{color:#B58900}.light .ct-7a2c79{color:#268BD2}.light .ct-222587{color:#268BD2}.light .ct-c0d4f3{color:#859900}.light .ct-4221fb{color:#657B83}"}]}],toc:{title:P,searchDepth:av,depth:av,links:[]}},_type:"markdown",_id:"content:Frontend:React Native:Preserve FlatList scroll position in React Native.md",_source:"content",_file:"Frontend\u002FReact Native\u002FPreserve FlatList scroll position in React Native.md",_extension:"md"}},prerenderedAt:1668068046060}}("element","span","text","ct-96a177","line"," ","ct-7a2c79","ct-bdcddc","ct-6780b2","=","."," "," ","ct-6ff8c4","current","ct-123153","=\u003E","const","ct-b2b766","ct-46376e"," {",";",":","ct-560b8c","(",");"," ","}","code","ct-70d397","ct-f00f39","ct-3eadb3","ct-7c8979","scrollHeight","shouldKeepScrollPosition","ct-82e7b0","h","{",false,"FlatList","\u002F\u002F interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () =\u003E void; }\n\nconst SomeList: FC\u003CProps\u003E = ({ interact }) =\u003E {\n const scrollPosition = useRef(0);\n const scrollHeight = useRef(0);\n \n \u002F\u002F set it to `true` before interaction and back to `false` right after\n const shouldKeepScrollPosition = useRef(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent\u003CNativeScrollEvent\u003E) =\u003E {\n scrollPosition.current = event.nativeEvent.contentOffset.y;\n },\n [],\n );\n\n const onContentSizeChange = useCallback((_: number, h: number) =\u003E {\n if (!shouldKeepScrollPosition.current) {\n scrollHeight.current = h;\n return;\n }\n\n ref.current?.scrollToOffset({\n offset: scrollPosition.current + (h - scrollHeight.current),\n animated: false,\n });\n\n scrollHeight.current = h;\n }, []);\n\n \u002F\u002F onInteraction wraps interaction to preserve scroll position\n const onInteraction = useCallback(\n () =\u003E {\n shouldKeepScrollPosition.current = true;\n\n setTimeout(() =\u003E {\n interact();\n }, 0);\n\n setTimeout(() =\u003E {\n shouldKeepScrollPosition.current = false;\n }, 500);\n },\n [setSelectedSubThemes],\n );\n \n return (\n \u003CFlatList\n \u002F\u002F ...required FlatList options\n ref={ref}\n onContentSizeChange={onContentSizeChange}\n onRefresh={onRefresh}\n onScroll={onScroll}\n \u002F\u003E\n )\n}\n","","interact","\u003C","scrollPosition","useRef","0","false","onScroll","useCallback","onContentSizeChange"," (","ref","Preserve FlatList Scroll Position In React Native","\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native","root","p","Sometimes you need to keep scroll position of ","code-inline"," in React Native after some user interactions.","typescript","pre","Props","ct-0527be","event"," },"," );","ct-c0d4f3","number","return","setTimeout","(() "," "," }, ","onRefresh",2))
\ No newline at end of file
diff --git a/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/index.html b/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/index.html
index 8cb08d8..936dfd9 100644
--- a/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/index.html
+++ b/frontend/react-native/preserve-flatlist-scroll-position-in-react-native/index.html
@@ -1,6 +1,6 @@
-Preserve FlatList Scroll Position In React Native • Obsidian Garden
-
Preserve FlatList Scroll Position In React Native
Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.
// interact() is doing some stuff, that changes FlatList scroll sizetypeProps= { interact: () =>void; }constSomeList:FC<Props> = ({ interact }) => {constscrollPosition=useRef(0);constscrollHeight=useRef(0);// set it to `true` before interaction and back to `false` right afterconstshouldKeepScrollPosition=useRef(false);constonScroll=useCallback( (event:NativeSyntheticEvent<NativeScrollEvent>) => {scrollPosition.current=event.nativeEvent.contentOffset.y; }, [], );constonContentSizeChange=useCallback((_:number, h:number) => {if (!shouldKeepScrollPosition.current) {scrollHeight.current=h;return; }ref.current?.scrollToOffset({ offset: scrollPosition.current+ (h-scrollHeight.current), animated: false, });scrollHeight.current=h; }, []);// onInteraction wraps interaction to preserve scroll positionconstonInteraction=useCallback( () => {shouldKeepScrollPosition.current=true;setTimeout(() => {interact(); }, 0);setTimeout(() => {shouldKeepScrollPosition.current=false; }, 500); }, [setSelectedSubThemes], );return (<FlatList// ...required FlatList optionsref={ref}onContentSizeChange={onContentSizeChange}onRefresh={onRefresh}onScroll={onScroll}/> )}
+
Preserve FlatList Scroll Position In React Native
Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.
// interact() is doing some stuff, that changes FlatList scroll sizetypeProps= { interact: () =>void; }constSomeList:FC<Props> = ({ interact }) => {constscrollPosition=useRef(0);constscrollHeight=useRef(0);// set it to `true` before interaction and back to `false` right afterconstshouldKeepScrollPosition=useRef(false);constonScroll=useCallback( (event:NativeSyntheticEvent<NativeScrollEvent>) => {scrollPosition.current=event.nativeEvent.contentOffset.y; }, [], );constonContentSizeChange=useCallback((_:number, h:number) => {if (!shouldKeepScrollPosition.current) {scrollHeight.current=h;return; }ref.current?.scrollToOffset({ offset: scrollPosition.current+ (h-scrollHeight.current), animated: false, });scrollHeight.current=h; }, []);// onInteraction wraps interaction to preserve scroll positionconstonInteraction=useCallback( () => {shouldKeepScrollPosition.current=true;setTimeout(() => {interact(); }, 0);setTimeout(() => {shouldKeepScrollPosition.current=false; }, 500); }, [setSelectedSubThemes], );return (<FlatList// ...required FlatList optionsref={ref}onContentSizeChange={onContentSizeChange}onRefresh={onRefresh}onScroll={onScroll}/> )}
\ No newline at end of file
diff --git a/frontend/react-native/react-native-app-auth/_payload.js b/frontend/react-native/react-native-app-auth/_payload.js
index ab76ea4..2459681 100644
--- a/frontend/react-native/react-native-app-auth/_payload.js
+++ b/frontend/react-native/react-native-app-auth/_payload.js
@@ -1 +1 @@
-export default {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-Ul5QREg0An":null},prerenderedAt:1667989034093}
\ No newline at end of file
+export default {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-Ul5QREg0An":null},prerenderedAt:1668068047434}
\ No newline at end of file
diff --git a/frontend/react-native/react-native-app-auth/index.html b/frontend/react-native/react-native-app-auth/index.html
index 69185fa..60312fc 100644
--- a/frontend/react-native/react-native-app-auth/index.html
+++ b/frontend/react-native/react-native-app-auth/index.html
@@ -1,6 +1,6 @@
-Obsidian Garden
-
+
\ No newline at end of file
diff --git a/frontend/react-native/useful-comands/_payload.js b/frontend/react-native/useful-comands/_payload.js
index 219de35..0420617 100644
--- a/frontend/react-native/useful-comands/_payload.js
+++ b/frontend/react-native/useful-comands/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:X,_path:Y}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-90RMToCghI":{_path:Y,_dir:"react-native",_draft:y,_partial:y,_locale:"en",_empty:y,title:X,description:g,excerpt:{type:Z,children:[{type:a,tag:i,props:{id:z},children:[{type:b,value:A}]},{type:a,tag:f,props:{code:B,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:B}]}]}]},{type:a,tag:i,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:f,props:{code:E,language:_},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:E}]}]}]},{type:a,tag:i,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:$,props:{},children:[{type:b,value:aa}]},{type:a,tag:f,props:{code:H,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:H}]}]}]},{type:a,tag:i,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:f,props:{code:K,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:K}]}]}]},{type:a,tag:i,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:ab,props:{},children:[{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:r,rel:[n]},children:[{type:b,value:r}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:s,rel:[n]},children:[{type:b,value:s}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:t,rel:[n]},children:[{type:b,value:t}]}]}]},{type:a,tag:u,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:f,props:{code:P,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:P}]}]}]},{type:a,tag:u,props:{id:Q},children:[{type:b,value:R}]},{type:a,tag:f,props:{code:S,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:S}]}]}]}]},body:{type:Z,children:[{type:a,tag:i,props:{id:z},children:[{type:b,value:A}]},{type:a,tag:f,props:{code:B,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"adb logcat com.application:I "}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:"\"*:S\""}]}]}]}]}]},{type:a,tag:i,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:f,props:{code:E,language:_},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"keytool -printcert -jarfile "}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:ac}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:ac}]}]}]}]}]},{type:a,tag:i,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:$,props:{},children:[{type:b,value:aa}]},{type:a,tag:f,props:{code:H,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"npx react-native bundle \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --platform android \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --dev "}]},{type:a,tag:c,props:{class:U},children:[{type:b,value:"false"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:V}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --entry-file index.js \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --bundle-output android\u002Fapp\u002Fsrc\u002Fmain\u002Fassets\u002Findex.android.bundle \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --assets-dest android\u002Fapp\u002Fsrc\u002Fmain\u002Fres\u002F"}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:U},children:[{type:b,value:ad}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" android "}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" .\u002Fgradlew assembleDebug"}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:W},children:[{type:b,value:"# do your stuff"}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:".\u002Fgradlew clean"}]}]}]}]}]},{type:a,tag:i,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:f,props:{code:K,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:U},children:[{type:b,value:ad}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" .\u002Fandroid \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:ae}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" .\u002Fgradlew assembleRelease \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:ae}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" adb install .\u002Fapp\u002Fbuild\u002Foutputs\u002Fapk\u002Frelease\u002Fapp-release.apk"}]}]}]}]}]},{type:a,tag:i,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:ab,props:{},children:[{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:r,rel:[n]},children:[{type:b,value:r}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:s,rel:[n]},children:[{type:b,value:s}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:t,rel:[n]},children:[{type:b,value:t}]}]}]},{type:a,tag:u,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:f,props:{code:P,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:W},children:[{type:b,value:"# ios "}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"xcrun simctl openurl booted "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:T}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:W},children:[{type:b,value:"# android"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"adb shell am start -W -a android.intent.action.VIEW -d "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:V}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"com.application"}]}]}]}]}]},{type:a,tag:u,props:{id:Q},children:[{type:b,value:R}]},{type:a,tag:f,props:{code:S,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"PACKAGE="}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:"\"com.application\""}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"adb shell pm set-app-links --package "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:af}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" 0 all "}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:V}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" adb shell pm verify-app-links --re-verify "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:af}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-8a892e{color:#8B949E}.ct-5c177d{color:#FF7B72}.ct-b926df{color:#79C0FF}.ct-6b5a48{color:#C9D1D9}.ct-7889bd{color:#C9D1D9}.ct-3e9e6a{color:#A5D6FF}.ct-bef157{color:#C9D1D9}.light .ct-bef157{color:#657B83}.light .ct-3e9e6a{color:#2AA198}.light .ct-7889bd{color:#859900}.light .ct-6b5a48{color:#268BD2}.light .ct-b926df{color:#268BD2}.light .ct-5c177d{color:#859900}.light .ct-8a892e{color:#93A1A1}"}]}],toc:{title:g,searchDepth:k,depth:k,links:[{id:z,depth:k,text:A},{id:C,depth:k,text:D},{id:F,depth:k,text:G},{id:I,depth:k,text:J},{id:L,depth:k,text:M,children:[{id:N,depth:ag,text:O},{id:Q,depth:ag,text:R}]}]}},_type:"markdown",_id:"content:Frontend:React Native:Useful comands.md",_source:"content",_file:"Frontend\u002FReact Native\u002FUseful comands.md",_extension:"md"}},prerenderedAt:1667989032814}}("element","text","span","line","ct-bef157","code","","pre","h2","shell",2,"li","a","nofollow","ct-7889bd","$","ct-6b5a48","https:\u002F\u002Fzarah.dev\u002F2022\u002F02\u002F08\u002Fandroid12-deeplinks.html","https:\u002F\u002Fdeveloper.android.com\u002Ftraining\u002Fapp-links\u002Fverify-site-associations#invoke-domain-verification","https:\u002F\u002Fdigitalassetlinks.googleapis.com\u002Fv1\u002Fstatements:list?source.web.site=https:\u002F\u002Fmiin.ru&relation=delegate_permission\u002Fcommon.handle_all_urls","h3","ct-3e9e6a","ct-5c177d","&&",false,"show-android-logcat","Show android logcat","adb logcat com.application:I \"*:S\"\n","get-apks-sha-256","Get .apk's SHA-256","keytool -printcert -jarfile \"$1\"\n","assemble-debug-release-on-android","Assemble debug release on Android","npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android\u002Fapp\u002Fsrc\u002Fmain\u002Fassets\u002Findex.android.bundle \\\n --assets-dest android\u002Fapp\u002Fsrc\u002Fmain\u002Fres\u002F\n\ncd android && .\u002Fgradlew assembleDebug\n\n# do your stuff\n\n.\u002Fgradlew clean\n","send-release-to-android-device","Send release to Android device","cd .\u002Fandroid \\\n && .\u002Fgradlew assembleRelease \\\n && adb install .\u002Fapp\u002Fbuild\u002Foutputs\u002Fapk\u002Frelease\u002Fapp-release.apk\n","deep-links","Deep links","open-deep-links","Open deep links","# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","reverify-links-on-android","Reverify links on Android","PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","1","ct-b926df"," \\","ct-8a892e","Useful Comands","\u002Ffrontend\u002Freact-native\u002Fuseful-comands","root","bash","p","Packages release with bundled resources.","ul","\"","cd"," ","PACKAGE",3))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:X,_path:Y}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-90RMToCghI":{_path:Y,_dir:"react-native",_draft:y,_partial:y,_locale:"en",_empty:y,title:X,description:g,excerpt:{type:Z,children:[{type:a,tag:i,props:{id:z},children:[{type:b,value:A}]},{type:a,tag:f,props:{code:B,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:B}]}]}]},{type:a,tag:i,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:f,props:{code:E,language:_},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:E}]}]}]},{type:a,tag:i,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:$,props:{},children:[{type:b,value:aa}]},{type:a,tag:f,props:{code:H,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:H}]}]}]},{type:a,tag:i,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:f,props:{code:K,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:K}]}]}]},{type:a,tag:i,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:ab,props:{},children:[{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:r,rel:[n]},children:[{type:b,value:r}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:s,rel:[n]},children:[{type:b,value:s}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:t,rel:[n]},children:[{type:b,value:t}]}]}]},{type:a,tag:u,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:f,props:{code:P,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:P}]}]}]},{type:a,tag:u,props:{id:Q},children:[{type:b,value:R}]},{type:a,tag:f,props:{code:S,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:b,value:S}]}]}]}]},body:{type:Z,children:[{type:a,tag:i,props:{id:z},children:[{type:b,value:A}]},{type:a,tag:f,props:{code:B,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"adb logcat com.application:I "}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:"\"*:S\""}]}]}]}]}]},{type:a,tag:i,props:{id:C},children:[{type:b,value:D}]},{type:a,tag:f,props:{code:E,language:_},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"keytool -printcert -jarfile "}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:ac}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:ac}]}]}]}]}]},{type:a,tag:i,props:{id:F},children:[{type:b,value:G}]},{type:a,tag:$,props:{},children:[{type:b,value:aa}]},{type:a,tag:f,props:{code:H,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"npx react-native bundle \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --platform android \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --dev "}]},{type:a,tag:c,props:{class:U},children:[{type:b,value:"false"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:V}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --entry-file index.js \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --bundle-output android\u002Fapp\u002Fsrc\u002Fmain\u002Fassets\u002Findex.android.bundle \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" --assets-dest android\u002Fapp\u002Fsrc\u002Fmain\u002Fres\u002F"}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:U},children:[{type:b,value:ad}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" android "}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" .\u002Fgradlew assembleDebug"}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:W},children:[{type:b,value:"# do your stuff"}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:".\u002Fgradlew clean"}]}]}]}]}]},{type:a,tag:i,props:{id:I},children:[{type:b,value:J}]},{type:a,tag:f,props:{code:K,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:U},children:[{type:b,value:ad}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" .\u002Fandroid \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:ae}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" .\u002Fgradlew assembleRelease \\"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:ae}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" adb install .\u002Fapp\u002Fbuild\u002Foutputs\u002Fapk\u002Frelease\u002Fapp-release.apk"}]}]}]}]}]},{type:a,tag:i,props:{id:L},children:[{type:b,value:M}]},{type:a,tag:ab,props:{},children:[{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:r,rel:[n]},children:[{type:b,value:r}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:s,rel:[n]},children:[{type:b,value:s}]}]},{type:a,tag:l,props:{},children:[{type:a,tag:m,props:{href:t,rel:[n]},children:[{type:b,value:t}]}]}]},{type:a,tag:u,props:{id:N},children:[{type:b,value:O}]},{type:a,tag:f,props:{code:P,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:W},children:[{type:b,value:"# ios "}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"xcrun simctl openurl booted "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:T}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:W},children:[{type:b,value:"# android"}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"adb shell am start -W -a android.intent.action.VIEW -d "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:T}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:V}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"com.application"}]}]}]}]}]},{type:a,tag:u,props:{id:Q},children:[{type:b,value:R}]},{type:a,tag:f,props:{code:S,language:j},children:[{type:a,tag:h,props:{},children:[{type:a,tag:f,props:{__ignoreMap:g},children:[{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"PACKAGE="}]},{type:a,tag:c,props:{class:v},children:[{type:b,value:"\"com.application\""}]}]},{type:a,tag:c,props:{class:d},children:[]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"adb shell pm set-app-links --package "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:af}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" 0 all "}]},{type:a,tag:c,props:{class:w},children:[{type:b,value:x}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:V}]}]},{type:a,tag:c,props:{class:d},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:" adb shell pm verify-app-links --re-verify "}]},{type:a,tag:c,props:{class:o},children:[{type:b,value:p}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:af}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-8cbcba{color:#8B949E}.ct-b7b0af{color:#FF7B72}.ct-49aa90{color:#79C0FF}.ct-79ff07{color:#C9D1D9}.ct-334077{color:#C9D1D9}.ct-87b274{color:#A5D6FF}.ct-3cd957{color:#C9D1D9}.light .ct-3cd957{color:#657B83}.light .ct-87b274{color:#2AA198}.light .ct-334077{color:#859900}.light .ct-79ff07{color:#268BD2}.light .ct-49aa90{color:#268BD2}.light .ct-b7b0af{color:#859900}.light .ct-8cbcba{color:#93A1A1}"}]}],toc:{title:g,searchDepth:k,depth:k,links:[{id:z,depth:k,text:A},{id:C,depth:k,text:D},{id:F,depth:k,text:G},{id:I,depth:k,text:J},{id:L,depth:k,text:M,children:[{id:N,depth:ag,text:O},{id:Q,depth:ag,text:R}]}]}},_type:"markdown",_id:"content:Frontend:React Native:Useful comands.md",_source:"content",_file:"Frontend\u002FReact Native\u002FUseful comands.md",_extension:"md"}},prerenderedAt:1668068046131}}("element","text","span","line","ct-3cd957","code","","pre","h2","shell",2,"li","a","nofollow","ct-334077","$","ct-79ff07","https:\u002F\u002Fzarah.dev\u002F2022\u002F02\u002F08\u002Fandroid12-deeplinks.html","https:\u002F\u002Fdeveloper.android.com\u002Ftraining\u002Fapp-links\u002Fverify-site-associations#invoke-domain-verification","https:\u002F\u002Fdigitalassetlinks.googleapis.com\u002Fv1\u002Fstatements:list?source.web.site=https:\u002F\u002Fmiin.ru&relation=delegate_permission\u002Fcommon.handle_all_urls","h3","ct-87b274","ct-b7b0af","&&",false,"show-android-logcat","Show android logcat","adb logcat com.application:I \"*:S\"\n","get-apks-sha-256","Get .apk's SHA-256","keytool -printcert -jarfile \"$1\"\n","assemble-debug-release-on-android","Assemble debug release on Android","npx react-native bundle \\\n --platform android \\\n --dev false \\\n --entry-file index.js \\\n --bundle-output android\u002Fapp\u002Fsrc\u002Fmain\u002Fassets\u002Findex.android.bundle \\\n --assets-dest android\u002Fapp\u002Fsrc\u002Fmain\u002Fres\u002F\n\ncd android && .\u002Fgradlew assembleDebug\n\n# do your stuff\n\n.\u002Fgradlew clean\n","send-release-to-android-device","Send release to Android device","cd .\u002Fandroid \\\n && .\u002Fgradlew assembleRelease \\\n && adb install .\u002Fapp\u002Fbuild\u002Foutputs\u002Fapk\u002Frelease\u002Fapp-release.apk\n","deep-links","Deep links","open-deep-links","Open deep links","# ios \nxcrun simctl openurl booted $1\n\n# android\nadb shell am start -W -a android.intent.action.VIEW -d $1 \\\ncom.application\n","reverify-links-on-android","Reverify links on Android","PACKAGE=\"com.application\"\n\nadb shell pm set-app-links --package $PACKAGE 0 all && \\\n adb shell pm verify-app-links --re-verify $PACKAGE\n","1","ct-49aa90"," \\","ct-8cbcba","Useful Comands","\u002Ffrontend\u002Freact-native\u002Fuseful-comands","root","bash","p","Packages release with bundled resources.","ul","\"","cd"," ","PACKAGE",3))
\ No newline at end of file
diff --git a/frontend/react-native/useful-comands/index.html b/frontend/react-native/useful-comands/index.html
index 8b1c560..ea4da38 100644
--- a/frontend/react-native/useful-comands/index.html
+++ b/frontend/react-native/useful-comands/index.html
@@ -1,6 +1,6 @@
-Useful Comands • Obsidian Garden
-
\ No newline at end of file
diff --git a/frontend/react/axios-with-abortcontroller/_payload.js b/frontend/react/axios-with-abortcontroller/_payload.js
index 3345bae..37fc0cb 100644
--- a/frontend/react/axios-with-abortcontroller/_payload.js
+++ b/frontend/react/axios-with-abortcontroller/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:G,_path:H}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-9RFKZoeNNl":{_path:H,_dir:"react",_draft:u,_partial:u,_locale:"en",_empty:u,title:G,description:"If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.",excerpt:{type:I,children:[{type:a,tag:r,props:{},children:[{type:c,value:J},{type:a,tag:K,props:{href:L,rel:[M]},children:[{type:c,value:N}]},{type:c,value:O}]},{type:a,tag:r,props:{},children:[{type:a,tag:P,props:{},children:[{type:c,value:s}]},{type:c,value:Q}]},{type:a,tag:t,props:{code:v,language:R},children:[{type:a,tag:S,props:{},children:[{type:a,tag:t,props:{__ignoreMap:w},children:[{type:c,value:v}]}]}]}]},body:{type:I,children:[{type:a,tag:r,props:{},children:[{type:c,value:J},{type:a,tag:K,props:{href:L,rel:[M]},children:[{type:c,value:N}]},{type:c,value:O}]},{type:a,tag:r,props:{},children:[{type:a,tag:P,props:{},children:[{type:c,value:s}]},{type:c,value:Q}]},{type:a,tag:t,props:{code:v,language:R},children:[{type:a,tag:S,props:{},children:[{type:a,tag:t,props:{__ignoreMap:w},children:[{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" } "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:"\"react\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:"'axios'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"create"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"export"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"useGetUsers"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"());"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"async"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"await"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:"\"\u002F\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:", {"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" "}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:"\u002F\u002F params and props here"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" signal: "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"signal"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:","}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" });"}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"data"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }, []);"}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"(() "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"abort"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:"\u002F\u002F controller should be rewritten or all requests will fail"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }, ["}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"]);"}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"};"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-484999{color:#8B949E}.ct-49d14d{color:#D2A8FF}.ct-a40d0a{color:#79C0FF}.ct-72e4c5{color:#FF7B72}.ct-a7ad05{color:#A5D6FF}.ct-7726fe{color:#C9D1D9}.ct-49df39{color:#C9D1D9}.ct-199340{color:#FF7B72}.light .ct-199340{color:#859900}.light .ct-49df39{color:#657B83}.light .ct-7726fe{color:#268BD2}.light .ct-a7ad05{color:#2AA198}.light .ct-72e4c5{color:#073642}.light .ct-a40d0a{color:#268BD2}.light .ct-49d14d{color:#268BD2}.light .ct-484999{color:#93A1A1}"}]}],toc:{title:w,searchDepth:ae,depth:ae,links:[]}},_type:"markdown",_id:"content:Frontend:React:Axios with AbortController.md",_source:"content",_file:"Frontend\u002FReact\u002FAxios with AbortController.md",_extension:"md"}},prerenderedAt:1667989032963}}("element","span","text","ct-49df39"," ","line","ct-199340","ct-7726fe","ct-72e4c5","ct-49d14d",".","=","const"," ","ct-a40d0a"," ","controller","p","AbortController","code",false,"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () =\u003E {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () =\u003E {\n const result = await client.get(\"\u002F\", {\n \u002F\u002F params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() =\u003E {\n controller.current.abort();\n \n \u002F\u002F controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","","useCallback","ct-a7ad05",";","();","=\u003E"," {","(","get","current","Axios With AbortController","\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller","root","If you need to cancel some request, use ","a","https:\u002F\u002Faxios-http.com\u002Fdocs\u002Fcancellation","nofollow","axios with AbortController",". Previously axios used cancellation token, but now it's deprecated.","code-inline"," can be used with a multiple requests to cancel them at once.","typescript","pre","import"," { ",", ","useRef","from","axios","client"," () ","new","result","ct-484999","return","cancel",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:G,_path:H}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-9RFKZoeNNl":{_path:H,_dir:"react",_draft:u,_partial:u,_locale:"en",_empty:u,title:G,description:"If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.",excerpt:{type:I,children:[{type:a,tag:r,props:{},children:[{type:c,value:J},{type:a,tag:K,props:{href:L,rel:[M]},children:[{type:c,value:N}]},{type:c,value:O}]},{type:a,tag:r,props:{},children:[{type:a,tag:P,props:{},children:[{type:c,value:s}]},{type:c,value:Q}]},{type:a,tag:t,props:{code:v,language:R},children:[{type:a,tag:S,props:{},children:[{type:a,tag:t,props:{__ignoreMap:w},children:[{type:c,value:v}]}]}]}]},body:{type:I,children:[{type:a,tag:r,props:{},children:[{type:c,value:J},{type:a,tag:K,props:{href:L,rel:[M]},children:[{type:c,value:N}]},{type:c,value:O}]},{type:a,tag:r,props:{},children:[{type:a,tag:P,props:{},children:[{type:c,value:s}]},{type:c,value:Q}]},{type:a,tag:t,props:{code:v,language:R},children:[{type:a,tag:S,props:{},children:[{type:a,tag:t,props:{__ignoreMap:w},children:[{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" } "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:"\"react\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:"'axios'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"create"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"export"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"useGetUsers"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"());"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"async"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"await"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:"\"\u002F\""}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:", {"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" "}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:"\u002F\u002F params and props here"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" signal: "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"signal"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:","}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" });"}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"data"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }, []);"}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:o},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"(() "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"abort"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:"\u002F\u002F controller should be rewritten or all requests will fail"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:e}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }, ["}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"]);"}]}]},{type:a,tag:b,props:{class:f},children:[]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:p}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]},{type:a,tag:b,props:{class:f},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"};"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-090d13{color:#8B949E}.ct-d3409b{color:#D2A8FF}.ct-10f6d9{color:#79C0FF}.ct-6aa8a7{color:#FF7B72}.ct-abd3e2{color:#A5D6FF}.ct-74d66d{color:#C9D1D9}.ct-9c1e46{color:#C9D1D9}.ct-17fc5c{color:#FF7B72}.light .ct-17fc5c{color:#859900}.light .ct-9c1e46{color:#657B83}.light .ct-74d66d{color:#268BD2}.light .ct-abd3e2{color:#2AA198}.light .ct-6aa8a7{color:#073642}.light .ct-10f6d9{color:#268BD2}.light .ct-d3409b{color:#268BD2}.light .ct-090d13{color:#93A1A1}"}]}],toc:{title:w,searchDepth:ae,depth:ae,links:[]}},_type:"markdown",_id:"content:Frontend:React:Axios with AbortController.md",_source:"content",_file:"Frontend\u002FReact\u002FAxios with AbortController.md",_extension:"md"}},prerenderedAt:1668068046275}}("element","span","text","ct-9c1e46"," ","line","ct-17fc5c","ct-74d66d","ct-6aa8a7","ct-d3409b",".","=","const"," ","ct-10f6d9"," ","controller","p","AbortController","code",false,"import { useCallback, useRef } from \"react\";\nimport axios from 'axios';\n\nconst client = axios.create();\n\nexport const useGetUsers = () =\u003E {\n const controller = useRef(new AbortController());\n \n const get = useCallback(async () =\u003E {\n const result = await client.get(\"\u002F\", {\n \u002F\u002F params and props here\n signal: controller.current.signal,\n });\n\n return result.data;\n }, []);\n\n const cancel = useCallback(() =\u003E {\n controller.current.abort();\n \n \u002F\u002F controller should be rewritten or all requests will fail\n controller.current = new AbortController();\n }, [controller]);\n\n return { get, cancel };\n};\n","","useCallback","ct-abd3e2",";","();","=\u003E"," {","(","get","current","Axios With AbortController","\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller","root","If you need to cancel some request, use ","a","https:\u002F\u002Faxios-http.com\u002Fdocs\u002Fcancellation","nofollow","axios with AbortController",". Previously axios used cancellation token, but now it's deprecated.","code-inline"," can be used with a multiple requests to cancel them at once.","typescript","pre","import"," { ",", ","useRef","from","axios","client"," () ","new","result","ct-090d13","return","cancel",2))
\ No newline at end of file
diff --git a/frontend/react/axios-with-abortcontroller/index.html b/frontend/react/axios-with-abortcontroller/index.html
index f6b1b93..a1dd201 100644
--- a/frontend/react/axios-with-abortcontroller/index.html
+++ b/frontend/react/axios-with-abortcontroller/index.html
@@ -1,6 +1,6 @@
-Axios With AbortController • Obsidian Garden
-
Axios With AbortController
If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.
AbortController can be used with a multiple requests to cancel them at once.
import { useCallback, useRef } from"react";importaxiosfrom'axios';constclient=axios.create();exportconstuseGetUsers= () => {constcontroller=useRef(newAbortController());constget=useCallback(async () => {constresult=awaitclient.get("/", {// params and props here signal: controller.current.signal, });returnresult.data; }, []);constcancel=useCallback(() => {controller.current.abort();// controller should be rewritten or all requests will failcontroller.current=newAbortController(); }, [controller]);return { get, cancel };};
+
Axios With AbortController
If you need to cancel some request, use axios with AbortController. Previously axios used cancellation token, but now it's deprecated.
AbortController can be used with a multiple requests to cancel them at once.
import { useCallback, useRef } from"react";importaxiosfrom'axios';constclient=axios.create();exportconstuseGetUsers= () => {constcontroller=useRef(newAbortController());constget=useCallback(async () => {constresult=awaitclient.get("/", {// params and props here signal: controller.current.signal, });returnresult.data; }, []);constcancel=useCallback(() => {controller.current.abort();// controller should be rewritten or all requests will failcontroller.current=newAbortController(); }, [controller]);return { get, cancel };};
\ No newline at end of file
diff --git a/frontend/vue/add-global-variable-to-window/_payload.js b/frontend/vue/add-global-variable-to-window/_payload.js
index 79d70d7..45f1156 100644
--- a/frontend/vue/add-global-variable-to-window/_payload.js
+++ b/frontend/vue/add-global-variable-to-window/_payload.js
@@ -1 +1 @@
-export default {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-gf0FmfUQhH":null},prerenderedAt:1667989034138}
\ No newline at end of file
+export default {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-gf0FmfUQhH":null},prerenderedAt:1668068047487}
\ No newline at end of file
diff --git a/frontend/vue/add-global-variable-to-window/index.html b/frontend/vue/add-global-variable-to-window/index.html
index cd893f3..a68ac5f 100644
--- a/frontend/vue/add-global-variable-to-window/index.html
+++ b/frontend/vue/add-global-variable-to-window/index.html
@@ -1,6 +1,6 @@
-Obsidian Garden
-
+
\ No newline at end of file
diff --git a/frontend/vue/adding-global-properties-to-component/_payload.js b/frontend/vue/adding-global-properties-to-component/_payload.js
index 3761a07..30325a2 100644
--- a/frontend/vue/adding-global-properties-to-component/_payload.js
+++ b/frontend/vue/adding-global-properties-to-component/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:q,_path:r},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-gHURXJrO3C":{_path:r,_dir:"vue",_draft:l,_partial:l,_locale:"en",_empty:l,title:q,description:"The topic's fully covered in the official documentation and in Add global variable to window.",excerpt:{type:s,children:[{type:a,tag:h,props:{},children:[{type:b,value:t},{type:a,tag:i,props:{href:u,rel:[v]},children:[{type:b,value:w}]},{type:b,value:x},{type:a,tag:i,props:{href:y},children:[{type:b,value:z}]},{type:b,value:A}]},{type:a,tag:h,props:{},children:[{type:b,value:B},{type:a,tag:j,props:{},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:j,props:{},children:[{type:b,value:m}]},{type:b,value:E}]},{type:a,tag:k,props:{code:n,language:F},children:[{type:a,tag:G,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:b,value:n}]}]}]}]},body:{type:s,children:[{type:a,tag:h,props:{},children:[{type:b,value:t},{type:a,tag:i,props:{href:u,rel:[v]},children:[{type:b,value:w}]},{type:b,value:x},{type:a,tag:i,props:{href:y},children:[{type:b,value:z}]},{type:b,value:A}]},{type:a,tag:h,props:{},children:[{type:b,value:B},{type:a,tag:j,props:{},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:j,props:{},children:[{type:b,value:m}]},{type:b,value:E}]},{type:a,tag:k,props:{code:n,language:F},children:[{type:a,tag:G,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:"ct-22614b"},children:[{type:b,value:"\u002F\u002F ~\u002Findex.d.ts or ~\u002Fcustom.d.ts"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:H},children:[{type:b,value:"import"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:"ct-b55f51"},children:[{type:b,value:"axios"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:H},children:[{type:b,value:"from"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:"'axios'"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:p},children:[{type:b,value:"declare"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:"module"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:"'vue'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:"interface"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:"ct-4fc9c7"},children:[{type:b,value:"ComponentCustomProperties"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:"ct-7aaab2"},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:K},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:" ("}]},{type:a,tag:c,props:{class:"ct-a606d0"},children:[{type:b,value:"key"}]},{type:a,tag:c,props:{class:K},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:M},children:[{type:b,value:N}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:") "}]},{type:a,tag:c,props:{class:"ct-63c33d"},children:[{type:b,value:"=\u003E"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:M},children:[{type:b,value:N}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"}"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-63c33d{color:#FF7B72}.ct-10a450{color:#79C0FF}.ct-a606d0{color:#FFA657}.ct-fa4db5{color:#FF7B72}.ct-7aaab2{color:#D2A8FF}.ct-6e6f7c{color:#C9D1D9}.ct-4fc9c7{color:#FFA657}.ct-074500{color:#FF7B72}.ct-d36ee8{color:#A5D6FF}.ct-b55f51{color:#C9D1D9}.ct-7f1b4a{color:#C9D1D9}.ct-5dae07{color:#FF7B72}.ct-22614b{color:#8B949E}.light .ct-22614b{color:#93A1A1}.light .ct-5dae07{color:#859900}.light .ct-7f1b4a{color:#657B83}.light .ct-b55f51{color:#268BD2}.light .ct-d36ee8{color:#2AA198}.light .ct-074500{color:#073642}.light .ct-4fc9c7{color:#268BD2}.light .ct-6e6f7c{color:#657B83}.light .ct-7aaab2{color:#268BD2}.light .ct-fa4db5{color:#859900}.light .ct-a606d0{color:#657B83}.light .ct-10a450{color:#859900}.light .ct-63c33d{color:#073642}"}]}],toc:{title:o,searchDepth:O,depth:O,links:[]}},_type:"markdown",_id:"content:Frontend:Vue:Adding global properties to component.md",_source:"content",_file:"Frontend\u002FVue\u002FAdding global properties to component.md",_extension:"md"}},prerenderedAt:1667989033009}}("element","text","span","ct-7f1b4a","line"," ","ct-6e6f7c","p","a","code-inline","code",false,"$translate","\u002F\u002F ~\u002Findex.d.ts or ~\u002Fcustom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) =\u003E string\n }\n}\n","","ct-074500","Adding Global Properties To Component","\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component","root","The topic's fully covered in the ","https:\u002F\u002Fvuejs.org\u002Fguide\u002Ftypescript\u002Foptions-api.html#augmenting-global-properties","nofollow","official documentation"," and in ","Add%20global%20variable%20to%20window","Add global variable to window",".","For example, you want to add global ","$http"," and "," services to all of project's components:","typescript","pre","ct-5dae07","ct-d36ee8"," {","ct-fa4db5",":","ct-10a450","string",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:q,_path:r},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-gHURXJrO3C":{_path:r,_dir:"vue",_draft:l,_partial:l,_locale:"en",_empty:l,title:q,description:"The topic's fully covered in the official documentation and in Add global variable to window.",excerpt:{type:s,children:[{type:a,tag:h,props:{},children:[{type:b,value:t},{type:a,tag:i,props:{href:u,rel:[v]},children:[{type:b,value:w}]},{type:b,value:x},{type:a,tag:i,props:{href:y},children:[{type:b,value:z}]},{type:b,value:A}]},{type:a,tag:h,props:{},children:[{type:b,value:B},{type:a,tag:j,props:{},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:j,props:{},children:[{type:b,value:m}]},{type:b,value:E}]},{type:a,tag:k,props:{code:n,language:F},children:[{type:a,tag:G,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:b,value:n}]}]}]}]},body:{type:s,children:[{type:a,tag:h,props:{},children:[{type:b,value:t},{type:a,tag:i,props:{href:u,rel:[v]},children:[{type:b,value:w}]},{type:b,value:x},{type:a,tag:i,props:{href:y},children:[{type:b,value:z}]},{type:b,value:A}]},{type:a,tag:h,props:{},children:[{type:b,value:B},{type:a,tag:j,props:{},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:j,props:{},children:[{type:b,value:m}]},{type:b,value:E}]},{type:a,tag:k,props:{code:n,language:F},children:[{type:a,tag:G,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:"ct-7be4af"},children:[{type:b,value:"\u002F\u002F ~\u002Findex.d.ts or ~\u002Fcustom.d.ts"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:H},children:[{type:b,value:"import"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:"ct-54fd65"},children:[{type:b,value:"axios"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:H},children:[{type:b,value:"from"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:"'axios'"}]}]},{type:a,tag:c,props:{class:e},children:[]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:p},children:[{type:b,value:"declare"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:"module"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:I},children:[{type:b,value:"'vue'"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:"interface"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:"ct-27cea4"},children:[{type:b,value:"ComponentCustomProperties"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:J}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:f}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:g},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:"ct-3491b4"},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:K},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:" ("}]},{type:a,tag:c,props:{class:"ct-ede204"},children:[{type:b,value:"key"}]},{type:a,tag:c,props:{class:K},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:M},children:[{type:b,value:N}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:") "}]},{type:a,tag:c,props:{class:"ct-4b0489"},children:[{type:b,value:"=\u003E"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:f}]},{type:a,tag:c,props:{class:M},children:[{type:b,value:N}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"}"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-4b0489{color:#FF7B72}.ct-e6ad5b{color:#79C0FF}.ct-ede204{color:#FFA657}.ct-b85a31{color:#FF7B72}.ct-3491b4{color:#D2A8FF}.ct-450b61{color:#C9D1D9}.ct-27cea4{color:#FFA657}.ct-dbee56{color:#FF7B72}.ct-b5aa20{color:#A5D6FF}.ct-54fd65{color:#C9D1D9}.ct-8997cb{color:#C9D1D9}.ct-285d16{color:#FF7B72}.ct-7be4af{color:#8B949E}.light .ct-7be4af{color:#93A1A1}.light .ct-285d16{color:#859900}.light .ct-8997cb{color:#657B83}.light .ct-54fd65{color:#268BD2}.light .ct-b5aa20{color:#2AA198}.light .ct-dbee56{color:#073642}.light .ct-27cea4{color:#268BD2}.light .ct-450b61{color:#657B83}.light .ct-3491b4{color:#268BD2}.light .ct-b85a31{color:#859900}.light .ct-ede204{color:#657B83}.light .ct-e6ad5b{color:#859900}.light .ct-4b0489{color:#073642}"}]}],toc:{title:o,searchDepth:O,depth:O,links:[]}},_type:"markdown",_id:"content:Frontend:Vue:Adding global properties to component.md",_source:"content",_file:"Frontend\u002FVue\u002FAdding global properties to component.md",_extension:"md"}},prerenderedAt:1668068046320}}("element","text","span","ct-8997cb","line"," ","ct-450b61","p","a","code-inline","code",false,"$translate","\u002F\u002F ~\u002Findex.d.ts or ~\u002Fcustom.d.ts\n\nimport axios from 'axios'\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $http: typeof axios\n $translate: (key: string) =\u003E string\n }\n}\n","","ct-dbee56","Adding Global Properties To Component","\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component","root","The topic's fully covered in the ","https:\u002F\u002Fvuejs.org\u002Fguide\u002Ftypescript\u002Foptions-api.html#augmenting-global-properties","nofollow","official documentation"," and in ","Add%20global%20variable%20to%20window","Add global variable to window",".","For example, you want to add global ","$http"," and "," services to all of project's components:","typescript","pre","ct-285d16","ct-b5aa20"," {","ct-b85a31",":","ct-e6ad5b","string",2))
\ No newline at end of file
diff --git a/frontend/vue/adding-global-properties-to-component/index.html b/frontend/vue/adding-global-properties-to-component/index.html
index d0969e8..ab2163a 100644
--- a/frontend/vue/adding-global-properties-to-component/index.html
+++ b/frontend/vue/adding-global-properties-to-component/index.html
@@ -1,6 +1,6 @@
-Adding Global Properties To Component • Obsidian Garden
-
For example, you want to add global $http and $translate services to all of project's components:
// ~/index.d.ts or ~/custom.d.tsimportaxiosfrom'axios'declaremodule'vue' {interfaceComponentCustomProperties {$translate: (key:string) =>string }}
\ No newline at end of file
diff --git a/frontend/vue/make-nuxt-handle-obsidian-highlights/_payload.js b/frontend/vue/make-nuxt-handle-obsidian-highlights/_payload.js
index 2a697ba..9d77a56 100644
--- a/frontend/vue/make-nuxt-handle-obsidian-highlights/_payload.js
+++ b/frontend/vue/make-nuxt-handle-obsidian-highlights/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:u,_path:v}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-JZY9J7Y59r":{_path:v,_dir:"vue",_draft:m,_partial:m,_locale:"en",_empty:m,title:u,description:"By default Nuxt Content Plugin not handling \u003Cspan class=\"highlight\"\u003Ehighlight\u003C\u002Fspan\u003E links. To fix that we will create Nitro plugin:",excerpt:{type:w,children:[{type:a,tag:x,props:{},children:[{type:b,value:y},{type:a,tag:z,props:{href:A,rel:[B]},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:k,props:{},children:[{type:b,value:E}]},{type:b,value:F},{type:a,tag:k,props:{},children:[{type:b,value:G}]},{type:b,value:H}]},{type:a,tag:l,props:{code:n,language:I},children:[{type:a,tag:J,props:{},children:[{type:a,tag:l,props:{__ignoreMap:o},children:[{type:b,value:n}]}]}]}]},body:{type:w,children:[{type:a,tag:x,props:{},children:[{type:b,value:y},{type:a,tag:z,props:{href:A,rel:[B]},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:k,props:{},children:[{type:b,value:E}]},{type:b,value:F},{type:a,tag:k,props:{},children:[{type:b,value:G}]},{type:b,value:H}]},{type:a,tag:l,props:{code:n,language:I},children:[{type:a,tag:J,props:{},children:[{type:a,tag:l,props:{__ignoreMap:o},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:"ct-998ff9"},children:[{type:b,value:"\u002F\u002F ~\u002Fserver\u002Fplugins\u002Fhighlight.ts"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:K},children:[{type:b,value:"export"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:K},children:[{type:b,value:"default"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:"ct-1ffb28"},children:[{type:b,value:"defineNitroPlugin"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"((nitroApp) "}]},{type:a,tag:c,props:{class:"ct-30d538"},children:[{type:b,value:"=\u003E"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:"{"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"nitroApp"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"hooks"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:"hook"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"\"content:file:beforeParse\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"if"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" ("}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"_id"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:"endsWith"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"\".md\""}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:")) {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"="}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:"replace"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:"\u002F==("}]},{type:a,tag:c,props:{class:O},children:[{type:b,value:"["}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"^"}]},{type:a,tag:c,props:{class:O},children:[{type:b,value:"=]"}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"+"}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:")==\u002F"}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"gs"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:","}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"`\u003Cspan class=\"highlight\"\u003E$1\u003C\u002Fspan\u003E`"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" );"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" });"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:p},children:[{type:b,value:"}"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:")"}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:";"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-c58450{color:#79C0FF}.ct-cc7369{color:#A5D6FF}.ct-1a5275{color:#FF7B72}.ct-3aff06{color:#A5D6FF}.ct-b2cb40{color:#D2A8FF}.ct-8c1cf5{color:#C9D1D9}.ct-4be8d0{color:#C9D1D9}.ct-6ba2ca{color:#C9D1D9}.ct-30d538{color:#FF7B72}.ct-1ffb28{color:#D2A8FF}.ct-2e1b59{color:#FFA657}.ct-26d123{color:#FF7B72}.ct-998ff9{color:#8B949E}.light .ct-998ff9{color:#93A1A1}.light .ct-26d123{color:#859900}.light .ct-2e1b59{color:#657B83}.light .ct-1ffb28{color:#268BD2}.light .ct-30d538{color:#073642}.light .ct-6ba2ca{color:#657B83}.light .ct-4be8d0{color:#657B83}.light .ct-8c1cf5{color:#268BD2}.light .ct-b2cb40{color:#268BD2}.light .ct-3aff06{color:#2AA198}.light .ct-1a5275{color:#859900}.light .ct-cc7369{color:#D30102}.light .ct-c58450{color:#CB4B16}"}]}],toc:{title:o,searchDepth:P,depth:P,links:[]}},_type:"markdown",_id:"content:Frontend:Vue:Make Nuxt handle Obsidian highlights.md",_source:"content",_file:"Frontend\u002FVue\u002FMake Nuxt handle Obsidian highlights.md",_extension:"md"}},prerenderedAt:1667989033050}}("element","text","span","ct-4be8d0","line","ct-8c1cf5",".","ct-2e1b59"," ","ct-1a5275","code-inline","code",false,"\u002F\u002F ~\u002Fserver\u002Fplugins\u002Fhighlight.ts\nexport default defineNitroPlugin((nitroApp) =\u003E {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) =\u003E {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n \u002F==([^=]+)==\u002Fgs,\n `\u003Cspan class=\"highlight\"\u003E$1\u003C\u002Fspan\u003E`\n );\n }\n });\n});\n","","ct-6ba2ca","ct-b2cb40","(","ct-3aff06","file","Make Nuxt Handle Obsidian Highlights","\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights","root","p","By default ","a","https:\u002F\u002Fcontent.nuxtjs.org","nofollow","Nuxt Content Plugin"," not handling ","\u003Cspan class=\"highlight\"\u003Ehighlight\u003C\u002Fspan\u003E"," links. To fix that we will create ","Nitro"," plugin:","typescript","pre","ct-26d123","body"," ","ct-cc7369","ct-c58450",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:u,_path:v}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-JZY9J7Y59r":{_path:v,_dir:"vue",_draft:m,_partial:m,_locale:"en",_empty:m,title:u,description:"By default Nuxt Content Plugin not handling \u003Cspan class=\"highlight\"\u003Ehighlight\u003C\u002Fspan\u003E links. To fix that we will create Nitro plugin:",excerpt:{type:w,children:[{type:a,tag:x,props:{},children:[{type:b,value:y},{type:a,tag:z,props:{href:A,rel:[B]},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:k,props:{},children:[{type:b,value:E}]},{type:b,value:F},{type:a,tag:k,props:{},children:[{type:b,value:G}]},{type:b,value:H}]},{type:a,tag:l,props:{code:n,language:I},children:[{type:a,tag:J,props:{},children:[{type:a,tag:l,props:{__ignoreMap:o},children:[{type:b,value:n}]}]}]}]},body:{type:w,children:[{type:a,tag:x,props:{},children:[{type:b,value:y},{type:a,tag:z,props:{href:A,rel:[B]},children:[{type:b,value:C}]},{type:b,value:D},{type:a,tag:k,props:{},children:[{type:b,value:E}]},{type:b,value:F},{type:a,tag:k,props:{},children:[{type:b,value:G}]},{type:b,value:H}]},{type:a,tag:l,props:{code:n,language:I},children:[{type:a,tag:J,props:{},children:[{type:a,tag:l,props:{__ignoreMap:o},children:[{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:"ct-740e3d"},children:[{type:b,value:"\u002F\u002F ~\u002Fserver\u002Fplugins\u002Fhighlight.ts"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:K},children:[{type:b,value:"export"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:K},children:[{type:b,value:"default"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:"ct-4b5a4b"},children:[{type:b,value:"defineNitroPlugin"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:"((nitroApp) "}]},{type:a,tag:c,props:{class:"ct-f045aa"},children:[{type:b,value:"=\u003E"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:"{"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"nitroApp"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"hooks"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:"hook"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"\"content:file:beforeParse\""}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"if"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" ("}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"_id"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:"endsWith"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"\".md\""}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:")) {"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" "}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"="}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:i}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:L}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:g}]},{type:a,tag:c,props:{class:q},children:[{type:b,value:"replace"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:r}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:"\u002F==("}]},{type:a,tag:c,props:{class:O},children:[{type:b,value:"["}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"^"}]},{type:a,tag:c,props:{class:O},children:[{type:b,value:"=]"}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"+"}]},{type:a,tag:c,props:{class:N},children:[{type:b,value:")==\u002F"}]},{type:a,tag:c,props:{class:j},children:[{type:b,value:"gs"}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:","}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:M}]},{type:a,tag:c,props:{class:s},children:[{type:b,value:"`\u003Cspan class=\"highlight\"\u003E$1\u003C\u002Fspan\u003E`"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" );"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" }"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" });"}]}]},{type:a,tag:c,props:{class:e},children:[{type:a,tag:c,props:{class:p},children:[{type:b,value:"}"}]},{type:a,tag:c,props:{class:h},children:[{type:b,value:")"}]},{type:a,tag:c,props:{class:p},children:[{type:b,value:";"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-e42be0{color:#79C0FF}.ct-0961cb{color:#A5D6FF}.ct-a08f23{color:#FF7B72}.ct-3a3ac7{color:#A5D6FF}.ct-235547{color:#D2A8FF}.ct-dfb834{color:#C9D1D9}.ct-081992{color:#C9D1D9}.ct-fc50c4{color:#C9D1D9}.ct-f045aa{color:#FF7B72}.ct-4b5a4b{color:#D2A8FF}.ct-eae72d{color:#FFA657}.ct-3f1b56{color:#FF7B72}.ct-740e3d{color:#8B949E}.light .ct-740e3d{color:#93A1A1}.light .ct-3f1b56{color:#859900}.light .ct-eae72d{color:#657B83}.light .ct-4b5a4b{color:#268BD2}.light .ct-f045aa{color:#073642}.light .ct-fc50c4{color:#657B83}.light .ct-081992{color:#657B83}.light .ct-dfb834{color:#268BD2}.light .ct-235547{color:#268BD2}.light .ct-3a3ac7{color:#2AA198}.light .ct-a08f23{color:#859900}.light .ct-0961cb{color:#D30102}.light .ct-e42be0{color:#CB4B16}"}]}],toc:{title:o,searchDepth:P,depth:P,links:[]}},_type:"markdown",_id:"content:Frontend:Vue:Make Nuxt handle Obsidian highlights.md",_source:"content",_file:"Frontend\u002FVue\u002FMake Nuxt handle Obsidian highlights.md",_extension:"md"}},prerenderedAt:1668068046357}}("element","text","span","ct-081992","line","ct-dfb834",".","ct-eae72d"," ","ct-a08f23","code-inline","code",false,"\u002F\u002F ~\u002Fserver\u002Fplugins\u002Fhighlight.ts\nexport default defineNitroPlugin((nitroApp) =\u003E {\n nitroApp.hooks.hook(\"content:file:beforeParse\", (file) =\u003E {\n if (file._id.endsWith(\".md\")) {\n file.body = file.body.replace(\n \u002F==([^=]+)==\u002Fgs,\n `\u003Cspan class=\"highlight\"\u003E$1\u003C\u002Fspan\u003E`\n );\n }\n });\n});\n","","ct-fc50c4","ct-235547","(","ct-3a3ac7","file","Make Nuxt Handle Obsidian Highlights","\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights","root","p","By default ","a","https:\u002F\u002Fcontent.nuxtjs.org","nofollow","Nuxt Content Plugin"," not handling ","\u003Cspan class=\"highlight\"\u003Ehighlight\u003C\u002Fspan\u003E"," links. To fix that we will create ","Nitro"," plugin:","typescript","pre","ct-3f1b56","body"," ","ct-0961cb","ct-e42be0",2))
\ No newline at end of file
diff --git a/frontend/vue/make-nuxt-handle-obsidian-highlights/index.html b/frontend/vue/make-nuxt-handle-obsidian-highlights/index.html
index cb83bb1..3854687 100644
--- a/frontend/vue/make-nuxt-handle-obsidian-highlights/index.html
+++ b/frontend/vue/make-nuxt-handle-obsidian-highlights/index.html
@@ -1,6 +1,6 @@
-Make Nuxt Handle Obsidian Highlights • Obsidian Garden
-
Make Nuxt Handle Obsidian Highlights
By default Nuxt Content Plugin not handling <span class="highlight">highlight</span> links. To fix that we will create Nitro plugin:
\ No newline at end of file
diff --git a/git/force-git-to-use-https/_payload.js b/git/force-git-to-use-https/_payload.js
index c03e029..d83f19d 100644
--- a/git/force-git-to-use-https/_payload.js
+++ b/git/force-git-to-use-https/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:k,_path:l},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-atqGqeweL2":{_path:l,_dir:"git",_draft:g,_partial:g,_locale:"en",_empty:g,title:k,description:h,excerpt:{type:m,children:[{type:a,tag:d,props:{},children:[{type:b,value:h}]},{type:a,tag:d,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:e,props:{code:i,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:e,props:{__ignoreMap:j},children:[{type:b,value:i}]}]}]}]},body:{type:m,children:[{type:a,tag:d,props:{},children:[{type:b,value:h}]},{type:a,tag:d,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:e,props:{code:i,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:e,props:{__ignoreMap:j},children:[{type:a,tag:c,props:{class:t},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"[url "}]},{type:a,tag:c,props:{class:"ct-708ecc"},children:[{type:b,value:"\"https:\u002F\u002Fgithub.com\""}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"]"}]}]},{type:a,tag:c,props:{class:t},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:" insteadOf "}]},{type:a,tag:c,props:{class:"ct-576914"},children:[{type:b,value:"="}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:" git:"}]},{type:a,tag:c,props:{class:"ct-b38bad"},children:[{type:b,value:"\u002F\u002Fgithub.com"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-b38bad{color:#8B949E}.ct-576914{color:#FF7B72}.ct-708ecc{color:#A5D6FF}.ct-04d8c6{color:#C9D1D9}.light .ct-04d8c6{color:#657B83}.light .ct-708ecc{color:#2AA198}.light .ct-576914{color:#859900}.light .ct-b38bad{color:#93A1A1}"}]}],toc:{title:j,searchDepth:u,depth:u,links:[]}},_type:"markdown",_id:"content:Git:Force git to use HTTPS.md",_source:"content",_file:"Git\u002FForce git to use HTTPS.md",_extension:"md"}},prerenderedAt:1667989033097}}("element","text","span","p","code","ct-04d8c6",false,"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol.","[url \"https:\u002F\u002Fgithub.com\"]\n insteadOf = git:\u002F\u002Fgithub.com\n","","Force Git To Use HTTPS","\u002Fgit\u002Fforce-git-to-use-https","root","Put this inside your ","code-inline","~\u002F.gitconfig",":","c","pre","line",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:k,_path:l},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-atqGqeweL2":{_path:l,_dir:"git",_draft:g,_partial:g,_locale:"en",_empty:g,title:k,description:h,excerpt:{type:m,children:[{type:a,tag:d,props:{},children:[{type:b,value:h}]},{type:a,tag:d,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:e,props:{code:i,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:e,props:{__ignoreMap:j},children:[{type:b,value:i}]}]}]}]},body:{type:m,children:[{type:a,tag:d,props:{},children:[{type:b,value:h}]},{type:a,tag:d,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:e,props:{code:i,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:e,props:{__ignoreMap:j},children:[{type:a,tag:c,props:{class:t},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:"[url "}]},{type:a,tag:c,props:{class:"ct-4e2a11"},children:[{type:b,value:"\"https:\u002F\u002Fgithub.com\""}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:"]"}]}]},{type:a,tag:c,props:{class:t},children:[{type:a,tag:c,props:{class:f},children:[{type:b,value:" insteadOf "}]},{type:a,tag:c,props:{class:"ct-0b086c"},children:[{type:b,value:"="}]},{type:a,tag:c,props:{class:f},children:[{type:b,value:" git:"}]},{type:a,tag:c,props:{class:"ct-2cc518"},children:[{type:b,value:"\u002F\u002Fgithub.com"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-2cc518{color:#8B949E}.ct-0b086c{color:#FF7B72}.ct-4e2a11{color:#A5D6FF}.ct-79f868{color:#C9D1D9}.light .ct-79f868{color:#657B83}.light .ct-4e2a11{color:#2AA198}.light .ct-0b086c{color:#859900}.light .ct-2cc518{color:#93A1A1}"}]}],toc:{title:j,searchDepth:u,depth:u,links:[]}},_type:"markdown",_id:"content:Git:Force git to use HTTPS.md",_source:"content",_file:"Git\u002FForce git to use HTTPS.md",_extension:"md"}},prerenderedAt:1668068046392}}("element","text","span","p","code","ct-79f868",false,"Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol.","[url \"https:\u002F\u002Fgithub.com\"]\n insteadOf = git:\u002F\u002Fgithub.com\n","","Force Git To Use HTTPS","\u002Fgit\u002Fforce-git-to-use-https","root","Put this inside your ","code-inline","~\u002F.gitconfig",":","c","pre","line",2))
\ No newline at end of file
diff --git a/git/force-git-to-use-https/index.html b/git/force-git-to-use-https/index.html
index 8089736..127a739 100644
--- a/git/force-git-to-use-https/index.html
+++ b/git/force-git-to-use-https/index.html
@@ -1,6 +1,6 @@
-Force Git To Use HTTPS • Obsidian Garden
-
Force Git To Use HTTPS
Forces #git to use https even if remote url is #SSH. Useful for the networks with blocked #ssh protocol.
\ No newline at end of file
diff --git a/git/git-aliases-and-useful-commands/_payload.js b/git/git-aliases-and-useful-commands/_payload.js
index 48fa77a..7b85403 100644
--- a/git/git-aliases-and-useful-commands/_payload.js
+++ b/git/git-aliases-and-useful-commands/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:t,_path:u}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-VrJO0uSyzq":{_path:u,_dir:"git",_draft:q,_partial:q,_locale:"en",_empty:q,title:t,description:"Shorthands for #git commands can be specified. Should be placed at ~\u002F.gitconfig.",excerpt:{type:v,children:[{type:a,tag:w,props:{},children:[{type:b,value:x},{type:a,tag:h,props:{},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:n,props:{code:r,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:n,props:{__ignoreMap:s},children:[{type:b,value:r}]}]}]},{type:a,tag:C,props:{},children:[{type:a,tag:D,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:E}]}]},{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:F}]}]}]}]},{type:a,tag:G,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:H}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:I}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:J}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:K}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:L}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:M}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:N}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:O}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:P}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:Q}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:R}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:S}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:T}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:U}]}]}]}]}]},body:{type:v,children:[{type:a,tag:w,props:{},children:[{type:b,value:x},{type:a,tag:h,props:{},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:n,props:{code:r,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:n,props:{__ignoreMap:s},children:[{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"[alias]"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" flush "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" git clean"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"branches branch "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:V}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" grep "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"v master "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:V}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" xargs git branch "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"D"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" lol "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" log "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"oneline "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"graph"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" l "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" lol"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" c "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:W}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:X}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" cv "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:W}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"no"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"verify "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:X}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" p "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" push"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" pf "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" p "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"force"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"with"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"lease"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" ignore"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"now "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" update"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"index "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"skip"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"worktree"}]}]}]}]}]},{type:a,tag:C,props:{},children:[{type:a,tag:D,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:E}]}]},{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:F}]}]}]}]},{type:a,tag:G,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:H}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:I}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:J}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:K}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:L}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:M}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:N}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:O}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:P}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:Q}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:R}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:S}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:T}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:U}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-2f457a{color:#FF7B72}.ct-47fb06{color:#C9D1D9}.light .ct-47fb06{color:#657B83}.light .ct-2f457a{color:#859900}"}]}],toc:{title:s,searchDepth:Y,depth:Y,links:[]}},_type:"markdown",_id:"content:Git:Git aliases and useful commands.md",_source:"content",_file:"Git\u002FGit aliases and useful commands.md",_extension:"md"}},prerenderedAt:1667989033122}}("element","text","span","ct-47fb06",null,"td","ct-2f457a","code-inline","tr","-","line","=","--","code","th","strong",false,"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","","Git Aliases And Useful Commands","\u002Fgit\u002Fgit-aliases-and-useful-commands","root","p","Shorthands for #git commands can be specified. Should be placed at ","~\u002F.gitconfig",".","c","pre","table","thead","command","description","tbody","git flush","drops all branches, except master","git lol","shows log","git c","commits with message","git cv","commits without hooks","git p","pushes","git pf","push with --force and additional check","git ignore-now","starts ignoring file from now on","|"," commit ","am",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:t,_path:u}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-VrJO0uSyzq":{_path:u,_dir:"git",_draft:q,_partial:q,_locale:"en",_empty:q,title:t,description:"Shorthands for #git commands can be specified. Should be placed at ~\u002F.gitconfig.",excerpt:{type:v,children:[{type:a,tag:w,props:{},children:[{type:b,value:x},{type:a,tag:h,props:{},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:n,props:{code:r,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:n,props:{__ignoreMap:s},children:[{type:b,value:r}]}]}]},{type:a,tag:C,props:{},children:[{type:a,tag:D,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:E}]}]},{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:F}]}]}]}]},{type:a,tag:G,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:H}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:I}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:J}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:K}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:L}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:M}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:N}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:O}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:P}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:Q}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:R}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:S}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:T}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:U}]}]}]}]}]},body:{type:v,children:[{type:a,tag:w,props:{},children:[{type:b,value:x},{type:a,tag:h,props:{},children:[{type:b,value:y}]},{type:b,value:z}]},{type:a,tag:n,props:{code:r,language:A},children:[{type:a,tag:B,props:{},children:[{type:a,tag:n,props:{__ignoreMap:s},children:[{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:"[alias]"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" flush "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" git clean"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"branches branch "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:V}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" grep "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"v master "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:V}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" xargs git branch "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"D"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" lol "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" log "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"oneline "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"graph"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" l "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" lol"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" c "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:W}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:X}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" cv "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:W}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"no"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"verify "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:X}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" p "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" push"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" pf "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" p "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"force"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"with"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"lease"}]}]},{type:a,tag:c,props:{class:k},children:[{type:a,tag:c,props:{class:d},children:[{type:b,value:" ignore"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"now "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:l}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:" update"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"index "}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:m}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"skip"}]},{type:a,tag:c,props:{class:g},children:[{type:b,value:j}]},{type:a,tag:c,props:{class:d},children:[{type:b,value:"worktree"}]}]}]}]}]},{type:a,tag:C,props:{},children:[{type:a,tag:D,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:E}]}]},{type:a,tag:o,props:{align:e},children:[{type:a,tag:p,props:{},children:[{type:b,value:F}]}]}]}]},{type:a,tag:G,props:{},children:[{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:H}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:I}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:J}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:K}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:L}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:M}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:N}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:O}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:P}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:Q}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:R}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:S}]}]},{type:a,tag:i,props:{},children:[{type:a,tag:f,props:{align:e},children:[{type:a,tag:h,props:{},children:[{type:b,value:T}]}]},{type:a,tag:f,props:{align:e},children:[{type:b,value:U}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-5b0f51{color:#FF7B72}.ct-549b5e{color:#C9D1D9}.light .ct-549b5e{color:#657B83}.light .ct-5b0f51{color:#859900}"}]}],toc:{title:s,searchDepth:Y,depth:Y,links:[]}},_type:"markdown",_id:"content:Git:Git aliases and useful commands.md",_source:"content",_file:"Git\u002FGit aliases and useful commands.md",_extension:"md"}},prerenderedAt:1668068046421}}("element","text","span","ct-549b5e",null,"td","ct-5b0f51","code-inline","tr","-","line","=","--","code","th","strong",false,"[alias]\n flush = git clean-branches branch | grep -v master | xargs git branch -D\n lol = log --oneline --graph\n l = lol\n c = commit -am\n cv = commit --no-verify -am\n p = push\n pf = p --force-with-lease\n ignore-now = update-index --skip-worktree\n","","Git Aliases And Useful Commands","\u002Fgit\u002Fgit-aliases-and-useful-commands","root","p","Shorthands for #git commands can be specified. Should be placed at ","~\u002F.gitconfig",".","c","pre","table","thead","command","description","tbody","git flush","drops all branches, except master","git lol","shows log","git c","commits with message","git cv","commits without hooks","git p","pushes","git pf","push with --force and additional check","git ignore-now","starts ignoring file from now on","|"," commit ","am",2))
\ No newline at end of file
diff --git a/git/git-aliases-and-useful-commands/index.html b/git/git-aliases-and-useful-commands/index.html
index 16d7eb3..9e2a4db 100644
--- a/git/git-aliases-and-useful-commands/index.html
+++ b/git/git-aliases-and-useful-commands/index.html
@@ -1,6 +1,6 @@
-Git Aliases And Useful Commands • Obsidian Garden
-
Git Aliases And Useful Commands
Shorthands for #git commands can be specified. Should be placed at ~/.gitconfig.
\ No newline at end of file
diff --git a/graphql/apollo-client-pagination/_payload.js b/graphql/apollo-client-pagination/_payload.js
index e7804d2..c343ac1 100644
--- a/graphql/apollo-client-pagination/_payload.js
+++ b/graphql/apollo-client-pagination/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:ab,_path:ac},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-k91xxFGA5Y":{_path:ac,_dir:R,_draft:S,_partial:S,_locale:"en",_empty:S,title:ab,description:"Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation",excerpt:{type:ad,children:[{type:a,tag:v,props:{},children:[{type:c,value:ae},{type:a,tag:o,props:{},children:[{type:c,value:af}]},{type:c,value:ag},{type:a,tag:ah,props:{href:ai,rel:[aj]},children:[{type:c,value:ak}]}]},{type:a,tag:k,props:{code:T,language:R},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:c,value:T}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:al},{type:a,tag:o,props:{},children:[{type:c,value:I}]},{type:c,value:am},{type:a,tag:o,props:{},children:[{type:c,value:J}]},{type:c,value:an}]},{type:a,tag:k,props:{code:U,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:c,value:U}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:ao},{type:a,tag:o,props:{},children:[{type:c,value:L}]},{type:c,value:ap}]},{type:a,tag:k,props:{code:V,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:c,value:V}]}]}]}]},body:{type:ad,children:[{type:a,tag:v,props:{},children:[{type:c,value:ae},{type:a,tag:o,props:{},children:[{type:c,value:af}]},{type:c,value:ag},{type:a,tag:ah,props:{href:ai,rel:[aj]},children:[{type:c,value:ak}]}]},{type:a,tag:k,props:{code:T,language:R},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"query"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"listItems"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:W}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"filter"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"sort"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"limit"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"): "}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"input"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:at},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"name"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:at},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:": ["}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"Item"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"]"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"Int"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:al},{type:a,tag:o,props:{},children:[{type:c,value:I}]},{type:c,value:am},{type:a,tag:o,props:{},children:[{type:c,value:J}]},{type:c,value:an}]},{type:a,tag:k,props:{code:U,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"import"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:av}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" } "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"from"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'@apollo\u002Fclient'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aw}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:"client"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ax}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"({"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ay}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" cache: "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ax}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:av}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"({ "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" }),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ay}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"});"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"export"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:":"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-ed0f73"},children:[{type:c,value:"TypePolicies"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" Query: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" fields: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F query name"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" listItems: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F apollo will serialize and use keyArgs as unique"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F identifier in cache for every query"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F consider choosing the right fields, "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F i.e. limit and offset won't work here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" keyArgs: ["}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'sort'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F primitive type"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'filter'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:", ["}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'name'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'type'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"] "}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F nested fields of `filter`"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ],"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" merge: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" },"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:ao},{type:a,tag:o,props:{},children:[{type:c,value:L}]},{type:c,value:ap}]},{type:a,tag:k,props:{code:V,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F** merges all sources with { items: unknown[], totalCount: number } *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:aA},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-37dac2"},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:", { "}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:" }) "}]},{type:a,tag:b,props:{class:aA},children:[{type:c,value:"=\u003E"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F no existing data"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"."}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u003C"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F If hook was called multiple times"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F merge cache and incoming data"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ["}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F apply latest result for totalCount"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aw}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-37dac2{color:#D2A8FF}.ct-cd2e25{color:#FF7B72}.ct-ed0f73{color:#FFA657}.ct-c6945a{color:#8B949E}.ct-e2f93d{color:#79C0FF}.ct-30a16c{color:#FF7B72}.ct-31d304{color:#A5D6FF}.ct-08b114{color:#C9D1D9}.ct-5073b9{color:#FF7B72}.ct-119237{color:#79C0FF}.ct-a8f707{color:#79C0FF}.ct-17a66d{color:#FFA657}.ct-12c795{color:#C9D1D9}.ct-fb815a{color:#D2A8FF}.ct-178b32{color:#C9D1D9}.ct-88d46c{color:#FF7B72}.light .ct-88d46c{color:#859900}.light .ct-178b32{color:#657B83}.light .ct-fb815a{color:#268BD2}.light .ct-12c795{color:#657B83}.light .ct-17a66d{color:#657B83}.light .ct-a8f707{color:#859900}.light .ct-119237{color:#859900}.light .ct-5073b9{color:#859900}.light .ct-08b114{color:#268BD2}.light .ct-31d304{color:#2AA198}.light .ct-30a16c{color:#073642}.light .ct-e2f93d{color:#268BD2}.light .ct-c6945a{color:#93A1A1}.light .ct-ed0f73{color:#268BD2}.light .ct-cd2e25{color:#073642}.light .ct-37dac2{color:#268BD2}"}]}],toc:{title:r,searchDepth:aF,depth:aF,links:[]}},_type:"markdown",_id:"content:GraphQL:Apollo Client pagination.md",_source:"content",_file:"GraphQL\u002FApollo Client pagination.md",_extension:"md"}},prerenderedAt:1667989033239}}("element","span","text","ct-178b32","line"," ","ct-88d46c","ct-12c795","ct-08b114","ct-c6945a","code","ct-17a66d"," "," ","code-inline","ct-a8f707","!","",": ","existing","||","p","pre",",","ct-5073b9"," ","?.",", "," {","items","totalCount","ct-31d304","const","=","ApolloClient","typePolicies","typescript","mergeItemsWithTotalCount","ct-fb815a","ct-30a16c","ct-e2f93d"," ","incoming","graphql",false,"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","import { ApolloClient, InMemoryCache } from '@apollo\u002Fclient';\n\nconst client = new ApolloClient({\n \u002F\u002F ...\n cache: new InMemoryCache({ typePolicies }),\n \u002F\u002F ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n \u002F\u002F query name\n listItems: {\n \u002F\u002F apollo will serialize and use keyArgs as unique\n \u002F\u002F identifier in cache for every query\n \u002F\u002F consider choosing the right fields, \n \u002F\u002F i.e. limit and offset won't work here\n keyArgs: [\n 'sort', \u002F\u002F primitive type\n 'filter', ['name', 'type'] \u002F\u002F nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","\u002F** merges all sources with { items: unknown[], totalCount: number } *\u002F\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) =\u003E {\n \u002F\u002F no existing data\n if (!existing || !args?.offset || args.offset \u003C existing.length) {\n return incoming || [];\n }\n\n \u002F\u002F If hook was called multiple times\n if (existing?.items?.length && args?.offset \u003C existing.items.length) {\n return existing || [];\n }\n\n \u002F\u002F merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n \u002F\u002F apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","(","String","offset","}"," (","args","return","Apollo Client Pagination","\u002Fgraphql\u002Fapollo-client-pagination","root","Say, we have ","gql"," response like this and we wan't to have pagination with it. Let's merge it as it specified in ","a","https:\u002F\u002Fwww.apollographql.com\u002Fdocs\u002Freact\u002Fcaching\u002Fcache-field-behavior\u002F#the-merge-function","nofollow","official documentation","We will setup "," with "," to merge incoming data in cache:","We will need merge function ",", which will join results of query and cached data for specific key:","Filter","Number","ItemList","ct-119237","type","InMemoryCache",";","new","\u002F\u002F ..."," ","ct-cd2e25","if"," [];"," }","...",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:ab,_path:ac},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-k91xxFGA5Y":{_path:ac,_dir:R,_draft:S,_partial:S,_locale:"en",_empty:S,title:ab,description:"Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation",excerpt:{type:ad,children:[{type:a,tag:v,props:{},children:[{type:c,value:ae},{type:a,tag:o,props:{},children:[{type:c,value:af}]},{type:c,value:ag},{type:a,tag:ah,props:{href:ai,rel:[aj]},children:[{type:c,value:ak}]}]},{type:a,tag:k,props:{code:T,language:R},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:c,value:T}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:al},{type:a,tag:o,props:{},children:[{type:c,value:I}]},{type:c,value:am},{type:a,tag:o,props:{},children:[{type:c,value:J}]},{type:c,value:an}]},{type:a,tag:k,props:{code:U,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:c,value:U}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:ao},{type:a,tag:o,props:{},children:[{type:c,value:L}]},{type:c,value:ap}]},{type:a,tag:k,props:{code:V,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:c,value:V}]}]}]}]},body:{type:ad,children:[{type:a,tag:v,props:{},children:[{type:c,value:ae},{type:a,tag:o,props:{},children:[{type:c,value:af}]},{type:c,value:ag},{type:a,tag:ah,props:{href:ai,rel:[aj]},children:[{type:c,value:ak}]}]},{type:a,tag:k,props:{code:T,language:R},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"query"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:"listItems"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:W}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"filter"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"sort"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"limit"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"): "}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"input"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:at},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:"name"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:X}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:au}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:at},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:": ["}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"Item"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"]"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:s}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"Int"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:al},{type:a,tag:o,props:{},children:[{type:c,value:I}]},{type:c,value:am},{type:a,tag:o,props:{},children:[{type:c,value:J}]},{type:c,value:an}]},{type:a,tag:k,props:{code:U,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"import"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:av}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" } "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"from"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'@apollo\u002Fclient'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aw}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:"client"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ax}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"({"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ay}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" cache: "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:ax}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:M},children:[{type:c,value:av}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"({ "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" }),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ay}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"});"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:"export"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:":"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-5715ec"},children:[{type:c,value:"TypePolicies"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" Query: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" fields: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F query name"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" listItems: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F apollo will serialize and use keyArgs as unique"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F identifier in cache for every query"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F consider choosing the right fields, "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F i.e. limit and offset won't work here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" keyArgs: ["}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'sort'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F primitive type"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'filter'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:", ["}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'name'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:F},children:[{type:c,value:"'type'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"] "}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F nested fields of `filter`"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ],"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" merge: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" },"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:Z}]}]}]}]}]},{type:a,tag:v,props:{},children:[{type:c,value:ao},{type:a,tag:o,props:{},children:[{type:c,value:L}]},{type:c,value:ap}]},{type:a,tag:k,props:{code:V,language:K},children:[{type:a,tag:w,props:{},children:[{type:a,tag:k,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F** merges all sources with { items: unknown[], totalCount: number } *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:aA},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-300d60"},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:", { "}]},{type:a,tag:b,props:{class:l},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:" }) "}]},{type:a,tag:b,props:{class:aA},children:[{type:c,value:"=\u003E"}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F no existing data"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:$}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"."}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Y}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u003C"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F If hook was called multiple times"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F merge cache and incoming data"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" ["}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"\u002F\u002F apply latest result for totalCount"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:N},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:O},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:t}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aw}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:n}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aa}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:C}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:Q}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-300d60{color:#D2A8FF}.ct-03c1f7{color:#FF7B72}.ct-5715ec{color:#FFA657}.ct-ceb7b4{color:#8B949E}.ct-bf8568{color:#79C0FF}.ct-3d26cf{color:#FF7B72}.ct-fd4998{color:#A5D6FF}.ct-4fe5c9{color:#C9D1D9}.ct-f09e27{color:#FF7B72}.ct-3eb7ef{color:#79C0FF}.ct-09a5ed{color:#79C0FF}.ct-9380a8{color:#FFA657}.ct-5bb096{color:#C9D1D9}.ct-9378fe{color:#D2A8FF}.ct-fafca1{color:#C9D1D9}.ct-4be018{color:#FF7B72}.light .ct-4be018{color:#859900}.light .ct-fafca1{color:#657B83}.light .ct-9378fe{color:#268BD2}.light .ct-5bb096{color:#657B83}.light .ct-9380a8{color:#657B83}.light .ct-09a5ed{color:#859900}.light .ct-3eb7ef{color:#859900}.light .ct-f09e27{color:#859900}.light .ct-4fe5c9{color:#268BD2}.light .ct-fd4998{color:#2AA198}.light .ct-3d26cf{color:#073642}.light .ct-bf8568{color:#268BD2}.light .ct-ceb7b4{color:#93A1A1}.light .ct-5715ec{color:#268BD2}.light .ct-03c1f7{color:#073642}.light .ct-300d60{color:#268BD2}"}]}],toc:{title:r,searchDepth:aF,depth:aF,links:[]}},_type:"markdown",_id:"content:GraphQL:Apollo Client pagination.md",_source:"content",_file:"GraphQL\u002FApollo Client pagination.md",_extension:"md"}},prerenderedAt:1668068046522}}("element","span","text","ct-fafca1","line"," ","ct-4be018","ct-5bb096","ct-4fe5c9","ct-ceb7b4","code","ct-9380a8"," "," ","code-inline","ct-09a5ed","!","",": ","existing","||","p","pre",",","ct-f09e27"," ","?.",", "," {","items","totalCount","ct-fd4998","const","=","ApolloClient","typePolicies","typescript","mergeItemsWithTotalCount","ct-9378fe","ct-3d26cf","ct-bf8568"," ","incoming","graphql",false,"query listItems(\n filter: Filter, \n sort: String,\n limit: Number,\n offset: Number,\n): ItemList!\n\ninput Filter {\n name: String!\n type: String!\n}\n\ntype ItemList {\n items: [Item!]!\n totalCount: Int!\n}\n","import { ApolloClient, InMemoryCache } from '@apollo\u002Fclient';\n\nconst client = new ApolloClient({\n \u002F\u002F ...\n cache: new InMemoryCache({ typePolicies }),\n \u002F\u002F ...\n});\n\nexport const typePolicies: TypePolicies = {\n Query: {\n fields: {\n \u002F\u002F query name\n listItems: {\n \u002F\u002F apollo will serialize and use keyArgs as unique\n \u002F\u002F identifier in cache for every query\n \u002F\u002F consider choosing the right fields, \n \u002F\u002F i.e. limit and offset won't work here\n keyArgs: [\n 'sort', \u002F\u002F primitive type\n 'filter', ['name', 'type'] \u002F\u002F nested fields of `filter`\n ],\n merge: mergeItemsWithTotalCount,\n },\n }\n}\n","\u002F** merges all sources with { items: unknown[], totalCount: number } *\u002F\nconst mergeItemsWithTotalCount = (existing, incoming, { args }) =\u003E {\n \u002F\u002F no existing data\n if (!existing || !args?.offset || args.offset \u003C existing.length) {\n return incoming || [];\n }\n\n \u002F\u002F If hook was called multiple times\n if (existing?.items?.length && args?.offset \u003C existing.items.length) {\n return existing || [];\n }\n\n \u002F\u002F merge cache and incoming data\n const items = [...(existing?.items || []), ...(incoming?.items || [])];\n\n \u002F\u002F apply latest result for totalCount\n const totalCount = incoming?.totalCount || existing?.totalCount;\n\n return {\n ...(incoming || existing || {}),\n items,\n totalCount,\n };\n };\n","(","String","offset","}"," (","args","return","Apollo Client Pagination","\u002Fgraphql\u002Fapollo-client-pagination","root","Say, we have ","gql"," response like this and we wan't to have pagination with it. Let's merge it as it specified in ","a","https:\u002F\u002Fwww.apollographql.com\u002Fdocs\u002Freact\u002Fcaching\u002Fcache-field-behavior\u002F#the-merge-function","nofollow","official documentation","We will setup "," with "," to merge incoming data in cache:","We will need merge function ",", which will join results of query and cached data for specific key:","Filter","Number","ItemList","ct-3eb7ef","type","InMemoryCache",";","new","\u002F\u002F ..."," ","ct-03c1f7","if"," [];"," }","...",2))
\ No newline at end of file
diff --git a/graphql/apollo-client-pagination/index.html b/graphql/apollo-client-pagination/index.html
index 9b6167a..29fcd23 100644
--- a/graphql/apollo-client-pagination/index.html
+++ b/graphql/apollo-client-pagination/index.html
@@ -1,6 +1,6 @@
-Apollo Client Pagination • Obsidian Garden
-
Apollo Client Pagination
Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation
We will setup ApolloClient with typePolicies to merge incoming data in cache:
import { ApolloClient, InMemoryCache } from'@apollo/client';constclient=newApolloClient({// ... cache: newInMemoryCache({ typePolicies }),// ...});exportconsttypePolicies:TypePolicies= { Query: { fields: {// query name listItems: {// apollo will serialize and use keyArgs as unique// identifier in cache for every query// consider choosing the right fields, // i.e. limit and offset won't work here keyArgs: ['sort', // primitive type'filter', ['name', 'type'] // nested fields of `filter` ], merge: mergeItemsWithTotalCount, }, }}
We will need merge function mergeItemsWithTotalCount, which will join results of query and cached data for specific key:
/** merges all sources with { items: unknown[], totalCount: number } */constmergeItemsWithTotalCount= (existing, incoming, { args }) => {// no existing dataif (!existing||!args?.offset||args.offset<existingreturnincoming|| []; }// If hook was called multiple timesif (existing?.items?.returnexisting|| []; }// merge cache and incoming dataconstitems= [...(existing?.items||// apply latest result for totalCountconsttotalCount=incoming?.totalCount||existing?.totalCount;return {...(incoming||items,totalCount, }; };
+
Apollo Client Pagination
Say, we have gql response like this and we wan't to have pagination with it. Let's merge it as it specified in official documentation
We will setup ApolloClient with typePolicies to merge incoming data in cache:
import { ApolloClient, InMemoryCache } from'@apollo/client';constclient=newApolloClient({// ... cache: newInMemoryCache({ typePolicies }),// ...});exportconsttypePolicies:TypePolicies= { Query: { fields: {// query name listItems: {// apollo will serialize and use keyArgs as unique// identifier in cache for every query// consider choosing the right fields, // i.e. limit and offset won't work here keyArgs: ['sort', // primitive type'filter', ['name', 'type'] // nested fields of `filter` ], merge: mergeItemsWithTotalCount, }, }}
We will need merge function mergeItemsWithTotalCount, which will join results of query and cached data for specific key:
/** merges all sources with { items: unknown[], totalCount: number } */constmergeItemsWithTotalCount= (existing, incoming, { args }) => {// no existing dataif (!existing||!args?.offset||args.offset<existingreturnincoming|| []; }// If hook was called multiple timesif (existing?.items?.returnexisting|| []; }// merge cache and incoming dataconstitems= [...(existing?.items||// apply latest result for totalCountconsttotalCount=incoming?.totalCount||existing?.totalCount;return {...(incoming||items,totalCount, }; };
\ No newline at end of file
diff --git a/graphql/refresh-token-in-apollo-client/_payload.js b/graphql/refresh-token-in-apollo-client/_payload.js
index 0a22ea6..4356d93 100644
--- a/graphql/refresh-token-in-apollo-client/_payload.js
+++ b/graphql/refresh-token-in-apollo-client/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,a_,a$,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA,bB){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:aN,_path:aO}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-4TVlzFXfLi":{_path:aO,_dir:"graphql",_draft:at,_partial:at,_locale:"en",_empty:at,title:aN,description:au,excerpt:{type:aP,children:[{type:a,tag:ag,props:{},children:[{type:c,value:au}]},{type:a,tag:E,props:{code:av,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:c,value:av}]}]}]},{type:a,tag:ag,props:{},children:[{type:c,value:aQ},{type:a,tag:aj,props:{},children:[{type:c,value:ak}]},{type:c,value:aR},{type:a,tag:aj,props:{},children:[{type:c,value:Z}]},{type:c,value:aS}]},{type:a,tag:E,props:{code:aw,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:c,value:aw}]}]}]}]},body:{type:aP,children:[{type:a,tag:ag,props:{},children:[{type:c,value:au}]},{type:a,tag:E,props:{code:av,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:aT}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"createApolloClient"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aU}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:aV}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:aW}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aX}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" },"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ax},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:ay}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aY}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:aA}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:aZ}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" \u003E,"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"ApolloClientBase"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:a_}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:a$}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" link: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"ApolloLink"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"from"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"(["}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:a$}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:"setContext"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:"_"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:", { "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" }) "}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" headers: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aW}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"(),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" },"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ba}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bb}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"HttpLink"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:a_}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" uri: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aU}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" fetch: "}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:bc}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bb}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ]),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bd}]}]}]}]}]},{type:a,tag:ag,props:{},children:[{type:c,value:aQ},{type:a,tag:aj,props:{},children:[{type:c,value:ak}]},{type:c,value:aR},{type:a,tag:aj,props:{},children:[{type:c,value:Z}]},{type:c,value:aS}]},{type:a,tag:E,props:{code:aw,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** Global singleton for refreshing promise *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:k},children:[{type:c,value:"let"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ax},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aA}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** Checks if GraphQl errors has unauthenticated error *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:be}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u003C{ "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:"?:"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:"ErrorCode"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" }\u003E)"}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:be}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"isArray"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"some"}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"error"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"status"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bf}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-d2617a"},children:[{type:c,value:"401"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F Distinguish unauthorized error here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bd}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** Detects if customFetch is sending refresh request *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:bg}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"try"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:bh}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:bh}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"operationName"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bf}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:"'RefreshToken'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" } "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"e"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:"false"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"};"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:aT}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:bc}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ("}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bi}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aV}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bi}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" { accessToken: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aY}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aA}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:aZ}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"\u003E"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ) "}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:bg}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aF}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:"Response"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F already refreshing token, wait for it and then use refreshed token"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F or use empty authorization if refreshing failed"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ("}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"as"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ax},children:[{type:c,value:"Record"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u003E)?."}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aX}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ) {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bj}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aG}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bk}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:bl}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bm}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bn}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aH}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" authorization: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aI}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:")."}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aJ}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bj}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:bo}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bp}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F check for unauthorized errors, if not present, just return result"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aK}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aF}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ) {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:bo}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ok: "}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:"true"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:"unknown"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:bq}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:br}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:bq}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:br}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ba}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bs}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F If unauthorized, refresh token and try again"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"()"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:bt}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:aJ}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aL}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aF}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aL}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aK}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ay}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bu}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:bv}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bw}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aL}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aK}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ay}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" })"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bt}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bk}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F can't refresh token. logging out"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bp}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bu}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:bv}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bw}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aM}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bs}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F success or any non-auth error"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:aG}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:aJ}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F wait for other request's refreshing query to finish, when retry"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aI}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bx}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:by}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aH}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bz}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bA}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aM}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" })"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aG}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:bl}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aI}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bx}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:by}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aH}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bz}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bm}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bA}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aM}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bn}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" });"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-e490f1{color:#A5D6FF}.ct-885872{color:#79C0FF}.ct-d2617a{color:#79C0FF}.ct-1d23eb{color:#FFA657}.ct-d7c44a{color:#79C0FF}.ct-2d0f13{color:#C9D1D9}.ct-ac7490{color:#8B949E}.ct-3dfd25{color:#FFA657}.ct-eaf795{color:#FF7B72}.ct-20119f{color:#D2A8FF}.ct-137cc3{color:#79C0FF}.ct-84995a{color:#79C0FF}.ct-374fca{color:#FF7B72}.ct-826560{color:#FFA657}.ct-f8c9d0{color:#C9D1D9}.ct-1a32a5{color:#D2A8FF}.ct-e7fdeb{color:#FF7B72}.ct-19862f{color:#C9D1D9}.ct-6d61d7{color:#FF7B72}.light .ct-6d61d7{color:#859900}.light .ct-19862f{color:#657B83}.light .ct-e7fdeb{color:#073642}.light .ct-1a32a5{color:#268BD2}.light .ct-f8c9d0{color:#657B83}.light .ct-826560{color:#657B83}.light .ct-374fca{color:#859900}.light .ct-84995a{color:#859900}.light .ct-137cc3{color:#859900}.light .ct-20119f{color:#268BD2}.light .ct-eaf795{color:#073642}.light .ct-3dfd25{color:#268BD2}.light .ct-ac7490{color:#93A1A1}.light .ct-2d0f13{color:#268BD2}.light .ct-d7c44a{color:#B58900}.light .ct-1d23eb{color:#268BD2}.light .ct-d2617a{color:#D33682}.light .ct-885872{color:#268BD2}.light .ct-e490f1{color:#2AA198}"}]}],toc:{title:Y,searchDepth:bB,depth:bB,links:[]}},_type:"markdown",_id:"content:GraphQL:Refresh token in Apollo client.md",_source:"content",_file:"GraphQL\u002FRefresh token in Apollo client.md",_extension:"md"}},prerenderedAt:1667989033300}}("element","span","text","ct-19862f","line"," ","ct-f8c9d0","ct-6d61d7","ct-2d0f13","ct-1a32a5","ct-e7fdeb","=\u003E","(","ct-374fca",":","ct-ac7490"," ","ct-826560","ct-eaf795"," {","string","=",","," "," (","ct-84995a"," ",".","options","return","code"," ","ct-137cc3"," ","const","async"," ","...","refreshingPromise","\u003C","headers",";","ct-1d23eb"," () ","ct-20119f","refreshToken","Promise",") ","new","ct-d7c44a","","isRefreshRequestOptions","errors","ct-885872",");","ct-e490f1","!","||","json"," ","p","typescript","pre","code-inline","hasUnauthorizedError","logout",", ","null","catch","uri","if","newAccessToken","resolve",false,"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client.","export const createApolloClient = (\n url: string,\n logout: () =\u003E void,\n getAuthorizationData: () =\u003E { authorization: string },\n refreshToken: () =\u003E Promise\u003C\n { accessToken: string; refreshToken: string } | undefined\n \u003E,\n) =\u003E\n new ApolloClientBase({\n \u002F\u002F ...other options\n link: ApolloLink.from([\n \u002F\u002F ...other options\n setContext(async (_, { headers }) =\u003E {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","\u002F** Global singleton for refreshing promise *\u002F\nlet refreshingPromise: Promise\u003Cstring\u003E | null = null;\n\n\u002F** Checks if GraphQl errors has unauthenticated error *\u002F\nconst hasUnauthorizedError = (errors: Array\u003C{ code?: ErrorCode }\u003E): boolean =\u003E\n Array.isArray(errors) &&\n errors.some(error =\u003E {\n return error.status === 401; \u002F\u002F Distinguish unauthorized error here\n });\n\n\u002F** Detects if customFetch is sending refresh request *\u002F\nconst isRefreshRequestOptions = (options: RequestInit) =\u003E {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n\u002F** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo *\u002F\nexport const fetchWithTokenRefresh =\n (\n logout: () =\u003E void,\n refreshToken: () =\u003E Promise\u003C\n { accessToken: string; refreshToken: string } | undefined\n \u003E,\n ) =\u003E\n async (uri: string, options: RequestInit): Promise\u003CResponse\u003E =\u003E {\n \u002F\u002F already refreshing token, wait for it and then use refreshed token\n \u002F\u002F or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record\u003Cstring, string\u003E)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() =\u003E {\n \u002F\u002F refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response =\u003E {\n const text = await response.text();\n const json = JSON.parse(text);\n\n \u002F\u002F check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =\u003E\n new Promise\u003Cunknown\u003E(resolve =\u003E {\n resolve(json);\n }),\n text: async () =\u003E\n new Promise\u003Cstring\u003E(resolve =\u003E {\n resolve(text);\n }),\n };\n }\n\n \u002F\u002F If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise\u003Cstring\u003E =\u003E {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() =\u003E {\n refreshingPromise = null;\n\n \u002F\u002F can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n \u002F\u002F success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) =\u003E {\n \u002F\u002F wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () =\u003E {\n \u002F\u002F refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","ct-3dfd25","accessToken","; ","|","\u003E ","&&",") {",": ",")"," ."," {}),","fetch","then","?.","tokens"," });","Refresh Token In Apollo Client","\u002Fgraphql\u002Frefresh-token-in-apollo-client","root","Custom fetch function for this request. You should tune "," and\n"," to match your api.","export","url","void","getAuthorizationData","authorization"," } ","undefined","({","\u002F\u002F ...other options"," };"," }),","fetchWithTokenRefresh"," });","Array","===","RequestInit","body",": () ","await","(() ","\u002F\u002F refreshing token from other request failed, retry without authorization","''"," });","response","();","\u003E("," }),"," }"," .","throw","Error","'Session expired'",", {"," headers: {"," authorization: "," },",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,a_,a$,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA,bB){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:aN,_path:aO}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-4TVlzFXfLi":{_path:aO,_dir:"graphql",_draft:at,_partial:at,_locale:"en",_empty:at,title:aN,description:au,excerpt:{type:aP,children:[{type:a,tag:ag,props:{},children:[{type:c,value:au}]},{type:a,tag:E,props:{code:av,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:c,value:av}]}]}]},{type:a,tag:ag,props:{},children:[{type:c,value:aQ},{type:a,tag:aj,props:{},children:[{type:c,value:ak}]},{type:c,value:aR},{type:a,tag:aj,props:{},children:[{type:c,value:Z}]},{type:c,value:aS}]},{type:a,tag:E,props:{code:aw,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:c,value:aw}]}]}]}]},body:{type:aP,children:[{type:a,tag:ag,props:{},children:[{type:c,value:au}]},{type:a,tag:E,props:{code:av,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:aT}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"createApolloClient"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aU}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:aV}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:aW}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aX}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" },"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ax},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:" { "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:ay}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aY}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:aA}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:aZ}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" \u003E,"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"ApolloClientBase"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:a_}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:a$}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" link: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"ApolloLink"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"from"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"(["}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:a$}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:"setContext"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:"_"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:", { "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" }) "}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" headers: {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aW}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"(),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" },"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ba}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bb}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"HttpLink"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:a_}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" uri: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aU}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" fetch: "}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:bc}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bb}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ]),"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bd}]}]}]}]}]},{type:a,tag:ag,props:{},children:[{type:c,value:aQ},{type:a,tag:aj,props:{},children:[{type:c,value:ak}]},{type:c,value:aR},{type:a,tag:aj,props:{},children:[{type:c,value:Z}]},{type:c,value:aS}]},{type:a,tag:E,props:{code:aw,language:ah},children:[{type:a,tag:ai,props:{},children:[{type:a,tag:E,props:{__ignoreMap:Y},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** Global singleton for refreshing promise *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:k},children:[{type:c,value:"let"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ax},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aA}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** Checks if GraphQl errors has unauthenticated error *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:be}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u003C{ "}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:E}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:"?:"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:"ErrorCode"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:" }\u003E)"}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:be}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"isArray"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:"some"}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"error"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"status"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bf}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:"ct-2a139c"},children:[{type:c,value:"401"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F Distinguish unauthorized error here"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bd}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** Detects if customFetch is sending refresh request *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:s},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:bg}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"try"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:bh}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:bh}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"operationName"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bf}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:"'RefreshToken'"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" } "}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"e"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:"false"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:"};"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo *\u002F"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:h},children:[{type:c,value:aT}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:bc}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ("}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bi}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aV}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bi}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" { accessToken: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:az}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aY}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aA}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:aZ}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"\u003E"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ) "}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:bg}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aF}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:"Response"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F already refreshing token, wait for it and then use refreshed token"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F or use empty authorization if refreshing failed"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aC}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ("}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:"as"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ax},children:[{type:c,value:"Record"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u003E)?."}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aX}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ) {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bj}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aG}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bk}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:bl}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bm}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bn}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aH}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" authorization: "}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:A}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aI}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:am}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:")."}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aJ}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bj}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:bo}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bp}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:I}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:$},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F check for unauthorized errors, if not present, just return result"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:Z}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aK}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ak}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:_}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aF}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ) {"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:bo}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" ok: "}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:"true"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:"unknown"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:bq}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:br}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aE}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:bq}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:as}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:c}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:br}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ba}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bs}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F If unauthorized, refresh token and try again"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:K}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:T}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"()"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:bt}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:aJ}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:aL}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aF}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:Q},children:[{type:c,value:U}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:aB}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:aq}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aL}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aK}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ay}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aD}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bu}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:bv}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bw}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" }"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:aL}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aK}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ay}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" })"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bt}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bk}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:X},children:[{type:c,value:an}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:P}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F can't refresh token. logging out"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:al}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bp}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:bu}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:W}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:G},children:[{type:c,value:bv}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bw}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aa}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aM}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bs}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F success or any non-auth error"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:M}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:g},children:[{type:c,value:aG}]},{type:a,tag:b,props:{class:S},children:[{type:c,value:aJ}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:y}]},{type:a,tag:b,props:{class:r},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:n},children:[{type:c,value:o}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:z},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:V}]},{type:a,tag:b,props:{class:s},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:"\u002F\u002F wait for other request's refreshing query to finish, when retry"}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aI}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bx}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:by}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aH}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bz}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ar}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bA}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aM}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" })"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aG}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:ao}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:J}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:R}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:t}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:bl}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:H}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:D}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:j},children:[{type:c,value:aI}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:ap}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:bx}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:by}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:af}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:L}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:m}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:C}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:f}]},{type:a,tag:b,props:{class:h},children:[{type:c,value:ad}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:aH}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bz}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:bm}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bA}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:aM}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:bn}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" });"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:" };"}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-1e8bd7{color:#A5D6FF}.ct-c00115{color:#79C0FF}.ct-2a139c{color:#79C0FF}.ct-3cdd81{color:#FFA657}.ct-69ed27{color:#79C0FF}.ct-85eb3c{color:#C9D1D9}.ct-086f2e{color:#8B949E}.ct-fa6d9f{color:#FFA657}.ct-876196{color:#FF7B72}.ct-939946{color:#D2A8FF}.ct-2ff4e5{color:#79C0FF}.ct-aaf53c{color:#79C0FF}.ct-3b7c9f{color:#FF7B72}.ct-bf2a04{color:#FFA657}.ct-222e26{color:#C9D1D9}.ct-833262{color:#D2A8FF}.ct-b01d92{color:#FF7B72}.ct-55db43{color:#C9D1D9}.ct-ad3715{color:#FF7B72}.light .ct-ad3715{color:#859900}.light .ct-55db43{color:#657B83}.light .ct-b01d92{color:#073642}.light .ct-833262{color:#268BD2}.light .ct-222e26{color:#657B83}.light .ct-bf2a04{color:#657B83}.light .ct-3b7c9f{color:#859900}.light .ct-aaf53c{color:#859900}.light .ct-2ff4e5{color:#859900}.light .ct-939946{color:#268BD2}.light .ct-876196{color:#073642}.light .ct-fa6d9f{color:#268BD2}.light .ct-086f2e{color:#93A1A1}.light .ct-85eb3c{color:#268BD2}.light .ct-69ed27{color:#B58900}.light .ct-3cdd81{color:#268BD2}.light .ct-2a139c{color:#D33682}.light .ct-c00115{color:#268BD2}.light .ct-1e8bd7{color:#2AA198}"}]}],toc:{title:Y,searchDepth:bB,depth:bB,links:[]}},_type:"markdown",_id:"content:GraphQL:Refresh token in Apollo client.md",_source:"content",_file:"GraphQL\u002FRefresh token in Apollo client.md",_extension:"md"}},prerenderedAt:1668068046586}}("element","span","text","ct-55db43","line"," ","ct-222e26","ct-ad3715","ct-85eb3c","ct-833262","ct-b01d92","=\u003E","(","ct-3b7c9f",":","ct-086f2e"," ","ct-bf2a04","ct-876196"," {","string","=",","," "," (","ct-aaf53c"," ",".","options","return","code"," ","ct-2ff4e5"," ","const","async"," ","...","refreshingPromise","\u003C","headers",";","ct-3cdd81"," () ","ct-939946","refreshToken","Promise",") ","new","ct-69ed27","","isRefreshRequestOptions","errors","ct-c00115",");","ct-1e8bd7","!","||","json"," ","p","typescript","pre","code-inline","hasUnauthorizedError","logout",", ","null","catch","uri","if","newAccessToken","resolve",false,"If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client.","export const createApolloClient = (\n url: string,\n logout: () =\u003E void,\n getAuthorizationData: () =\u003E { authorization: string },\n refreshToken: () =\u003E Promise\u003C\n { accessToken: string; refreshToken: string } | undefined\n \u003E,\n) =\u003E\n new ApolloClientBase({\n \u002F\u002F ...other options\n link: ApolloLink.from([\n \u002F\u002F ...other options\n setContext(async (_, { headers }) =\u003E {\n return {\n headers: {\n ...headers,\n ...getAuthorizationData(),\n },\n };\n }),\n new HttpLink({\n uri: url,\n fetch: fetchWithTokenRefresh(logout, refreshToken),\n }),\n ]),\n });\n","\u002F** Global singleton for refreshing promise *\u002F\nlet refreshingPromise: Promise\u003Cstring\u003E | null = null;\n\n\u002F** Checks if GraphQl errors has unauthenticated error *\u002F\nconst hasUnauthorizedError = (errors: Array\u003C{ code?: ErrorCode }\u003E): boolean =\u003E\n Array.isArray(errors) &&\n errors.some(error =\u003E {\n return error.status === 401; \u002F\u002F Distinguish unauthorized error here\n });\n\n\u002F** Detects if customFetch is sending refresh request *\u002F\nconst isRefreshRequestOptions = (options: RequestInit) =\u003E {\n try {\n const body = JSON.parse(options?.body as string);\n return body.operationName === 'RefreshToken';\n } catch (e) {\n return false;\n }\n};\n\n\u002F** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo *\u002F\nexport const fetchWithTokenRefresh =\n (\n logout: () =\u003E void,\n refreshToken: () =\u003E Promise\u003C\n { accessToken: string; refreshToken: string } | undefined\n \u003E,\n ) =\u003E\n async (uri: string, options: RequestInit): Promise\u003CResponse\u003E =\u003E {\n \u002F\u002F already refreshing token, wait for it and then use refreshed token\n \u002F\u002F or use empty authorization if refreshing failed\n if (\n !isRefreshRequestOptions(options) &&\n refreshingPromise &&\n (options.headers as Record\u003Cstring, string\u003E)?.authorization\n ) {\n const newAccessToken = await refreshingPromise\n .catch(() =\u003E {\n \u002F\u002F refreshing token from other request failed, retry without authorization\n return '';\n });\n \n options.headers = {\n ...(options.headers || {}),\n authorization: newAccessToken,\n };\n }\n\n return fetch(uri, options).then(async response =\u003E {\n const text = await response.text();\n const json = JSON.parse(text);\n\n \u002F\u002F check for unauthorized errors, if not present, just return result\n if (\n isRefreshRequestOptions(options) ||\n !json?.errors ||\n !Array.isArray(json.errors) ||\n !hasUnauthorizedError(json.errors)\n ) {\n return {\n ...response,\n ok: true,\n json: async () =\u003E\n new Promise\u003Cunknown\u003E(resolve =\u003E {\n resolve(json);\n }),\n text: async () =\u003E\n new Promise\u003Cstring\u003E(resolve =\u003E {\n resolve(text);\n }),\n };\n }\n\n \u002F\u002F If unauthorized, refresh token and try again\n if (!refreshingPromise) {\n refreshingPromise = refreshToken()\n .then(async (tokens): Promise\u003Cstring\u003E =\u003E {\n refreshingPromise = null;\n\n if (!tokens?.accessToken) {\n throw new Error('Session expired');\n }\n\n return tokens?.accessToken;\n })\n .catch(() =\u003E {\n refreshingPromise = null;\n\n \u002F\u002F can't refresh token. logging out\n logout();\n throw new Error('Session expired');\n });\n }\n\n \u002F\u002F success or any non-auth error\n return refreshingPromise\n .then(async (newAccessToken: string) =\u003E {\n \u002F\u002F wait for other request's refreshing query to finish, when retry\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: newAccessToken,\n },\n });\n })\n .catch(async () =\u003E {\n \u002F\u002F refreshing token from other request failed, retry without authorization\n\n return fetch(uri, {\n ...options,\n headers: {\n ...(options.headers || {}),\n authorization: '',\n },\n });\n });\n });\n };\n\n","ct-fa6d9f","accessToken","; ","|","\u003E ","&&",") {",": ",")"," ."," {}),","fetch","then","?.","tokens"," });","Refresh Token In Apollo Client","\u002Fgraphql\u002Frefresh-token-in-apollo-client","root","Custom fetch function for this request. You should tune "," and\n"," to match your api.","export","url","void","getAuthorizationData","authorization"," } ","undefined","({","\u002F\u002F ...other options"," };"," }),","fetchWithTokenRefresh"," });","Array","===","RequestInit","body",": () ","await","(() ","\u002F\u002F refreshing token from other request failed, retry without authorization","''"," });","response","();","\u003E("," }),"," }"," .","throw","Error","'Session expired'",", {"," headers: {"," authorization: "," },",2))
\ No newline at end of file
diff --git a/graphql/refresh-token-in-apollo-client/index.html b/graphql/refresh-token-in-apollo-client/index.html
index 9379bd8..d28f051 100644
--- a/graphql/refresh-token-in-apollo-client/index.html
+++ b/graphql/refresh-token-in-apollo-client/index.html
@@ -1,7 +1,7 @@
-Refresh Token In Apollo Client • Obsidian Garden
-
Refresh Token In Apollo Client
If your GraphQL api needs token refresh option, you can pass custom fetch function for Apollo Client.
Custom fetch function for this request. You should tune hasUnauthorizedError and
+isRefreshRequestOptions to match your api.
/** Global singleton for refreshing promise */letrefreshingPromise:Promise<string> |null=null;/** Checks if GraphQl errors has unauthenticated error */consthasUnauthorizedError= (errors:Array<{ code?:ErrorCode }>):=>Array.isArray(errors) &&errors.some=> {returnerror.status===401; // Distinguish unauthorized error here });/** Detects if customFetch is sending refresh request */constisRefreshRequestOptions= (options:RequestInit) => {try {constbody=string);returnbody.operationName==='RefreshToken'; } catch (e) {returnfalse; }};/** fetchWithTokenRefresh is a custom fetch function with token refresh for apollo */exportconstfetchWithTokenRefresh= (logout: () =>void,refreshToken: () => { accessToken: string; refreshToken: string } |undefined>, ) =>async (uri:string, options:RequestInit):Promise<Response> => {// already refreshing token, wait for it and then use refreshed token// or use empty authorization if refreshing failedif (!isRefreshRequestOptions(options) &&refreshingPromise&& (options.headersasRecord<string, string>)?.authorization ) {constnewAccessToken=awaitrefreshingPromise .catch(() => {// refreshing token from other request failed, retry without authorizationreturn''; });options.headers= {...(options.headers|| {}), authorization: newAccessToken, }; }returnfetch(uri, options).then(asyncconsttext=awaitresponse.text();constjson=// check for unauthorized errors, if not present, just return resultif (isRefreshRequestOptions(options) ||!json?.errors||!hasUnauthorizedError(json.errors) ) {return {...response, ok: true,json: async () =>newPromise<unknown>(resolve=> {resolve(json); }),text: async () =>newPromise<string>(resolve=> {resolve(text); }), }; }// If unauthorized, refresh token and try againif (!refreshingPromise) {refreshingPromise=refreshToken() .then(async (tokens):Promise<string> => {refreshingPromise=null;if (!tokens?.accessToken) {thrownewError('Session expired'); }returntokens?.accessToken; }) .catch(() => {refreshingPromise=null;// can't refresh token. logging outlogout();thrownewError('Session expired'); }); }// success or any non-auth errorreturnrefreshingPromise .then(async (newAccessToken:string) => {// wait for other request's refreshing query to finish, when retryreturnfetch(uri, {...options, headers: {...(options.headers|| {}), authorization: newAccessToken, }, }); }) .catch(async () => {// refreshing token from other request failed, retry without authorizationreturnfetch(uri, {...options, headers: {...(options.headers|| {}), authorization: '', }, }); }); }); };
\ No newline at end of file
diff --git a/index.html b/index.html
index f2fb39c..7789439 100644
--- a/index.html
+++ b/index.html
@@ -1,6 +1,6 @@
-Obsidian Garden
-
Welcome to my Obsidian Garden
Obsidian is a note-taking app, that I use to store chunks of code and technical documentation.
\ No newline at end of file
diff --git a/linux/gitea-for-git-hosting/_payload.js b/linux/gitea-for-git-hosting/_payload.js
index f5c0214..47dd1f2 100644
--- a/linux/gitea-for-git-hosting/_payload.js
+++ b/linux/gitea-for-git-hosting/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:t,_path:u},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-t1CslyFV8V":{_path:u,_dir:"linux",_draft:n,_partial:n,_locale:"en",_empty:n,title:t,description:"Self-hosted #git repositories with gitea and #docker.",excerpt:{type:v,children:[{type:a,tag:w,props:{},children:[{type:c,value:x},{type:a,tag:y,props:{href:z,rel:[A]},children:[{type:c,value:k}]},{type:c,value:B}]},{type:a,tag:C,props:{id:o},children:[{type:c,value:p}]},{type:a,tag:m,props:{code:q,language:D},children:[{type:a,tag:E,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:c,value:q}]}]}]}]},body:{type:v,children:[{type:a,tag:w,props:{},children:[{type:c,value:x},{type:a,tag:y,props:{href:z,rel:[A]},children:[{type:c,value:k}]},{type:c,value:B}]},{type:a,tag:C,props:{id:o},children:[{type:c,value:p}]},{type:a,tag:m,props:{code:q,language:D},children:[{type:a,tag:E,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:"version"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"3\""}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"external"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:"ct-c68ffc"},children:[{type:c,value:"false"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:"services"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"server"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"image"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"gitea\u002Fgitea:latest"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"container_name"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"environment"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"USER_UID=1000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"USER_GID=1000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"restart"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"always"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"volumes"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:".\u002Fvar\u002Flib\u002Fgitea:\u002Fdata"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:".\u002Fetc\u002Fgitea:\u002Fetc\u002Fgitea"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u002Fetc\u002Ftimezone:\u002Fetc\u002Ftimezone:ro"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"ports"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"3000:3000\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"222:22\""}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-c68ffc{color:#79C0FF}.ct-f868d0{color:#A5D6FF}.ct-1d1885{color:#C9D1D9}.ct-dfedfa{color:#7EE787}.light .ct-dfedfa{color:#268BD2}.light .ct-1d1885{color:#657B83}.light .ct-f868d0{color:#2AA198}.light .ct-c68ffc{color:#B58900}"}]}],toc:{title:r,searchDepth:s,depth:s,links:[{id:o,depth:s,text:p}]}},_type:"markdown",_id:"content:Linux:Gitea for git hosting.md",_source:"content",_file:"Linux\u002FGitea for git hosting.md",_extension:"md"}},prerenderedAt:1667989033419}}("element","span","text","ct-1d1885","line","ct-dfedfa","ct-f868d0"," - ",":"," ","gitea",": ","code",false,"setting-up-with-docker-compose","Setting up with docker-compose","version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea\u002Fgitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - .\u002Fvar\u002Flib\u002Fgitea:\u002Fdata\n - .\u002Fetc\u002Fgitea:\u002Fetc\u002Fgitea\n - \u002Fetc\u002Ftimezone:\u002Fetc\u002Ftimezone:ro\n - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","",2,"Gitea For Git Hosting","\u002Flinux\u002Fgitea-for-git-hosting","root","p","Self-hosted #git repositories with ","a","https:\u002F\u002Fgitea.io\u002Fru-ru\u002F","nofollow"," and #docker.","h2","yaml","pre","networks"," "))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:t,_path:u},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-t1CslyFV8V":{_path:u,_dir:"linux",_draft:n,_partial:n,_locale:"en",_empty:n,title:t,description:"Self-hosted #git repositories with gitea and #docker.",excerpt:{type:v,children:[{type:a,tag:w,props:{},children:[{type:c,value:x},{type:a,tag:y,props:{href:z,rel:[A]},children:[{type:c,value:k}]},{type:c,value:B}]},{type:a,tag:C,props:{id:o},children:[{type:c,value:p}]},{type:a,tag:m,props:{code:q,language:D},children:[{type:a,tag:E,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:c,value:q}]}]}]}]},body:{type:v,children:[{type:a,tag:w,props:{},children:[{type:c,value:x},{type:a,tag:y,props:{href:z,rel:[A]},children:[{type:c,value:k}]},{type:c,value:B}]},{type:a,tag:C,props:{id:o},children:[{type:c,value:p}]},{type:a,tag:m,props:{code:q,language:D},children:[{type:a,tag:E,props:{},children:[{type:a,tag:m,props:{__ignoreMap:r},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:"version"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"3\""}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:k}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"external"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:"ct-8d9103"},children:[{type:c,value:"false"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:f},children:[{type:c,value:"services"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:G}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"server"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"image"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"gitea\u002Fgitea:latest"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"container_name"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"environment"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"USER_UID=1000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"USER_GID=1000"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"restart"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:l}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"always"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:F}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:k}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"volumes"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:".\u002Fvar\u002Flib\u002Fgitea:\u002Fdata"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:".\u002Fetc\u002Fgitea:\u002Fetc\u002Fgitea"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u002Fetc\u002Ftimezone:\u002Fetc\u002Ftimezone:ro"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"ports"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"3000:3000\""}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:"\"222:22\""}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-8d9103{color:#79C0FF}.ct-591a8d{color:#A5D6FF}.ct-776d60{color:#C9D1D9}.ct-b2192d{color:#7EE787}.light .ct-b2192d{color:#268BD2}.light .ct-776d60{color:#657B83}.light .ct-591a8d{color:#2AA198}.light .ct-8d9103{color:#B58900}"}]}],toc:{title:r,searchDepth:s,depth:s,links:[{id:o,depth:s,text:p}]}},_type:"markdown",_id:"content:Linux:Gitea for git hosting.md",_source:"content",_file:"Linux\u002FGitea for git hosting.md",_extension:"md"}},prerenderedAt:1668068046694}}("element","span","text","ct-776d60","line","ct-b2192d","ct-591a8d"," - ",":"," ","gitea",": ","code",false,"setting-up-with-docker-compose","Setting up with docker-compose","version: \"3\"\n\nnetworks:\n gitea:\n external: false\nservices:\n server:\n image: gitea\u002Fgitea:latest\n container_name: gitea\n environment:\n - USER_UID=1000\n - USER_GID=1000\n restart: always\n networks:\n - gitea\n volumes:\n - .\u002Fvar\u002Flib\u002Fgitea:\u002Fdata\n - .\u002Fetc\u002Fgitea:\u002Fetc\u002Fgitea\n - \u002Fetc\u002Ftimezone:\u002Fetc\u002Ftimezone:ro\n - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n ports:\n - \"3000:3000\"\n - \"222:22\"\n","",2,"Gitea For Git Hosting","\u002Flinux\u002Fgitea-for-git-hosting","root","p","Self-hosted #git repositories with ","a","https:\u002F\u002Fgitea.io\u002Fru-ru\u002F","nofollow"," and #docker.","h2","yaml","pre","networks"," "))
\ No newline at end of file
diff --git a/linux/gitea-for-git-hosting/index.html b/linux/gitea-for-git-hosting/index.html
index 7bc793b..49981c0 100644
--- a/linux/gitea-for-git-hosting/index.html
+++ b/linux/gitea-for-git-hosting/index.html
@@ -1,6 +1,6 @@
-Gitea For Git Hosting • Obsidian Garden
-
Gitea For Git Hosting
Self-hosted #git repositories with gitea and #docker.
\ No newline at end of file
diff --git a/linux/resume-or-start-screen-session/_payload.js b/linux/resume-or-start-screen-session/_payload.js
index 44f6196..12e06b9 100644
--- a/linux/resume-or-start-screen-session/_payload.js
+++ b/linux/resume-or-start-screen-session/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:j,_path:k},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-KZPaWw5ajQ":{_path:k,_dir:"linux",_draft:f,_partial:f,_locale:"en",_empty:f,title:j,description:"Running this script will enter currently running screen session or will start new one.",excerpt:{type:l,children:[{type:a,tag:m,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:d,props:{code:g,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:d,props:{__ignoreMap:h},children:[{type:b,value:g}]}]}]}]},body:{type:l,children:[{type:a,tag:m,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:d,props:{code:g,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:d,props:{__ignoreMap:h},children:[{type:a,tag:c,props:{class:"line"},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"( screen -r bash "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" ( screen -d bash "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:"&&"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" screen -r bash "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" screen -SAm bash bash ) )"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-ec43e4{color:#FF7B72}.ct-db49b0{color:#C9D1D9}.light .ct-db49b0{color:#657B83}.light .ct-ec43e4{color:#859900}"}]}],toc:{title:h,searchDepth:u,depth:u,links:[]}},_type:"markdown",_id:"content:Linux:Resume or start screen session.md",_source:"content",_file:"Linux\u002FResume or start screen session.md",_extension:"md"}},prerenderedAt:1667989033515}}("element","text","span","code","ct-db49b0",false,"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","","ct-ec43e4","Resume Or Start Screen Session","\u002Flinux\u002Fresume-or-start-screen-session","root","p","Running this script will enter currently running ","code-inline","screen"," session or will start new one.","shell","pre","||",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:j,_path:k},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-KZPaWw5ajQ":{_path:k,_dir:"linux",_draft:f,_partial:f,_locale:"en",_empty:f,title:j,description:"Running this script will enter currently running screen session or will start new one.",excerpt:{type:l,children:[{type:a,tag:m,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:d,props:{code:g,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:d,props:{__ignoreMap:h},children:[{type:b,value:g}]}]}]}]},body:{type:l,children:[{type:a,tag:m,props:{},children:[{type:b,value:n},{type:a,tag:o,props:{},children:[{type:b,value:p}]},{type:b,value:q}]},{type:a,tag:d,props:{code:g,language:r},children:[{type:a,tag:s,props:{},children:[{type:a,tag:d,props:{__ignoreMap:h},children:[{type:a,tag:c,props:{class:"line"},children:[{type:a,tag:c,props:{class:e},children:[{type:b,value:"( screen -r bash "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" ( screen -d bash "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:"&&"}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" screen -r bash "}]},{type:a,tag:c,props:{class:i},children:[{type:b,value:t}]},{type:a,tag:c,props:{class:e},children:[{type:b,value:" screen -SAm bash bash ) )"}]}]}]}]}]},{type:a,tag:"style",children:[{type:b,value:".ct-25b057{color:#FF7B72}.ct-601819{color:#C9D1D9}.light .ct-601819{color:#657B83}.light .ct-25b057{color:#859900}"}]}],toc:{title:h,searchDepth:u,depth:u,links:[]}},_type:"markdown",_id:"content:Linux:Resume or start screen session.md",_source:"content",_file:"Linux\u002FResume or start screen session.md",_extension:"md"}},prerenderedAt:1668068046793}}("element","text","span","code","ct-601819",false,"( screen -r bash || ( screen -d bash && screen -r bash || screen -SAm bash bash ) )\n","","ct-25b057","Resume Or Start Screen Session","\u002Flinux\u002Fresume-or-start-screen-session","root","p","Running this script will enter currently running ","code-inline","screen"," session or will start new one.","shell","pre","||",2))
\ No newline at end of file
diff --git a/linux/resume-or-start-screen-session/index.html b/linux/resume-or-start-screen-session/index.html
index c937173..aaa1d86 100644
--- a/linux/resume-or-start-screen-session/index.html
+++ b/linux/resume-or-start-screen-session/index.html
@@ -1,6 +1,6 @@
-Resume Or Start Screen Session • Obsidian Garden
-
Resume Or Start Screen Session
Running this script will enter currently running screen session or will start new one.
\ No newline at end of file
diff --git a/linux/rsync-file-with-ssh/_payload.js b/linux/rsync-file-with-ssh/_payload.js
index 3909163..fffefb3 100644
--- a/linux/rsync-file-with-ssh/_payload.js
+++ b/linux/rsync-file-with-ssh/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:p,_path:q},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-3kXgAF354y":{_path:q,_dir:"linux",_draft:l,_partial:l,_locale:"en",_empty:l,title:p,description:m,excerpt:{type:r,children:[{type:a,tag:s,props:{},children:[{type:c,value:m}]},{type:a,tag:k,props:{code:n,language:t},children:[{type:a,tag:u,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:c,value:n}]}]}]}]},body:{type:r,children:[{type:a,tag:s,props:{},children:[{type:c,value:m}]},{type:a,tag:k,props:{code:n,language:t},children:[{type:a,tag:u,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:"ct-06a595"},children:[{type:c,value:"#!\u002Fbin\u002Fbash"}]}]},{type:a,tag:b,props:{class:d},children:[]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"PORT=22"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"USER=user"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"HOST=example.com"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"REMOTE_PATH=\u002Ftmp"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"REMOTE_FILE=sample.text"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"DEST_PATH=.\u002F"}]}]},{type:a,tag:b,props:{class:d},children:[]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"rsync -a -e "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"ssh -p "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"PORT"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:e},children:[{type:c,value:" -P -v \\"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"USER"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"@"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"HOST"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:":"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"REMOTE_PATH"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\u002F"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"REMOTE_FILE"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:e},children:[{type:c,value:" \\"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"DEST_PATH"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-00a1d6{color:#C9D1D9}.ct-49822f{color:#C9D1D9}.ct-20787d{color:#A5D6FF}.ct-ff3e51{color:#C9D1D9}.ct-06a595{color:#8B949E}.light .ct-06a595{color:#93A1A1}.light .ct-ff3e51{color:#657B83}.light .ct-20787d{color:#2AA198}.light .ct-49822f{color:#859900}.light .ct-00a1d6{color:#268BD2}"}]}],toc:{title:o,searchDepth:w,depth:w,links:[]}},_type:"markdown",_id:"content:Linux:Rsync file with SSH.md",_source:"content",_file:"Linux\u002FRsync file with SSH.md",_extension:"md"}},prerenderedAt:1667989033546}}("element","span","text","line","ct-ff3e51","ct-20787d","ct-49822f","$","ct-00a1d6","\"","code",false,"Downloads file from #SSH with rsync and puts it in current folder.","#!\u002Fbin\u002Fbash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=\u002Ftmp\nREMOTE_FILE=sample.text\nDEST_PATH=.\u002F\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH\u002F$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","","Rsync File With SSH","\u002Flinux\u002Frsync-file-with-ssh","root","p","bash","pre"," ",2))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:p,_path:q},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-3kXgAF354y":{_path:q,_dir:"linux",_draft:l,_partial:l,_locale:"en",_empty:l,title:p,description:m,excerpt:{type:r,children:[{type:a,tag:s,props:{},children:[{type:c,value:m}]},{type:a,tag:k,props:{code:n,language:t},children:[{type:a,tag:u,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:c,value:n}]}]}]}]},body:{type:r,children:[{type:a,tag:s,props:{},children:[{type:c,value:m}]},{type:a,tag:k,props:{code:n,language:t},children:[{type:a,tag:u,props:{},children:[{type:a,tag:k,props:{__ignoreMap:o},children:[{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:"ct-513342"},children:[{type:c,value:"#!\u002Fbin\u002Fbash"}]}]},{type:a,tag:b,props:{class:d},children:[]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"PORT=22"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"USER=user"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"HOST=example.com"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"REMOTE_PATH=\u002Ftmp"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"REMOTE_FILE=sample.text"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"DEST_PATH=.\u002F"}]}]},{type:a,tag:b,props:{class:d},children:[]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:"rsync -a -e "}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\"ssh -p "}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"PORT"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:e},children:[{type:c,value:" -P -v \\"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"USER"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"@"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"HOST"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:":"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"REMOTE_PATH"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"\u002F"}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"REMOTE_FILE"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:e},children:[{type:c,value:" \\"}]}]},{type:a,tag:b,props:{class:d},children:[{type:a,tag:b,props:{class:e},children:[{type:c,value:v}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]},{type:a,tag:b,props:{class:g},children:[{type:c,value:h}]},{type:a,tag:b,props:{class:i},children:[{type:c,value:"DEST_PATH"}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:j}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-8bb2e9{color:#C9D1D9}.ct-2a82e3{color:#C9D1D9}.ct-c53a8d{color:#A5D6FF}.ct-04df41{color:#C9D1D9}.ct-513342{color:#8B949E}.light .ct-513342{color:#93A1A1}.light .ct-04df41{color:#657B83}.light .ct-c53a8d{color:#2AA198}.light .ct-2a82e3{color:#859900}.light .ct-8bb2e9{color:#268BD2}"}]}],toc:{title:o,searchDepth:w,depth:w,links:[]}},_type:"markdown",_id:"content:Linux:Rsync file with SSH.md",_source:"content",_file:"Linux\u002FRsync file with SSH.md",_extension:"md"}},prerenderedAt:1668068046820}}("element","span","text","line","ct-04df41","ct-c53a8d","ct-2a82e3","$","ct-8bb2e9","\"","code",false,"Downloads file from #SSH with rsync and puts it in current folder.","#!\u002Fbin\u002Fbash\n\nPORT=22\nUSER=user\nHOST=example.com\nREMOTE_PATH=\u002Ftmp\nREMOTE_FILE=sample.text\nDEST_PATH=.\u002F\n\nrsync -a -e \"ssh -p $PORT\" -P -v \\\n \"$USER@$HOST:$REMOTE_PATH\u002F$REMOTE_FILE\" \\\n \"$DEST_PATH\"\n","","Rsync File With SSH","\u002Flinux\u002Frsync-file-with-ssh","root","p","bash","pre"," ",2))
\ No newline at end of file
diff --git a/linux/rsync-file-with-ssh/index.html b/linux/rsync-file-with-ssh/index.html
index 215acf2..5325262 100644
--- a/linux/rsync-file-with-ssh/index.html
+++ b/linux/rsync-file-with-ssh/index.html
@@ -1,6 +1,6 @@
-Rsync File With SSH • Obsidian Garden
-
Rsync File With SSH
Downloads file from #SSH with rsync and puts it in current folder.
#!/bin/bashPORT=22USER=userHOST=example.comREMOTE_PATH=/tmpREMOTE_FILE=sample.textDEST_PATH=./rsync -a -e "ssh -p $PORT" -P -v \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE" \"$DEST_PATH"
+
Rsync File With SSH
Downloads file from #SSH with rsync and puts it in current folder.
#!/bin/bashPORT=22USER=userHOST=example.comREMOTE_PATH=/tmpREMOTE_FILE=sample.textDEST_PATH=./rsync -a -e "ssh -p $PORT" -P -v \"$USER@$HOST:$REMOTE_PATH/$REMOTE_FILE" \"$DEST_PATH"
\ No newline at end of file
diff --git a/linux/setting-up-nginx/_payload.js b/linux/setting-up-nginx/_payload.js
index 404bbea..8d87d1d 100644
--- a/linux/setting-up-nginx/_payload.js
+++ b/linux/setting-up-nginx/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:P,_path:Q},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-jVEFIZPtgx":{_path:Q,_dir:"linux",_draft:C,_partial:C,_locale:"en",_empty:C,title:P,description:j,excerpt:{type:R,children:[{type:a,tag:l,props:{id:D},children:[{type:c,value:E}]},{type:a,tag:h,props:{code:F,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:c,value:F}]}]}]},{type:a,tag:l,props:{id:G},children:[{type:c,value:H}]},{type:a,tag:h,props:{code:I,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:c,value:I}]}]}]},{type:a,tag:l,props:{id:J},children:[{type:c,value:K}]},{type:a,tag:S,props:{},children:[{type:c,value:T},{type:a,tag:o,props:{},children:[{type:c,value:U}]},{type:c,value:V},{type:a,tag:o,props:{},children:[{type:c,value:W}]},{type:c,value:X},{type:a,tag:o,props:{},children:[{type:c,value:Y}]},{type:c,value:Z},{type:a,tag:_,props:{href:s,rel:[$]},children:[{type:c,value:s}]},{type:c,value:aa}]},{type:a,tag:h,props:{code:L,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:c,value:L}]}]}]}]},body:{type:R,children:[{type:a,tag:l,props:{id:D},children:[{type:c,value:E}]},{type:a,tag:h,props:{code:F,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:ad},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:af}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"# First attempt to serve request as file, then"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"# as directory, then fall back to displaying a 404."}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:"ct-b7659c"},children:[{type:c,value:g}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ag}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]}]}]}]},{type:a,tag:l,props:{id:G},children:[{type:c,value:H}]},{type:a,tag:h,props:{code:I,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" client_max_body_size "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"200M;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]}]}]}]},{type:a,tag:l,props:{id:J},children:[{type:c,value:K}]},{type:a,tag:S,props:{},children:[{type:c,value:T},{type:a,tag:o,props:{},children:[{type:c,value:U}]},{type:c,value:V},{type:a,tag:o,props:{},children:[{type:c,value:W}]},{type:c,value:X},{type:a,tag:o,props:{},children:[{type:c,value:Y}]},{type:c,value:Z},{type:a,tag:_,props:{href:s,rel:[$]},children:[{type:c,value:s}]},{type:c,value:aa}]},{type:a,tag:h,props:{code:L,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"80;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:ah}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ai}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"return"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:"ct-05c5ce"},children:[{type:c,value:"301"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" https:\u002F\u002Fnext.vault48.org"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"request_uri"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"443 ssl http2;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"[::]:443 ssl http2;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"# managed by Certbot"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" ssl_certificate "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Ffullchain.pem; "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" ssl_certificate_key "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fprivkey.pem; "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" ssl_trusted_certificate "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fchain.pem;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:ah}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ai}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:ad},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:af}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" proxy_redirect "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"off;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"Host "}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"host"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"X-Real-IP "}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"remote_addr"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"X-Forwarded-For "}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"proxy_add_x_forwarded_for"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" proxy_pass "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"http:\u002F\u002F127.0.0.1:8080;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ag}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-71145b{color:#C9D1D9}.ct-cd729e{color:#C9D1D9}.ct-05c5ce{color:#79C0FF}.ct-e9f30b{color:#FF7B72}.ct-b7659c{color:#FF7B72}.ct-84152a{color:#FFA657}.ct-2944ef{color:#FF7B72}.ct-f39477{color:#C9D1D9}.ct-1fab34{color:#8B949E}.ct-19a258{color:#C9D1D9}.ct-40c19d{color:#FF7B72}.light .ct-40c19d{color:#073642}.light .ct-19a258{color:#657B83}.light .ct-1fab34{color:#93A1A1}.light .ct-f39477{color:#657B83}.light .ct-2944ef{color:#073642}.light .ct-84152a{color:#657B83}.light .ct-b7659c{color:#657B83}.light .ct-e9f30b{color:#859900}.light .ct-05c5ce{color:#D33682}.light .ct-cd729e{color:#859900}.light .ct-71145b{color:#268BD2}"}]}],toc:{title:j,searchDepth:r,depth:r,links:[{id:D,depth:r,text:E},{id:G,depth:r,text:H},{id:J,depth:r,text:K}]}},_type:"markdown",_id:"content:Linux:Setting up NGINX.md",_source:"content",_file:"Linux\u002FSetting up NGINX.md",_extension:"md"}},prerenderedAt:1667989033573}}("element","span","text","ct-19a258","line","ct-e9f30b"," ","code"," ","","ct-1fab34","h2","nginx","pre","code-inline","ct-f39477"," ",2,"https:\u002F\u002Fnext.vault48.org","ct-40c19d","server"," {","# ...","}","ct-cd729e","$","ct-71145b",";",false,"fallback-url-for-spa-s","Fallback url for SPA-s","server {\n # ...\n location \u002F {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri\u002F =404;\n }\n # ...\n}\n","set-up-for-uploads","Set up for uploads","server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","reverse-proxy-for-https","Reverse proxy for https","server {\n listen 80;\n server_name next.vault48.org;\n return 301 https:\u002F\u002Fnext.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Ffullchain.pem; \n ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fprivkey.pem; \n ssl_trusted_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fchain.pem;\n \n server_name next.vault48.org;\n \n location \u002F {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http:\u002F\u002F127.0.0.1:8080;\n }\n}\n"," "," listen "," proxy_set_header ","Setting Up NGINX","\u002Flinux\u002Fsetting-up-nginx","root","p","Given config forwards ","https"," traffic to ","http"," on port ","8080"," for ","a","nofollow","\nwith http2 support if possible.","ct-2944ef","location","ct-84152a","\u002F ","{"," }"," server_name ","next.vault48.org;"))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac,ad,ae,af,ag,ah,ai){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:P,_path:Q},{title:"SSH",_path:"\u002Flinux\u002Fssh"}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-jVEFIZPtgx":{_path:Q,_dir:"linux",_draft:C,_partial:C,_locale:"en",_empty:C,title:P,description:j,excerpt:{type:R,children:[{type:a,tag:l,props:{id:D},children:[{type:c,value:E}]},{type:a,tag:h,props:{code:F,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:c,value:F}]}]}]},{type:a,tag:l,props:{id:G},children:[{type:c,value:H}]},{type:a,tag:h,props:{code:I,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:c,value:I}]}]}]},{type:a,tag:l,props:{id:J},children:[{type:c,value:K}]},{type:a,tag:S,props:{},children:[{type:c,value:T},{type:a,tag:o,props:{},children:[{type:c,value:U}]},{type:c,value:V},{type:a,tag:o,props:{},children:[{type:c,value:W}]},{type:c,value:X},{type:a,tag:o,props:{},children:[{type:c,value:Y}]},{type:c,value:Z},{type:a,tag:_,props:{href:s,rel:[$]},children:[{type:c,value:s}]},{type:c,value:aa}]},{type:a,tag:h,props:{code:L,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:c,value:L}]}]}]}]},body:{type:R,children:[{type:a,tag:l,props:{id:D},children:[{type:c,value:E}]},{type:a,tag:h,props:{code:F,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:ad},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:af}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"# First attempt to serve request as file, then"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"# as directory, then fall back to displaying a 404."}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:"ct-135116"},children:[{type:c,value:g}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ag}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]}]}]}]},{type:a,tag:l,props:{id:G},children:[{type:c,value:H}]},{type:a,tag:h,props:{code:I,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" client_max_body_size "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"200M;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:w}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]}]}]}]},{type:a,tag:l,props:{id:J},children:[{type:c,value:K}]},{type:a,tag:S,props:{},children:[{type:c,value:T},{type:a,tag:o,props:{},children:[{type:c,value:U}]},{type:c,value:V},{type:a,tag:o,props:{},children:[{type:c,value:W}]},{type:c,value:X},{type:a,tag:o,props:{},children:[{type:c,value:Y}]},{type:c,value:Z},{type:a,tag:_,props:{href:s,rel:[$]},children:[{type:c,value:s}]},{type:c,value:aa}]},{type:a,tag:h,props:{code:L,language:m},children:[{type:a,tag:n,props:{},children:[{type:a,tag:h,props:{__ignoreMap:j},children:[{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"80;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:ah}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ai}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:"return"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:"ct-63cdeb"},children:[{type:c,value:"301"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:" https:\u002F\u002Fnext.vault48.org"}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"request_uri"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]},{type:a,tag:b,props:{class:e},children:[]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:t},children:[{type:c,value:u}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:v}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"443 ssl http2;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:N}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"[::]:443 ssl http2;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:k},children:[{type:c,value:"# managed by Certbot"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" ssl_certificate "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Ffullchain.pem; "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" ssl_certificate_key "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fprivkey.pem; "}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" ssl_trusted_certificate "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"\u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fchain.pem;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:ah}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:ai}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:i}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:p},children:[{type:c,value:i}]},{type:a,tag:b,props:{class:ab},children:[{type:c,value:ac}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:g}]},{type:a,tag:b,props:{class:ad},children:[{type:c,value:ae}]},{type:a,tag:b,props:{class:p},children:[{type:c,value:af}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" proxy_redirect "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"off;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"Host "}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"host"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"X-Real-IP "}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"remote_addr"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:O}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"X-Forwarded-For "}]},{type:a,tag:b,props:{class:y},children:[{type:c,value:z}]},{type:a,tag:b,props:{class:A},children:[{type:c,value:"proxy_add_x_forwarded_for"}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:B}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:M}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:q}]},{type:a,tag:b,props:{class:f},children:[{type:c,value:" proxy_pass "}]},{type:a,tag:b,props:{class:d},children:[{type:c,value:"http:\u002F\u002F127.0.0.1:8080;"}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:ag}]}]},{type:a,tag:b,props:{class:e},children:[{type:a,tag:b,props:{class:d},children:[{type:c,value:x}]}]}]}]}]},{type:a,tag:"style",children:[{type:c,value:".ct-1a0c00{color:#C9D1D9}.ct-0e486b{color:#C9D1D9}.ct-63cdeb{color:#79C0FF}.ct-f4ad27{color:#FF7B72}.ct-135116{color:#FF7B72}.ct-5a9c9b{color:#FFA657}.ct-3354e9{color:#FF7B72}.ct-fb8066{color:#C9D1D9}.ct-372d10{color:#8B949E}.ct-c39779{color:#C9D1D9}.ct-8151af{color:#FF7B72}.light .ct-8151af{color:#073642}.light .ct-c39779{color:#657B83}.light .ct-372d10{color:#93A1A1}.light .ct-fb8066{color:#657B83}.light .ct-3354e9{color:#073642}.light .ct-5a9c9b{color:#657B83}.light .ct-135116{color:#657B83}.light .ct-f4ad27{color:#859900}.light .ct-63cdeb{color:#D33682}.light .ct-0e486b{color:#859900}.light .ct-1a0c00{color:#268BD2}"}]}],toc:{title:j,searchDepth:r,depth:r,links:[{id:D,depth:r,text:E},{id:G,depth:r,text:H},{id:J,depth:r,text:K}]}},_type:"markdown",_id:"content:Linux:Setting up NGINX.md",_source:"content",_file:"Linux\u002FSetting up NGINX.md",_extension:"md"}},prerenderedAt:1668068046849}}("element","span","text","ct-c39779","line","ct-f4ad27"," ","code"," ","","ct-372d10","h2","nginx","pre","code-inline","ct-fb8066"," ",2,"https:\u002F\u002Fnext.vault48.org","ct-8151af","server"," {","# ...","}","ct-0e486b","$","ct-1a0c00",";",false,"fallback-url-for-spa-s","Fallback url for SPA-s","server {\n # ...\n location \u002F {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri\u002F =404;\n }\n # ...\n}\n","set-up-for-uploads","Set up for uploads","server {\n # ...\n client_max_body_size 200M;\n # ...\n}\n","reverse-proxy-for-https","Reverse proxy for https","server {\n listen 80;\n server_name next.vault48.org;\n return 301 https:\u002F\u002Fnext.vault48.org$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n \n # managed by Certbot\n ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Ffullchain.pem; \n ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fprivkey.pem; \n ssl_trusted_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fvault48.org\u002Fchain.pem;\n \n server_name next.vault48.org;\n \n location \u002F {\n proxy_redirect off;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n \n proxy_pass http:\u002F\u002F127.0.0.1:8080;\n }\n}\n"," "," listen "," proxy_set_header ","Setting Up NGINX","\u002Flinux\u002Fsetting-up-nginx","root","p","Given config forwards ","https"," traffic to ","http"," on port ","8080"," for ","a","nofollow","\nwith http2 support if possible.","ct-3354e9","location","ct-5a9c9b","\u002F ","{"," }"," server_name ","next.vault48.org;"))
\ No newline at end of file
diff --git a/linux/setting-up-nginx/index.html b/linux/setting-up-nginx/index.html
index b7394e5..f3f0018 100644
--- a/linux/setting-up-nginx/index.html
+++ b/linux/setting-up-nginx/index.html
@@ -1,7 +1,7 @@
-Setting Up NGINX • Obsidian Garden
-
\ No newline at end of file
diff --git a/linux/ssh/_payload.js b/linux/ssh/_payload.js
index 031bc84..d4b37ca 100644
--- a/linux/ssh/_payload.js
+++ b/linux/ssh/_payload.js
@@ -1 +1 @@
-export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:k,_path:l}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-501XFnutIe":{_path:l,_dir:"linux",_draft:f,_partial:f,_locale:"en",_empty:f,title:k,description:c,excerpt:{type:m,children:[{type:a,tag:n,props:{id:g},children:[{type:b,value:h}]},{type:a,tag:o,props:{},children:[{type:b,value:p},{type:a,tag:d,props:{},children:[{type:b,value:q}]},{type:b,value:r},{type:a,tag:d,props:{},children:[{type:b,value:s}]},{type:b,value:t}]},{type:a,tag:e,props:{code:i},children:[{type:a,tag:u,props:{},children:[{type:a,tag:e,props:{__ignoreMap:c},children:[{type:b,value:i}]}]}]}]},body:{type:m,children:[{type:a,tag:n,props:{id:g},children:[{type:b,value:h}]},{type:a,tag:o,props:{},children:[{type:b,value:p},{type:a,tag:d,props:{},children:[{type:b,value:q}]},{type:b,value:r},{type:a,tag:d,props:{},children:[{type:b,value:s}]},{type:b,value:t}]},{type:a,tag:e,props:{code:i},children:[{type:a,tag:u,props:{},children:[{type:a,tag:e,props:{__ignoreMap:c},children:[{type:a,tag:v,props:{class:"line"},children:[{type:a,tag:v,props:{},children:[{type:b,value:"Host router\n HostName 192.168.0.1\n IdentityFile ~\u002F.ssh\u002Fid_rsa\n User root\n Port 22522"}]}]}]}]}]}],toc:{title:c,searchDepth:j,depth:j,links:[{id:g,depth:j,text:h}]}},_type:"markdown",_id:"content:Linux:SSH.md",_source:"content",_file:"Linux\u002FSSH.md",_extension:"md"}},prerenderedAt:1667989033628}}("element","text","","code-inline","code",false,"config-aliases-for-ssh-hosts","Config aliases for #SSH hosts","Host router\n HostName 192.168.0.1\n IdentityFile ~\u002F.ssh\u002Fid_rsa\n User root\n Port 22522\n",2,"SSH","\u002Flinux\u002Fssh","root","h2","p","#SSH config can be used to made aliases for different hosts. Should be put at ","~\u002F.ssh\u002Fconfig",". To simply call ","ssh router"," without parameters, use this:","pre","span"))
\ No newline at end of file
+export default (function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){return {data:{navigation:[{title:"Blockchain",_path:"\u002Fblockchain",children:[{title:"Common Typescript Examples",_path:"\u002Fblockchain\u002Fcommon-typescript-examples"},{title:"Smart Contracts",_path:"\u002Fblockchain\u002Fsmart-contracts"}]},{title:"Css",_path:"\u002Fcss",children:[{title:"Automatic Grid Like Masonry With Pure CSS",_path:"\u002Fcss\u002Fautomatic-grid-like-masonry-with-pure-css"},{title:"Sass Nth Child Iterate Mixin",_path:"\u002Fcss\u002Fsass-nth-child-iterate-mixin"},{title:"Test If Browser Supports CSS Rules",_path:"\u002Fcss\u002Ftest-if-browser-supports-css-rules"}]},{title:"Docker",_path:"\u002Fdocker",children:[{title:"Building Static Pages With Docker",_path:"\u002Fdocker\u002Fbuilding-static-pages-with-docker"},{title:"Drone Ci",_path:"\u002Fdocker\u002Fdrone-ci"},{title:"Github Pages With Drone Ci",_path:"\u002Fdocker\u002Fgithub-pages-with-drone-ci"},{title:"Private Docker Registry",_path:"\u002Fdocker\u002Fprivate-docker-registry"},{title:"Refresh Containers On Pull",_path:"\u002Fdocker\u002Frefresh-containers-on-pull"},{title:"Seed Dump Inside Docker",_path:"\u002Fdocker\u002Fseed-dump-inside-docker"},{title:"Wait For Mysql",_path:"\u002Fdocker\u002Fwait-for-mysql"},{title:"Wait For Redis",_path:"\u002Fdocker\u002Fwait-for-redis"}]},{title:"Frontend",_path:"\u002Ffrontend",children:[{title:"React Native",_path:"\u002Ffrontend\u002Freact-native",children:[{title:"OAuth2 Login",_path:"\u002Ffrontend\u002Freact-native\u002Foauth2-login"},{title:"Preserve FlatList Scroll Position In React Native",_path:"\u002Ffrontend\u002Freact-native\u002Fpreserve-flatlist-scroll-position-in-react-native"},{title:"Useful Comands",_path:"\u002Ffrontend\u002Freact-native\u002Fuseful-comands"}]},{title:"React",_path:"\u002Ffrontend\u002Freact",children:[{title:"Axios Refresh Token On React",_path:"\u002Ffrontend\u002Freact\u002Faxios-refresh-token-on-react"},{title:"Axios With AbortController",_path:"\u002Ffrontend\u002Freact\u002Faxios-with-abortcontroller"}]},{title:"Vue",_path:"\u002Ffrontend\u002Fvue",children:[{title:"Adding Global Properties To Component",_path:"\u002Ffrontend\u002Fvue\u002Fadding-global-properties-to-component"},{title:"Make Nuxt Handle Obsidian Highlights",_path:"\u002Ffrontend\u002Fvue\u002Fmake-nuxt-handle-obsidian-highlights"}]}]},{title:"Git",_path:"\u002Fgit",children:[{title:"Force Git To Use HTTPS",_path:"\u002Fgit\u002Fforce-git-to-use-https"},{title:"Git Aliases And Useful Commands",_path:"\u002Fgit\u002Fgit-aliases-and-useful-commands"}]},{title:"Graphql",_path:"\u002Fgraphql",children:[{title:"Apollo Client Pagination",_path:"\u002Fgraphql\u002Fapollo-client-pagination"},{title:"Refresh Token In Apollo Client",_path:"\u002Fgraphql\u002Frefresh-token-in-apollo-client"}]},{title:"Linux",_path:"\u002Flinux",children:[{title:"Gitea For Git Hosting",_path:"\u002Flinux\u002Fgitea-for-git-hosting"},{title:"Google Photos Alternative With Photoprism",_path:"\u002Flinux\u002Fgoogle-photos-alternative-with-photoprism"},{title:"Resume Or Start Screen Session",_path:"\u002Flinux\u002Fresume-or-start-screen-session"},{title:"Rsync File With SSH",_path:"\u002Flinux\u002Frsync-file-with-ssh"},{title:"Setting Up NGINX",_path:"\u002Flinux\u002Fsetting-up-nginx"},{title:k,_path:l}]},{title:"Obsidian",_path:"\u002Fobsidian",children:[{title:"Self Hosted Obsidian Sync With CouchDB",_path:"\u002Fobsidian\u002Fself-hosted-obsidian-sync-with-couchdb"}]},{title:"Sql",_path:"\u002Fsql",children:[{title:"MySQL And MariaDB Setup",_path:"\u002Fsql\u002Fmysql-and-mariadb-setup"},{title:"Postgress Setup",_path:"\u002Fsql\u002Fpostgress-setup"}]},{title:"Typescript",_path:"\u002Ftypescript",children:[{title:"Add Global Variable To Window",_path:"\u002Ftypescript\u002Fadd-global-variable-to-window"},{title:"Flatten Object With Periods",_path:"\u002Ftypescript\u002Fflatten-object-with-periods"},{title:"Type Guards",_path:"\u002Ftypescript\u002Ftype-guards"}]}],"content-query-501XFnutIe":{_path:l,_dir:"linux",_draft:f,_partial:f,_locale:"en",_empty:f,title:k,description:c,excerpt:{type:m,children:[{type:a,tag:n,props:{id:g},children:[{type:b,value:h}]},{type:a,tag:o,props:{},children:[{type:b,value:p},{type:a,tag:d,props:{},children:[{type:b,value:q}]},{type:b,value:r},{type:a,tag:d,props:{},children:[{type:b,value:s}]},{type:b,value:t}]},{type:a,tag:e,props:{code:i},children:[{type:a,tag:u,props:{},children:[{type:a,tag:e,props:{__ignoreMap:c},children:[{type:b,value:i}]}]}]}]},body:{type:m,children:[{type:a,tag:n,props:{id:g},children:[{type:b,value:h}]},{type:a,tag:o,props:{},children:[{type:b,value:p},{type:a,tag:d,props:{},children:[{type:b,value:q}]},{type:b,value:r},{type:a,tag:d,props:{},children:[{type:b,value:s}]},{type:b,value:t}]},{type:a,tag:e,props:{code:i},children:[{type:a,tag:u,props:{},children:[{type:a,tag:e,props:{__ignoreMap:c},children:[{type:a,tag:v,props:{class:"line"},children:[{type:a,tag:v,props:{},children:[{type:b,value:"Host router\n HostName 192.168.0.1\n IdentityFile ~\u002F.ssh\u002Fid_rsa\n User root\n Port 22522"}]}]}]}]}]}],toc:{title:c,searchDepth:j,depth:j,links:[{id:g,depth:j,text:h}]}},_type:"markdown",_id:"content:Linux:SSH.md",_source:"content",_file:"Linux\u002FSSH.md",_extension:"md"}},prerenderedAt:1668068046903}}("element","text","","code-inline","code",false,"config-aliases-for-ssh-hosts","Config aliases for #SSH hosts","Host router\n HostName 192.168.0.1\n IdentityFile ~\u002F.ssh\u002Fid_rsa\n User root\n Port 22522\n",2,"SSH","\u002Flinux\u002Fssh","root","h2","p","#SSH config can be used to made aliases for different hosts. Should be put at ","~\u002F.ssh\u002Fconfig",". To simply call ","ssh router"," without parameters, use this:","pre","span"))
\ No newline at end of file
diff --git a/linux/ssh/index.html b/linux/ssh/index.html
index 891b9cd..5e3a5e2 100644
--- a/linux/ssh/index.html
+++ b/linux/ssh/index.html
@@ -1,10 +1,10 @@
-SSH • Obsidian Garden
-
#SSH config can be used to made aliases for different hosts. Should be put at ~/.ssh/config. To simply call ssh router without parameters, use this:
Host router
HostName 192.168.0.1
IdentityFile ~/.ssh/id_rsa
User root
- Port 22522
+ Port 22522
\ No newline at end of file
diff --git a/nuxt/ArrowRight.1ab901eb.js b/nuxt/ArrowRight.8a00e336.js
similarity index 81%
rename from nuxt/ArrowRight.1ab901eb.js
rename to nuxt/ArrowRight.8a00e336.js
index e98ecbd..7c5fdc4 100644
--- a/nuxt/ArrowRight.1ab901eb.js
+++ b/nuxt/ArrowRight.8a00e336.js
@@ -1 +1 @@
-import{k as e,o as t,e as o,f as s}from"./entry.fb9e6b9e.js";const n={},_={xmlns:"http://www.w3.org/2000/svg",height:"48",width:"48",viewBox:"0 0 48 48"},c=s("path",{d:"m24 40-2.1-2.15L34.25 25.5H8v-3h26.25L21.9 10.15 24 8l16 16Z"},null,-1),r=[c];function a(h,d){return t(),o("svg",_,r)}const l=e(n,[["render",a]]);export{l as default};
+import{k as e,o as t,e as o,f as s}from"./entry.14299f65.js";const n={},_={xmlns:"http://www.w3.org/2000/svg",height:"48",width:"48",viewBox:"0 0 48 48"},c=s("path",{d:"m24 40-2.1-2.15L34.25 25.5H8v-3h26.25L21.9 10.15 24 8l16 16Z"},null,-1),r=[c];function a(h,d){return t(),o("svg",_,r)}const l=e(n,[["render",a]]);export{l as default};
diff --git a/nuxt/BioCareer.5774f6f9.js b/nuxt/BioCareer.5774f6f9.js
new file mode 100644
index 0000000..6953428
--- /dev/null
+++ b/nuxt/BioCareer.5774f6f9.js
@@ -0,0 +1 @@
+import{k as e,o,e as r,f as t}from"./entry.14299f65.js";const c={},s=t("h2",null,"Career",-1),n=[s];function a(_,l){return o(),r("div",null,n)}const f=e(c,[["render",a]]);export{f as default};
diff --git a/nuxt/BioCareer.992494b8.js b/nuxt/BioCareer.992494b8.js
deleted file mode 100644
index 5973ea8..0000000
--- a/nuxt/BioCareer.992494b8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{k as e,o,e as t,f as n}from"./entry.fb9e6b9e.js";const c={},_=n("h2",null,"Career",-1),s=[_];function r(a,l){return o(),t("div",null,s)}const f=e(c,[["render",r]]);export{f as default};
diff --git a/nuxt/BioHeading.687be2c4.js b/nuxt/BioHeading.687be2c4.js
deleted file mode 100644
index e37fe11..0000000
--- a/nuxt/BioHeading.687be2c4.js
+++ /dev/null
@@ -1 +0,0 @@
-import{k as t,o as a,e as r,f as e,h as o,V as n,W as c}from"./entry.fb9e6b9e.js";const l=""+new URL("howdy.04a64816.svg",import.meta.url).href,d={},i=e("div",null,[e("img",{src:l})],-1),_=c("
Howdy!
My name is Fedor Katurov, I'm a fullstack developer from Siberia.
I develop frontend applications with React, Vue and numerous other frameworks for the most of my time, but I'm also capable of doing Typescript and Golang backend.
",3),m=[_];function p(s,b){return a(),r("div",{class:o(s.$style.grid)},[i,e("div",{class:o(s.$style.text)},m,2)],2)}const f={$style:n},h=t(d,[["render",p],["__cssModules",f]]);export{h as default};
diff --git a/nuxt/BioHeading.78603f20.js b/nuxt/BioHeading.78603f20.js
new file mode 100644
index 0000000..ba0678e
--- /dev/null
+++ b/nuxt/BioHeading.78603f20.js
@@ -0,0 +1 @@
+import i from"./ArrowRight.8a00e336.js";import c from"./UiActionButton.c39eb58f.js";import{k as l,o as _,e as m,f as o,h as t,i as s,w as a,T as d,V as p,W as u}from"./entry.14299f65.js";const f=""+new URL("howdy.2abb4865.svg",import.meta.url).href,h={},b=o("img",{src:f},null,-1),y=[b],g=u("
Howdy!
My name is Fedor Katurov, I'm a fullstack developer from Siberia.
I develop frontend applications with React, Vue and numerous other frameworks for the most of my time, but I'm also capable of doing Typescript and Golang backend.