aboutsummaryrefslogtreecommitdiff
path: root/src/js/arching-kaos-stellar-network.js
diff options
context:
space:
mode:
authorkaotisk <kaotisk@arching-kaos.org>2023-09-01 06:18:20 +0300
committerkaotisk <kaotisk@arching-kaos.org>2023-09-01 06:18:20 +0300
commit7eb510a56a0015ccd887b694bdb497309dc42f87 (patch)
tree94ad8d24f308c05ca782a8c6bca53e85a0929086 /src/js/arching-kaos-stellar-network.js
parentc03eac7b80432c79c01a744734d0a4d4e989f46f (diff)
downloadarching-kaos-web-ui-7eb510a56a0015ccd887b694bdb497309dc42f87.tar.gz
arching-kaos-web-ui-7eb510a56a0015ccd887b694bdb497309dc42f87.tar.bz2
arching-kaos-web-ui-7eb510a56a0015ccd887b694bdb497309dc42f87.zip
Huge update, read description
- Bug fixes - Splitted app.js to many files - Gathered CSS to one place instead of layers - Redesigned page layout - Added settings so you can personalize them later - Redesigned menu layout - Added radio player for AKDR to connect there
Diffstat (limited to 'src/js/arching-kaos-stellar-network.js')
-rw-r--r--src/js/arching-kaos-stellar-network.js279
1 files changed, 279 insertions, 0 deletions
diff --git a/src/js/arching-kaos-stellar-network.js b/src/js/arching-kaos-stellar-network.js
new file mode 100644
index 0000000..542ff95
--- /dev/null
+++ b/src/js/arching-kaos-stellar-network.js
@@ -0,0 +1,279 @@
+
+/*
+ * Array of all the menu-panes IDs
+ * TODO: Add to menuids stellar relevant
+var menuids = [
+ '#welcome-section',
+ '#about-section',
+ '#zchain-data-section',
+ '#news-section',
+ '#stats-section',
+ '#mixtapes-section',
+ '#chat-section',
+ '#mypage-section',
+ '#stellar-balances',
+ '#stellar-data-config',
+ '#arching-kaos-id',
+ '#files-section'
+];
+ */
+
+// Here we store the participants found
+// var participants = [];
+
+/*
+ * Get Trustlines for ARCHINGKAOS asset
+ * Returns DOM element with number of trustlines
+ */
+function getTrustlines(){
+ archingKaosLog("Loading trustlines...");
+ var url=activeSettings.horizonAddresses[activeSettings.horizonSelectedAddress]+'assets?asset_code='+activeSettings.stellarAssetsForScanning[activeSettings.stellarDefaultAsset].code+'&asset_issuer='+activeSettings.stellarAssetsForScanning[activeSettings.stellarDefaultAsset].issuer;
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ var number = json._embedded.records[0].accounts.authorized;
+ var stats = document.querySelector('.stellar-network').querySelector('summary');
+ var small = document.createElement("span");
+ small.innerText = ' (' + number + ')';
+ stats.appendChild(small);
+ })
+ }
+ archingKaosLog("Loading trustlines... Found "+number+"!");
+ progressPlaceholder.value++;
+ })
+}
+
+/*
+ * Get addresses that trust the asset
+ * Limit is 200 addresses cause horizon API limitations.
+ *
+ * Returns div DOM elements for each found address, embedding
+ * the address both in innerText and in id of the div.
+ */
+// var lastPage = '';
+function getHolders(a=0){
+ var doIt = true
+ archingKaosLog("Searching holders...");
+ var url = '';
+ if ( a === 0 ) {
+ url=activeSettings.horizonAddresses[activeSettings.horizonSelectedAddress]+'accounts?asset='+activeSettings.stellarAssetsForScanning[activeSettings.stellarDefaultAsset].code+':'+activeSettings.stellarAssetsForScanning[activeSettings.stellarDefaultAsset].issuer+'&limit=200';
+ } else {
+ if ( lastPage === '' ) {
+ url = a;
+ } else {
+ if ( a !== lastPage ) {
+ url = a;
+ } else {
+ doIt = false;
+ }
+ }
+ }
+ lastPage=url;
+ if (doIt) {
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ var stats = document.querySelector('.stellar-network');
+ json._embedded.records.forEach(r=>{
+ var p = document.createElement("div");
+ p.className = "stellar-address";
+ p.innerText = r.account_id;
+ console.log(r);
+ p.id = r.account_id;
+ holders.push(r.account_id);
+ progressPlaceholder.max++;
+ checkAddressForConfigurationVariable(r.account_id);
+ stats.appendChild(p);
+ })
+ if (json._links.next) getHolders(json._links.next.href);
+ })
+ }
+ })
+ }
+ archingKaosLog("Searching holders... Done!");
+}
+// getHolders();
+
+/*
+ * Function that checks the address' variable 'config' to see
+ * if it's set up.
+ *
+ * Returns the IPNS link in the DOM as p element and proceeds to
+ * get nickname from the variables
+ */
+function checkAddressForConfigurationVariable(addr) {
+ archingKaosLog("Checking configuration for "+ addr+ "...");
+ url=activeSettings.horizonAddresses[activeSettings.horizonSelectedAddress]+'accounts/'+addr+'/data/'+activeSettings.stellarConfigVars[activeSettings.stellarDefaultConfig]
+ try {
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ var cnf = document.createElement("p")
+ if(document.querySelector("#stellar-data-config-not-found")) document.querySelector("#stellar-data-config-not-found").hidden = true;
+ cnf.innerText = atob(json.value)
+ document.querySelector('#'+addr).appendChild(cnf)
+ document.querySelector('#'+addr).style="color: #3dbb3d;"
+ stellarNetworkConfiguredAddresses += 1;
+ getConfiguration(atob(json.value),addr)
+ })
+ } else {
+ if (DEBUG) console.log(response)
+ }
+ }).catch((e)=>{
+ console.log(e)
+ })
+ } catch (e) {
+ if (DEBUG) console.log(e);
+ }
+ progressPlaceholder.value++;
+}
+
+/*
+ * We now connect our client to horizon
+ */
+var server = new StellarSdk.Server(activeSettings.horizonAddresses[activeSettings.horizonSelectedAddress]);
+// We ask for the 'a' stellar address the balances
+function letme(a){
+ server.accounts()
+ .accountId(a)
+ .call().then(function(r){ const L = r; putit(r); });
+}
+// We print them
+function putit(i){
+ var ta=document.querySelector("#stellar-balances-table");
+ readit(i);
+ for (b in i.balances) {
+ var row = document.createElement("tr");
+ x = i.balances[b];
+ var amount = document.createElement("td");
+ var assetCode = document.createElement("td");
+ amount.innerText = x.balance;
+ assetCode.innerText = ( x.asset_code && x.asset_code != "undefined" ? x.asset_code : 'XLM');
+ row.appendChild(assetCode);
+ row.appendChild(amount);
+ ta.appendChild(row);
+ progressPlaceholder.max++;
+ progressPlaceholder.value++;
+ if(document.querySelector("#stellar-balances-not-found")) document.querySelector("#stellar-balances-not-found").hidden = true;
+ }
+}
+// We also search for a config file and display it
+/*
+ * Seeks to find an IPNS link under the 'config' variable of an i Stellar
+ * Address.
+ *
+ * Outputs found value if any under #stellar-data-config
+ * Adds to progressPlaceholder.
+ * Moves on to retrieve the found link
+ *
+ */
+async function dataf(i){
+ archingKaosLog("Loading your profile...");
+ var url=activeSettings.horizonAddresses[activeSettings.horizonSelectedAddress]+'accounts/'+i+'/data/'+activeSettings.stellarConfigVars[activeSettings.stellarDefaultConfig];
+ fetch(url, {
+ method:'GET',
+ headers:{
+ Accept: 'application/json'
+ }
+ }).then(response=>{
+ if(response.ok){
+ response.json().then(json=>{
+ var cnf = document.createElement("p");
+ cnf.innerText = atob(json.value);
+ document.querySelector('#stellar-data-config').appendChild(cnf);
+ progressPlaceholder.max++;
+ progressPlaceholder.value++;
+ getConfiguration(atob(json.value),i);
+ })
+ }
+ })
+}
+
+// Whatever function XD
+function readit(i){
+ if (DEBUG) console.log(i);
+}
+
+// var stellar_connection_status = 0;
+
+// Put it there. in the field
+function putKeyToField(k){
+ let base = document.querySelector("#stellar-freigher-connect-address-button");
+ stellar_connection_status = 1;
+ dataf(k);
+ base.innerText=k;
+ base.onclick='';
+}
+
+function showStellar(){
+ if (stellar_connection_status === 1 ){
+ document.querySelector("#stellar-balances-link").hidden=false;
+ document.querySelector("#stellar-data-config-link").hidden=false;
+ document.querySelector("#arching-kaos-id-link").hidden=false;
+ document.querySelector("#mypage-section-link").hidden=false;
+ }
+}
+
+// Hide stellar stuff if no freighter
+if (!window.freighterApi.isConnected()) {
+ document.querySelector("#stellar-freigher-connect-address-button").hidden=true;
+}
+
+function hideStellar(){
+ document.querySelector("#stellar-balances-link").hidden=true;
+ document.querySelector("#stellar-data-config-link").hidden=true;
+ document.querySelector("#arching-kaos-id-link").hidden=true;
+ document.querySelector("#mypage-section-link").hidden=true;
+}
+
+hideStellar();
+
+// That's how we get the publicKey
+const retrievePublicKey = async () => {
+ let publicKey = "";
+ let error = "";
+
+ try {
+ publicKey = await window.freighterApi.getPublicKey()
+ .then(publicKey => {putKeyToField(publicKey);letme(publicKey)});
+ } catch (e) {
+ error = e;
+ }
+ if (error) {
+ return error;
+ }
+ return publicKey;
+};
+
+// Function that initiates the connection with the Wallet ( we just read )
+function connect(){
+ if (DEBUG) console.log("When pressed: "+stellar_connection_status);
+ if ( stellar_connection_status === 1 ){
+ showStellar();
+ } else {
+ const result = retrievePublicKey();
+ }
+ if (DEBUG) console.log("After "+stellar_connection_status);
+}
+
+function scanStellarNetworkForPeers(){
+ getTrustlines();
+ getHolders();
+}
+
+// vim: tabstop=4 shiftwidth=4 expandtab softtabstop=4