From e7b8ed8d81d161e6ea5a086d870f83b366732455 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 3 Feb 2026 11:46:21 -0800 Subject: remove follows --- .../(app)/[username]/(profile)/+layout.server.ts | 14 +- .../(app)/[username]/(profile)/+layout.svelte | 80 +-------- .../[username]/(profile)/followers/+page.server.js | 8 - .../[username]/(profile)/followers/+page.svelte | 53 ------ .../[username]/(profile)/follows/+page.server.js | 9 - .../[username]/(profile)/follows/+page.svelte | 55 ------ src/routes/(app)/[username]/shopify.js/+server.ts | 191 --------------------- src/routes/(app)/settings/shopify/+page.svelte | 102 ----------- 8 files changed, 2 insertions(+), 510 deletions(-) delete mode 100644 src/routes/(app)/[username]/(profile)/followers/+page.server.js delete mode 100644 src/routes/(app)/[username]/(profile)/followers/+page.svelte delete mode 100644 src/routes/(app)/[username]/(profile)/follows/+page.server.js delete mode 100644 src/routes/(app)/[username]/(profile)/follows/+page.svelte delete mode 100644 src/routes/(app)/[username]/shopify.js/+server.ts delete mode 100644 src/routes/(app)/settings/shopify/+page.svelte (limited to 'src/routes') diff --git a/src/routes/(app)/[username]/(profile)/+layout.server.ts b/src/routes/(app)/[username]/(profile)/+layout.server.ts index e2ab51b1..251388e5 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.server.ts +++ b/src/routes/(app)/[username]/(profile)/+layout.server.ts @@ -1,5 +1,4 @@ import getRates from "$lib/rates"; -import { get } from "$lib/utils"; export async function load({ depends, parent }) { depends("app:user"); @@ -7,16 +6,5 @@ export async function load({ depends, parent }) { const rates = await getRates(); const { subject, user } = await parent(); - // const { follows, followers } = await get(`/${subject.pubkey}/count`); - // let followList = new Promise((r) => r([])); - // if (user) - // followList = get(`/${user.pubkey}/follows?pubkeysOnly=true`).catch( - // () => [], - // ); - - const followList = new Promise((r) => r([])); - const follows = []; - const followers = []; - - return { follows, followers, followList, rate: rates[subject.currency] }; + return { rate: rates[subject.currency] }; } diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte index fc1fc93d..45009035 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.svelte +++ b/src/routes/(app)/[username]/(profile)/+layout.svelte @@ -1,20 +1,15 @@
@@ -166,25 +107,6 @@
{/if} - - - - - - - - - - - - - - - - - - - {#if showDetails}
{#if lnaddr} diff --git a/src/routes/(app)/[username]/(profile)/followers/+page.server.js b/src/routes/(app)/[username]/(profile)/followers/+page.server.js deleted file mode 100644 index 53c1953c..00000000 --- a/src/routes/(app)/[username]/(profile)/followers/+page.server.js +++ /dev/null @@ -1,8 +0,0 @@ -import { get } from "$lib/utils"; - -export async function load({ depends, parent }) { - depends("app:user"); - const { subject } = await parent(); - const followers = await get(`/${subject.pubkey}/followers`); - return { followers }; -} diff --git a/src/routes/(app)/[username]/(profile)/followers/+page.svelte b/src/routes/(app)/[username]/(profile)/followers/+page.svelte deleted file mode 100644 index 13a8a65b..00000000 --- a/src/routes/(app)/[username]/(profile)/followers/+page.svelte +++ /dev/null @@ -1,53 +0,0 @@ - - -
-

- {$t("user.followers")} -

- - {#await followers} -
Loading followers...
- {:then followers} - {#if followers.length} - - {#snippet children({ data })} - -
-
-
- -
- -
- -
-
-
{data.display || data.display_name || ""}
-
- @{data.username || data.name} -
-
-
-
-
- {/snippet} -
- {:else} -
No followers
- {/if} - {/await} -
diff --git a/src/routes/(app)/[username]/(profile)/follows/+page.server.js b/src/routes/(app)/[username]/(profile)/follows/+page.server.js deleted file mode 100644 index 946f2c1f..00000000 --- a/src/routes/(app)/[username]/(profile)/follows/+page.server.js +++ /dev/null @@ -1,9 +0,0 @@ -import { get } from "$lib/utils"; - -export async function load({ depends, parent }) { - depends("app:user"); - const { subject } = await parent(); - const follows = await get(`/${subject.pubkey}/follows`); - - return { follows }; -} diff --git a/src/routes/(app)/[username]/(profile)/follows/+page.svelte b/src/routes/(app)/[username]/(profile)/follows/+page.svelte deleted file mode 100644 index fe9dc81d..00000000 --- a/src/routes/(app)/[username]/(profile)/follows/+page.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - -
-

- {$t("user.following")} -

- - {#await follows} -
Loading
- {:then follows} - {#if follows.length} - {#if browser} - - {#snippet children({ data })} - -
-
-
- -
- -
- -
-
-
{data.display || data.display_name || ""}
-
@{data.username || data.name}
-
-
-
-
- {/snippet} -
- {/if} - {:else} -
No follows
- {/if} - {/await} -
diff --git a/src/routes/(app)/[username]/shopify.js/+server.ts b/src/routes/(app)/[username]/shopify.js/+server.ts deleted file mode 100644 index f76d6998..00000000 --- a/src/routes/(app)/[username]/shopify.js/+server.ts +++ /dev/null @@ -1,191 +0,0 @@ -export async function GET({ params, url }) { - const { username } = params; - - const js = ` -var qrcode=function(r,_){var t=r,e=QRErrorCorrectLevel[_],n=null,$=0,o=null,a=[],f={},i=function(r,_){n=function(r){for(var _=Array(r),t=0;t=7&&h(r),null==o&&(o=x(t,e,a)),s(o,_)},u=function(r,_){for(var t=-1;t<=7;t+=1)if(!(r+t<=-1)&&!($<=r+t))for(var e=-1;e<=7;e+=1)_+e<=-1||$<=_+e||(0<=t&&t<=6&&(0==e||6==e)||0<=e&&e<=6&&(0==t||6==t)||2<=t&&t<=4&&2<=e&&e<=4?n[r+t][_+e]=!0:n[r+t][_+e]=!1)},c=function(){for(var r=0,_=0,t=0;t<8;t+=1){i(!0,t);var e=QRUtil.getLostPoint(f);(0==t||r>e)&&(r=e,_=t)}return _},g=function(){for(var r=8;r<$-8;r+=1)null==n[r][6]&&(n[r][6]=r%2==0);for(var _=8;_<$-8;_+=1)null==n[6][_]&&(n[6][_]=_%2==0)},l=function(){for(var r=QRUtil.getPatternPosition(t),_=0;_>e&1)==1;n[Math.floor(e/3)][e%3+$-8-3]=o}for(var e=0;e<18;e+=1){var o=!r&&(_>>e&1)==1;n[e%3+$-8-3][Math.floor(e/3)]=o}},v=function(r,_){for(var t=QRUtil.getBCHTypeInfo(e<<3|_),o=0;o<15;o+=1){var a=!r&&(t>>o&1)==1;o<6?n[o][8]=a:o<8?n[o+1][8]=a:n[$-15+o][8]=a}for(var o=0;o<15;o+=1){var a=!r&&(t>>o&1)==1;o<8?n[8][$-o-1]=a:o<9?n[8][15-o-1+1]=a:n[8][15-o-1]=a}n[$-8][8]=!r},s=function(r,_){for(var t=-1,e=$-1,o=7,a=0,f=QRUtil.getMaskFunction(_),i=$-1;i>0;i-=2)for(6==i&&(i-=1);;){for(var u=0;u<2;u+=1)if(null==n[e][i-u]){var c=!1;a>>o&1)==1),f(e,i-u)&&(c=!c),n[e][i-u]=c,-1==(o-=1)&&(a+=1,o=7)}if((e+=t)<0||$<=e){e-=t,t=-t;break}}},d=function(r,_){for(var t=0,e=0,n=0,$=Array(_.length),o=Array(_.length),a=0;a<_.length;a+=1){var f=_[a].dataCount,i=_[a].totalCount-f;e=Math.max(e,f),n=Math.max(n,i),$[a]=Array(f);for(var u=0;u<$[a].length;u+=1)$[a][u]=255&r.getBuffer()[u+t];t+=f;var c=QRUtil.getErrorCorrectPolynomial(i),g=qrPolynomial($[a],c.getLength()-1).mod(c);o[a]=Array(c.getLength()-1);for(var u=0;u=0?g.getAt(l):0}}for(var h=0,u=0;u<_.length;u+=1)h+=_[u].totalCount;for(var v=Array(h),s=0,u=0;u8*a)throw Error("code length overflow. ("+n.getLengthInBits()+">"+8*a+")");for(n.getLengthInBits()+4<=8*a&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(!1);for(;!(n.getLengthInBits()>=8*a)&&(n.put(236,8),!(n.getLengthInBits()>=8*a));){;n.put(17,8)}return d(n,e)};return f.addData=function(r){var _=qr8BitByte(r);a.push(_),o=null},f.isDark=function(r,_){if(r<0||$<=r||_<0||$<=_)throw Error(r+","+_);return n[r][_]},f.getModuleCount=function(){return $},f.make=function(){i(!1,c())},f.createTableTag=function(r,_){r=r||2;var t="";t+='',t+="";for(var e=0;e";for(var n=0;n';t+=""}return t+="",t+="
"},f.createImgTag=function(r,_,t){r=r||2;var e=_=void 0===_?4*r:_,n=f.getModuleCount()*r+_;return createImgTag(t,t,function(_,t){if(!(e<=_)||!(_>>8),_.push(255&$)):_.push(63)}}return _}};var QRMode={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},QRErrorCorrectLevel={L:1,M:0,Q:3,H:2},QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},QRUtil=function(){var r=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],_={},t=function(r){for(var _=0;0!=r;)_+=1,r>>>=1;return _};return _.getBCHTypeInfo=function(r){for(var _=r<<10;t(_)-t(1335)>=0;)_^=1335<=0;)_^=7973<5&&(t+=3+$-5)}for(var e=0;e<_-1;e+=1)for(var n=0;n<_-1;n+=1){var i=0;r.isDark(e,n)&&(i+=1),r.isDark(e+1,n)&&(i+=1),r.isDark(e,n+1)&&(i+=1),r.isDark(e+1,n+1)&&(i+=1),(0==i||4==i)&&(t+=3)}for(var e=0;e<_;e+=1)for(var n=0;n<_-6;n+=1)r.isDark(e,n)&&!r.isDark(e,n+1)&&r.isDark(e,n+2)&&r.isDark(e,n+3)&&r.isDark(e,n+4)&&!r.isDark(e,n+5)&&r.isDark(e,n+6)&&(t+=40);for(var n=0;n<_;n+=1)for(var e=0;e<_-6;e+=1)r.isDark(e,n)&&!r.isDark(e+1,n)&&r.isDark(e+2,n)&&r.isDark(e+3,n)&&r.isDark(e+4,n)&&!r.isDark(e+5,n)&&r.isDark(e+6,n)&&(t+=40);for(var u=0,n=0;n<_;n+=1)for(var e=0;e<_;e+=1)r.isDark(e,n)&&(u+=1);return t+10*(Math.abs(100*u/_/_-50)/5)},_}(),QRMath=function(){for(var r=Array(256),_=Array(256),t=0;t<8;t+=1)r[t]=1<=256;)_-=255;return r[_]},e}();function qrPolynomial(r,_){if(void 0===r.length)throw Error(r.length+"/"+_);var t=function(){for(var t=0;t>>7-_%8&1)==1},t.put=function(r,_){for(var e=0;e<_;e+=1)t.putBit((r>>>_-e-1&1)==1)},t.getLengthInBits=function(){return _},t.putBit=function(t){var e=Math.floor(_/8);r.length<=e&&r.push(0),t&&(r[e]|=128>>>_%8),_+=1},t},qr8BitByte=function(r){for(var _=QRMode.MODE_8BIT_BYTE,t=r,e=[],n={},$=0,o=t.length;$65536?(a[0]=240|(1835008&f)>>>18,a[1]=128|(258048&f)>>>12,a[2]=128|(4032&f)>>>6,a[3]=128|63&f):f>2048?(a[0]=224|(61440&f)>>>12,a[1]=128|(4032&f)>>>6,a[2]=128|63&f):f>128?(a[0]=192|(1984&f)>>>6,a[1]=128|63&f):a[0]=f,e.push(a)}(e=Array.prototype.concat.apply([],e)).length!=t.length&&(e.unshift(191),e.unshift(187),e.unshift(239));var i=e;return n.getMode=function(){return _},n.getLength=function(r){return i.length},n.write=function(r){for(var _=0;_>>8)},_.writeBytes=function(r,t,e){t=t||0,e=e||r.length;for(var n=0;n0&&(_+=","),_+=r[t];return _+"]"},_},base64EncodeOutputStream=function(){var r=0,_=0,t=0,e="",n={},$=function(r){e+=String.fromCharCode(o(63&r))},o=function(r){if(r<0);else if(r<26)return 65+r;else if(r<52)return 97+(r-26);else if(r<62)return 48+(r-52);else if(62==r)return 43;else if(63==r)return 47;throw Error("n:"+r)};return n.writeByte=function(e){for(r=r<<8|255&e,_+=8,t+=1;_>=6;)$(r>>>_-6),_-=6},n.flush=function(){if(_>0&&($(r<<6-_),r=0,_=0),t%3!=0)for(var n=3-t%3,o=0;o=_.length){if(0==n)return -1;throw Error("unexpected end of file./"+n)}var r=_.charAt(t);if(t+=1,"="==r)return n=0,-1;!r.match(/^\s$/)&&(e=e<<6|o(r.charCodeAt(0)),n+=6)}var $=e>>>n-8&255;return n-=8,$};var o=function(r){if(65<=r&&r<=90)return r-65;if(97<=r&&r<=122)return r-97+26;if(48<=r&&r<=57)return r-48+52;if(43==r)return 62;if(47==r)return 63;else throw Error("c:"+r)};return $},gifImage=function(r,_){var t=r,e=_,n=Array(r*_),$={};$.setPixel=function(r,_,e){n[_*t+r]=e},$.write=function(r){r.writeString("GIF87a"),r.writeShort(t),r.writeShort(e),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(t),r.writeShort(e),r.writeByte(0);var _=a(2);r.writeByte(2);for(var n=0;_.length-n>255;)r.writeByte(255),r.writeBytes(_,n,255),n+=255;r.writeByte(_.length-n),r.writeBytes(_,n,_.length-n),r.writeByte(0),r.writeString(";")};var o=function(r){var _=r,t=0,e=0,n={};return n.write=function(r,n){if(r>>>n!=0)throw Error("length over");for(;t+n>=8;)_.writeByte(255&(r<>>=8-t,e=0,t=0;e=r<0&&_.writeByte(e)},n},a=function(r){for(var _=1<$.size()&&($.size()==1<=40))return drawImg(r,{size:$,errorCorrectLevel:n,typeNumber:e+1});throw Error("Text too long to encode")}var a=parseInt($/t.getModuleCount()),f=parseInt(($-t.getModuleCount()*a)/2);return t.createImgTag(a,f,$)}; - - -window.addEventListener('load', async () => { - let sleep = (n) => new Promise((r) => setTimeout(r, n)); - let wait = async (f, n = 100, s = 300) => { - let i = 0; - while (!(await f()) && i < s) (await sleep(n)) && i++; - if (i >= s) throw new Error('timeout'); - return f(); - }; - - await wait(() => ["coinos", "bitcoin", "btc", "btcpayserver", "btcpay server"].some(v => ~(document.querySelector(".payment-method-list__item__info").innerText.toLowerCase().indexOf(v)))); - - let sat = (s) => { - s = Math.abs(s); - let p = Math.floor(Math.log(s) / Math.LN10 + 0.000000001); - let d = Math.floor((p + 1) / 3); - - return ( - '⚡️' + - (parseInt(s) > 0 - ? new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format( - s / Math.pow(1000, d) - ) + ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z'][d] - : 0 - ).toString() - ); - }; - - let copy = (text) => { - navigator.clipboard.writeText(text); - }; - - let f = (s, currency) => - new Intl.NumberFormat('en-US', { - style: 'currency', - currency - }) - .format(s) - .replace('CA', ''); - - let s = (s) => new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(s); - - let link = document.createElement('link'); - link.setAttribute('rel', 'stylesheet'); - link.setAttribute('type', 'text/css'); - link.setAttribute( - 'href', - 'https://fonts.googleapis.com/css?family=Public+Sans:400italic,400,300,700' - ); - - var style = document.createElement('style'); - style.innerHTML = \`#check { - transform: scale(0.5); - transition: transform 1s; - } - \`; - document.head.appendChild(style); - - document.head.appendChild(link); - document.title = 'Pay With Bitcoin'; - - let fiat = Shopify.checkout.payment_due; - let main = document.querySelector('main'); - main.style.fontFamily = 'Public Sans, sans-serif'; - - let data = await fetch('https://${url.host}/api/invoice', { - method: 'POST', - mode: 'cors', - headers: { - 'Content-Type': 'application/json', - accept: 'application/json', - }, - body: JSON.stringify({ - invoice: { - fiat, - type: 'lightning', - webhook: \`https://${url.host}/api/shopify/\${Shopify.checkout.order_id}\` - }, - user: { username: '${username}' } - }) - }) - .then(function (response) { - return response.json(); - }) - .catch(console.log); - - let base64 = drawImg(data.hash, { size: 300 }); - - main.innerHTML = \` -
- -
-
-
-
-
\${f( - (data.amount * data.rate) / 100000000, - data.currency - )}
-
\${sat(data.amount)}
-
-
\${ - data.hash - }
- - \`; - - let copyButton = document.getElementById('copy'); - copyButton.addEventListener('click', (e) => { - e.preventDefault(); - copy(data.hash); - let copied = document.createElement('div'); - copied.textContent = 'Copied!'; - main.appendChild(copied); - setTimeout(() => copied.remove(), 3000); - }); - - let qr = document.getElementById('qrcode'); - qr.style.margin = 'auto'; - qr.style.marginTop = '40px'; - qr.style.border = '12px white solid'; - qr.style.zIndex = 10; - - new QRCode(qr, data.hash); - - let bg = document.getElementById('bg'); - bg.style.position = 'absolute'; - bg.style.margin = 'auto'; - bg.style.left = '0'; - bg.style.right = '0'; - bg.style.width = '400px'; - bg.style.height = '400px'; - bg.style.borderRadius = '50%'; - bg.style.background = 'linear-gradient(to right, #F2F6FC, #E1E3FF)'; - bg.style.zIndex = '0'; - - let ws = new WebSocket('wss://${url.host}/ws'); - ws.onmessage = ({ data }) => { - try { - let { type, data: d } = JSON.parse(data); - if (type === 'payment') { - main.innerHTML = - \`
Check
- -

Payment received!

- -
-
\${f( - (d.amount * d.rate) / 100000000, - d.currency - )}
-
\${sat(d.amount)}
-
- -
Continue shopping
-
\`; - - var image = document.getElementById('check'); - image.addEventListener('load', function () { - image.style.transform = 'scale(1)'; - }); - } - } catch (e) { - console.log(e); - } - }; - ws.onopen = () => { - ws.send(JSON.stringify({ type: 'subscribe', data })); - }; -}); - `; - - return new Response(js, { - headers: { - "Content-Type": "application/javascript", - }, - }); -} diff --git a/src/routes/(app)/settings/shopify/+page.svelte b/src/routes/(app)/settings/shopify/+page.svelte deleted file mode 100644 index e67be691..00000000 --- a/src/routes/(app)/settings/shopify/+page.svelte +++ /dev/null @@ -1,102 +0,0 @@ - - -
- -
-
- admin.shopify.com/store/ -
- -
-

- Add Bitcoin under Payments > Manual payment methods with a description like "Pay with Bitcoin". -

-
- -
- -

- Copy this into Checkout -> Additional scripts -

- -
- -
- -

- Coinos can automatically mark orders as Paid if you provide an API token. - -

-

- Create a new app in Apps > App Development -

- -

- Edit the Admin API scopes to enable write_orders permission then install the app into your store and copy the Admin API access - token here. -

-
- - -- cgit v1.2.3