Commit Graph

1059 Commits

Author SHA1 Message Date
keyan 0ea261428c give edit and countdown space again 2024-04-17 13:19:10 -05:00
ekzyis 40463d526c
Fix TypeError: Failed to construct 'URL': Invalid URL (#1083) 2024-04-17 12:15:36 -05:00
keyan 058f88da49 add halving to price carousel 2024-04-16 17:58:26 -05:00
keyan a0f3e338a8 fix shift when loading paid invoice 2024-04-16 16:28:22 -05:00
keyan 052e36f6ed adjust qr skeleton for bolt11info 2024-04-16 16:20:13 -05:00
keyan 02fe4d5d92 update qr skeleton 2024-04-16 16:05:59 -05:00
keyan 1a25179a98 modal spacing fixes 2024-04-16 15:33:00 -05:00
ekzyis e30dfbae57
Fix autowithdrawal logs (#1073)
* Also log autowithdrawal routing errors

* Only log autowithdrawal success in worker

* Use WalletType for WalletLog.wallet

* Fix autowithdrawal success message

* Infer walletName from walletType in upsertWallet
2024-04-16 13:59:46 -05:00
ekzyis 796bd4dc4b
Add autowithdrawal badge in notifications (#1078) 2024-04-16 10:53:05 -05:00
keyan 5689378b07 turn #1063 logic into a component for use in all comment lists 2024-04-15 16:23:26 -05:00
ekzyis 9f4d5e13aa
CLN autowithdrawal (#1042)
* Add CLN node to docker-compose.yml

* Attach CLN wallet via CLNRest

* Remove leading space

* Implement autowithdrawal to CLN in worker

* Fix UnhandledSchemeError during build

See https://github.com/vercel/next.js/discussions/33982

* Refactor CLN invoice code into @/lib/cln

* Fix missing env vars

* Fix validation error if rune invalid

* Update header

* Add rune placeholder

* Fix missing expiry for test invoice

* Remove nonsensical comment

* Remove unnecessary async

* Show level SUCCESS as OK in logs

* Add stacker_cln commands to sndev

* fix sndev posix compliance, add cln_withdraw

* give stacker_cln larger channels

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
2024-04-14 17:34:21 -05:00
Keyan 0fb2e95729
anchor box for notifications (#1063)
* anchor box for notifications closes #202

* fix lint

* give priority click children pointer events too

* add iframe and simplify css
2024-04-13 13:14:17 -05:00
✨JP⚡ a28d690f28
Fix first zap when modal closed (#771) (#1055)
* Fix first zap when modal closed (#771)

 - Extract handlers
 - Remove unnecessary async keyword from callback
 - Assign a new key to force remounting of LongPressable component when modal is closed from long press
 - Remove hover state when closing modal, otherwise it stays colored

* Replace LongPressable with custom component

* Remove yarn.lock
2024-04-12 18:37:04 -05:00
abhiShandy 6d57bbffe5
fix: feetext defaults to free (#1031)
* fix: feetext defaults to free

* Update components/fee-button.js

Co-authored-by: ekzyis <ek@stacker.news>

---------

Co-authored-by: ekzyis <ek@stacker.news>
2024-04-09 11:12:24 -05:00
keyan 81d3212ffb add NEXT_PUBLIC_URL 2024-04-08 17:54:39 -05:00
Ben Allen 5be6df0266
Internal links are not target=_blank by default (#1037)
* feat: internal links are not target=_blank by default

* feat: use <Link>

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
2024-04-08 16:56:44 -05:00
Felipe Bueno 4633e8eb5e
Allow pasting image from clipboard (#1043)
* form.js: Allow pasting image from clipboard

* remove semicolons

* Check clipboardData.items before continuing

* == -> ===

* Remove semicolons... again =/

* fix Strings must use singlequote

* Ignore DataTransfer no-undef lint error

* new DataTransfer -> new window.DataTransfer()

* add multiple image pasting

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
2024-04-08 16:31:02 -05:00
SatsAllDay e6b825dafe
Mute Management Settings Page (#1034)
* first pass of a mute mgmt page, ported from subscription mgmt page pr

* adjust error message for mutes

* muted users -> muted stackers

* fix typo in component name
2024-04-08 09:13:56 -05:00
SatsAllDay 91a0d1ccd7
env vars for polling intervals (#1038)
* env vars for polling intervals

add env vars for 4 different common polling intervals,
fast (1000), normal (30000), long (60000), extra long (300000)

use env vars in all `pollInterval` params to `useQuery`

* replace `setInterval`'s interval with `FAST_POLL_INTERVAL`
2024-04-08 09:13:12 -05:00
keyan 1d154ec9b5 attempt to fix lastChecked getting overwritten 2024-04-06 18:28:23 -05:00
ekzyis ba8b37ffb9
Add missing space in front of founding date (#1027) 2024-04-05 11:52:11 -05:00
Ben Allen 5fa7fd9a83
Bottom nav uses fixed position to fix firefox bug (#1011)
* use fixed position + div placeholder

* hide footer padding when not shown

* account for mobile inset

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
2024-04-04 18:50:52 -05:00
keyan e7fec21375 fix hidden wallet layout shift 2024-04-04 18:07:59 -05:00
keyan b995035f46 prevent contexts causing rerenders 2024-04-04 17:52:59 -05:00
Felipe Bueno a0e705b1c0
Just some minor fixes (#1012)
* Add .vscode/settings.json to .gitignore to allow local vscode settings without making the work tree dirty

* Swap (fix) Login & SignUp button ids + Make them both 112px wide
2024-04-04 16:31:53 -05:00
keyan 2bf11dc848 remove reliance on intersection observer 2024-04-04 15:38:27 -05:00
ekzyis 9d897e9bf7
Use same onclose listener in sendPayment (#1020)
This is the onclose listener from getInfo.

This might also be a potential fix for undefined errors that I am getting.

With "undefined errors" I mean that the error itself is literally undefined.
2024-04-04 12:28:52 -05:00
ekzyis 6e75b9d274
Fix effect dependencies (#1019)
* Fix missing effect dependencies

* Remove unnecessary effect dependency
2024-04-04 12:23:49 -05:00
nl 32ea514286
less confusing expression for the hint of when the autowithdraw will be initiated (#1015)
* less confusing expression of when the autowithdraw will be initiated

* only change display value

* tentatively resolved linting errors: spacing around * and removed unused var import
2024-04-04 09:18:41 -05:00
ekzyis ebcdc21728
Remove useRef for NWC relay (#1014)
* Remove useRef for NWC relay

* connect to relay for every payment for more reliable payments
* remove getInfoWithRelay method (no longer needed since we no longer use useRef)
* fix 'WebSocket is already in CLOSING or CLOSED state.' errors
* improve logging

* Log connection failures

* Fix no error thrown on validation error
2024-04-04 08:29:39 -05:00
SatsAllDay 992fc54160
Subscription management page (#1000)
* first pass of a subscription management page under settings

* add tabs to settings ui

* NymActionDropdown

* update Apollo InMemoryCache to merge paginated list of my subscribed users

* various updates

* switch from UsersNullable to Users

* bake the nym action dropdwon into the user component

* add back fields to the user query

* `meSubscriptionPosts`, `meSubscriptionComments`, `meMute`

* Refetch my subscribed users when a user subscription is changed

* update user list to hide stats in the subscribed list users

* update my sub'd users fragment to remove unnecessary user fields

* memoize subscribe user context provider value to avoid re-renders

* use inner join instead of left join

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* throw error when unauthenticated

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-04-03 19:38:47 -05:00
ekzyis 15fb7f446b
Wallet Logs (#994)
* nwc wallet logs

* persist logs in IndexedDB

* Potential fix for empty error message

* load logs limited to 5m ago from IDB

* load logs from past via query param

* Add 5m, 1h, 6h links for earlier logs

* Show end of log

* Clamp to logStart

* Add log.module.css

* Remove TODO about persistence

* Use table for logs

* <table> fixes bad format with fixed width and message overflow into start of next row
* also using ---start of log--- instead of ---end of log--- now
* removed time string in header nav

* Rename .header to .logNav

* Simply load all logs and remove navigation

I realized the code for navigation was most likely premature optimization which even resulted in worse UX:
Using the buttons to load logs from 5m, 1h, 6h ago sometimes meant that nothing happened at all since there were no logs from 5m, 1h, 6h ago.
That's why I added a time string as "start of logs" so it's at least visible that it changed but that looked bad so I removed it.

But all of this was not necessary: I can simply load all logs at once and then the user can scroll around however they like.

I was worried that it would be bad for performance to load all logs at once since we might store a lot of logs but as mentioned, that's probably premature optimization.

WHEN a lot of logs are stored AND this becomes a problem (What problem even? Slow page load?), THEN we can think about this.

If page load ever becomes slow because of loading logs, we could probably simply not load the logs at page load but only when /wallet/logs is visited.

But for now, this works fine.

* Add follow checkbox

* Create WalletLogs component

* Embed wallet logs

* Remove test error

* Fix level padding

* Add LNbits logs

* Add logs for attaching LND and lnAddr

* Use err.message || err.toString?.() consistently

* Autowithdrawal logs

* Use details from LND error

* Don't log test invoice individually

* Also refetch logs on error

* Remove obsolete and annoying toasts

* Replace scrollIntoView with scroll

* Use constant embedded max-height

* Fix missing width: 100% for embedded logs

* Show full payment hash and preimage in logs

* Also parse details from LND errors on autowithdrawal failures

* Remove TODO

* Fix accidental removal of wss:// check

* Fix alignment of start marker and show empty if empty

* Fix sendPayment loop

* Split context in two
2024-04-03 17:27:21 -05:00
JP a7105b90f2
Fix title from draft being dismissed (#718) (#991)
* Fix title from draft being dismissed

Add a way to bypass the title generation query when the url change is from local storage (draft) and not user interaction.

* Check draft title from storage

* Remove unused
2024-04-03 16:13:20 -05:00
Keyan 5a1f39d076
Merge pull request #1008 from stackernews/territory-header-createdAt
Add founding date to territory header
2024-04-03 13:00:00 -05:00
keyan a764837776 update redirection logic for invites 2024-04-02 19:51:30 -05:00
ekzyis 3cd80a54f6 Add createdAt to territory header 2024-04-03 01:17:32 +02:00
keyan 1e3a836fbc update reward notification for msm 2024-03-30 18:46:01 -05:00
keyan ef5a92dff4 match offcanvas nym position to navbar 2024-03-28 18:57:42 -05:00
keyan 9820055aee refine hiding bottom navbar when virtual keyboard opens 2024-03-28 18:18:44 -05:00
keyan 176d0e2e77 fix weird ios sticky behavior with virtual keyboard 2024-03-28 17:35:08 -05:00
keyan b2616bdfdb change order of bell and post button for symettry 2024-03-28 16:35:21 -05:00
keyan 7dac5e79a6 prioritize showing wallet balance over price carousel 2024-03-28 16:32:53 -05:00
keyan 79b894514b fix sticky gap on some android devices 2024-03-28 16:17:05 -05:00
keyan d5a018e48d hide bottom navigation when virtual keyboard is shown 2024-03-28 16:03:45 -05:00
keyan ce5d01037a use safe-area-inset-bottom for bottom nav padding 2024-03-28 12:57:27 -05:00
keyan 97927c1f9a consistent sticky search spacing 2024-03-28 12:37:26 -05:00
keyan dfc3d7dfa6 fix nav spacing 2024-03-28 12:33:58 -05:00
ekzyis dcb7205278 Fix alignment in modal 2024-03-28 17:10:05 +01:00
Keyan 4c2fcec69b
Merge pull request #982 from stackernews/nav
Improved navigation with dedicated mobile navigation
2024-03-27 16:53:19 -05:00
keyan 6054afa10c simplify logic determining if territory select is shown 2024-03-27 16:29:04 -05:00
keyan 2575a4a494 offcanvas style and login fixes 2024-03-27 14:41:02 -05:00
keyan f0911fde04 more spacing consistency 2024-03-27 14:04:04 -05:00
keyan 316418327a make recent/top have consistent spacing 2024-03-27 13:44:36 -05:00
Keyan df7e944bf8
Merge pull request #980 from stackernews/hashed-api-keys
Hash API keys with SHA-256 before storing them
2024-03-27 13:02:57 -05:00
ekzyis 48342bc246 Fix typo 'visibile' 2024-03-27 15:45:17 +01:00
keyan e1f183f48a navigation -> nav 2024-03-26 19:49:10 -05:00
keyan b884bde24d check for new notifications in context/singleton 2024-03-26 19:35:18 -05:00
keyan bfe5edcfe3 search all territories by default + more intuitive search filters 2024-03-26 18:37:40 -05:00
keyan f2ba61e64b enhance navigation 2024-03-26 18:36:31 -05:00
ekzyis 121205fa4b Add delete obstacle 2024-03-26 22:33:18 +01:00
Keyan a93fea4a1f
Merge pull request #975 from benalleng/option-key-prop
Add index to make unique key props on territory options
2024-03-26 14:31:43 -05:00
benalleng e36b77ad68 fix: add index to make unique key props on territory options 2024-03-26 15:28:26 -04:00
Keyan b18b5d1638
Merge pull request #974 from felipebueno/reader_view_compatibility
Enable readerView compatibility (issue #884)
2024-03-26 14:00:50 -05:00
Felipe Bueno 170bf7464b fullItemContainer div -> article to make it compatible with browser's reader view 2024-03-26 14:10:18 -03:00
Keyan 3730b89667
Merge pull request #972 from benalleng/issue923
Allow links to be fit to their content on the homepage
2024-03-26 11:00:56 -05:00
benalleng dc87594d92 feat: add max-width fit-content 2024-03-26 09:58:48 -04:00
ekzyis 922d2394fd Remove unnecessary withdrawl field 2024-03-26 02:10:46 +01:00
ekzyis 3388f818cf Add withdrawal notifications 2024-03-26 00:50:48 +01:00
Keyan 3a00695041
Merge pull request #965 from stackernews/zap-undo-threshold
Use thresholds to trigger zap undos
2024-03-25 17:34:10 -05:00
Keyan e60f1b80d3
Merge pull request #962 from stackernews/more-zap-undo-fixes
More zap undo fixes II
2024-03-25 17:32:30 -05:00
Keyan 59b0027ad0
Merge pull request #970 from AustinKelsay/bugfix-crosspost-link-context
Add context field to crossposted link if present
2024-03-25 17:25:22 -05:00
austinkelsay a9506c4532 Add context field to crossposted link if present 2024-03-25 17:16:45 -05:00
Satoshi Nakamoto 263d0cc425 remove duplicative styles 2024-03-25 15:35:32 -04:00
Satoshi Nakamoto 32bc483e48 chart skeletons 2024-03-25 15:35:32 -04:00
ekzyis c2aef34ba2 Add threshold for zap undos 2024-03-25 20:34:28 +01:00
ekzyis 42d7a31584 Fix custom zap modal closed after zap undo 2024-03-25 20:32:23 +01:00
ekzyis 0193ac97fe Fix toast progress bar jump due to end flow hack
If an underlying toast finished, an empty toast that automatically immediately hides was dispatched to end the flow ("end flow hack").

If this empty toast had the same tag, the code marked the top toast as hidden even though it was not hidden.

This meant that during render, the animation-delay for the top toast (which was already rendered) was added again, leading to a progress bar jump.

This is fixed by no longer using this "end flow hack" where a toast is dispatched but a dedicated function to end flows.
2024-03-25 20:32:23 +01:00
ekzyis 17071fa615 Add missing tag to custom zap toasts 2024-03-25 20:32:23 +01:00
keyan e8f9a186c6 fix image url construction 2024-03-20 14:18:11 -05:00
ekzyis d237861ff5
Use module path aliases (#938)
* Use module path aliases

* fix broken refactor

* path mapping for svgs, style, and remaining places (bonus: lose babel dep)

---------

Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
2024-03-19 19:37:31 -05:00
ekzyis 687d71f246
Purchase archived territories (#897)
* Handle archived territories in territory form

* Use dedicated mutation

* Add sanity check for eternal territories

* Fix fields and cost ignored

* Remove no longer needed manual validation in upsertSub

* Remove founder check

* Always check if sub is archived

Using { abortEarly: false } now since previously, if no description was not given, we wouldn't detect if the sub was archived since validation would abort on empty descriptions.

Only on submission all fields would get validated but since we ignore archived errors during submission, the user would never see that the sub is archived before submission
+ the wrong mutation would run if archived is not already true before submission.

Hence, we need to validate all fields always.

There is currently still a bug where the validation does not immediately run but maybe this can be fixed by simply using validateImmediately on the Formik component.

* Fix archived warning not shown after first render

* Only create transfers if owner actually changes

* Reuse helper functions in lib/territory.js

* Rename var to editing

* Use onChange instead of validation override

* Run same validation on server for unarchiving

* Fix 'territory archived' shown during edits

* Use && instead of ternary operator for conditional query

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
2024-03-19 17:23:59 -05:00
Keyan 18d126c610
Merge pull request #929 from stackernews/referral-link-privacy-setting
Add setting for no referral links on copy
2024-03-17 12:55:33 -05:00
ekzyis 5b15fd88a9 Fix ToC due to repeated slug calls 2024-03-17 18:24:39 +01:00
ekzyis 2ba4063645 Add setting for no referral links on copy 2024-03-17 16:23:03 +01:00
ekzyis 687012d1a0
API Keys (#915)
* Generate API key in settings

* Check x-api-key for GraphQL API requests

* Don't fallback to cookie if x-api-key header was provided

* Select all session fields

* Fix error if API key not found

* Fix style in settings via form-label className

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
2024-03-14 15:32:34 -05:00
ekzyis 501885cfa0
Ignore if sub belongs to user during existence check (#904)
* Ignore if sub belongs to user during existence check

* Remove code no longer needed

* Fix territory edit

Territory edits were broken because validation failed for existing territories and if you edit an territory, it obviously already exists.

This commit fixes this by ignoring the territory that we're currently editing.

* Fix existence check using stale cache

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
2024-03-14 11:17:53 -05:00
ekzyis c8e65d5a23
Don't hide self in top even if hidden (#905)
* Don't hide self in top even if hidden

* Also don't hide self in top cowboys

* only use anon icon for anon stuff

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
2024-03-13 19:26:59 -05:00
ekzyis f94de0f3ac
Fix zap shadow on hover (#906) 2024-03-13 11:48:16 -05:00
Keyan 23ee62fb21
add sndev shell script and enhance docker compose local dev
* add hot reloading worker:dev script

* refine docker config

* sndev bash script and docker reliability stuff

* make posix shell

* restart: always -> unless-stopped

* proper check for postgres health

* add db seed to sndev

* refinements after fresh builds

* begin adding regtest network

* add changes to .env.sample

* reorganize docker and add static certs/macroon to lnd

* copy wallet and macaroon dbs for deterministic wallets/macaroons

* fix perms of shared directories

* allow debian useradd with duplicate id

* add auto-mining

* make bitcoin health check dependent on blockheight

* open channel between ln nodes

* improve channel opens

* add sndev payinvoice

* add sndev withdraw

* ascii art

* add sndev status

* sndev passthrough to docker and containers

* add sndev psql command

* remove script logging

* small script cleanup

* smaller db seed

* pin opensearch version

Co-authored-by: ekzyis <ek@stacker.news>

* pin opensearch dashboard

Co-authored-by: ekzyis <ek@stacker.news>

* add sndev prisma

* add help for all commands

* set -e

* s3 and image proxy with broken name resolution

* finally fully working image uploads

* use a better diff algo

---------

Co-authored-by: ekzyis <ek@stacker.news>
2024-03-13 09:04:09 -05:00
ekzyis 179a539d4d
Parse numeric strings as numbers (#902)
* Parse numeric strings as numbers

* Additionally check for type of field value
2024-03-06 19:45:00 -06:00
keyan b38a5e653c make image aspect ratio a fraction 2024-03-06 15:15:11 -06:00
keyan 6a6f4a88aa refine bounty icon margin for wrapping in comments 2024-03-06 14:20:03 -06:00
JP Melanson ecf859ee4c
Change poll icon color when active (#680) (#898) 2024-03-06 14:02:48 -06:00
Keyan 2fc1ef44dd
Fix image rerender jitter and layout shift (#896)
* fix image jitter and layout shift

* prevent unecessary context rerenders
2024-03-06 13:53:46 -06:00
ekzyis 8d49c034c6
Fix alignment of info icon (#895) 2024-03-05 16:27:29 -06:00
ekzyis b379e7467f
Territory transfers (#878)
* Allow founders to transfer territories

* Log territory transfers in new AuditLog table

* Add territory transfer notifications

* Use polymorphic AuditEvent table

* Add setting for territory transfer notifications

* Add push notification

* Rename label from user to stacker

* More space between cancel and confirm button

* Remove AuditEvent table

The audit table is not necessary for territory transfers and only adds complexity and unrelated discussion to this PR.

Thinking about a future-proof schema for territory transfers and how/what to audit at the same time made my head spin.

Some thoughts I had:

1. Maybe using polymorphism for an audit log / audit events is not a good idea

Using polymorphism as is currently used in the code base (user wallets) means that every generic event must map to exactly one specialized event.

Is this a good requirement/assumption? It already didn't work well for naive auditing of territory transfers since we want events to be indexable by user (no array column) so every event needs to point to a single user but a territory transfer involves multiple users.

This made me wonder: Do we even need a table? Maybe the audit log for a user can be implemented using a view? This would also mean no data denormalization.

2. What to audit and how and why?

Most actions are already tracked in some way by necessity: zaps, items, mutes, payments, ...

In that case: what is the benefit of tracking these things individually in a separate table?

Denormalize simply for convenience or performance? Why no view (see previous point)? Use case needs to be more clearly defined before speccing out a schema.

* Fix territory transfer notification id conflict

* Use include instead of two separate queries

* Drop territory transfer setting

* Remove trigger usage

* Prevent transfers to yourself
2024-03-05 13:56:02 -06:00
keyan b5de515f5e render outlawed images and links as text 2024-03-04 19:29:50 -06:00
keyan b16234630b better link rel attr handling 2024-03-04 19:20:14 -06:00
keyan 0a0bfbbb37 replace welcome banner with msm banner 2024-03-04 16:51:36 -06:00
keyan fd7e3b04f9 make tabindex camel cased 2024-03-04 15:38:56 -06:00