Merge branch 'master' into blinkreceiver
This commit is contained in:
		
						commit
						6cb4870595
					
				
							
								
								
									
										35
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							@ -1,35 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
name: Bug report
 | 
			
		||||
about: Report a problem
 | 
			
		||||
title: ''
 | 
			
		||||
labels: bug
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
*Note: this template is meant to help you report the bug so that we can fix it faster, ie not all of these sections are required*
 | 
			
		||||
 | 
			
		||||
**Description**
 | 
			
		||||
A clear and concise description of what the bug is.
 | 
			
		||||
 | 
			
		||||
**Steps to Reproduce**
 | 
			
		||||
A clear and concise way we might be able to reproduce the bug.
 | 
			
		||||
 | 
			
		||||
**Expected behavior**
 | 
			
		||||
A clear and concise description of what you expected to happen.
 | 
			
		||||
 | 
			
		||||
**Screenshots**
 | 
			
		||||
If applicable, add screenshots to help explain your problem.
 | 
			
		||||
 | 
			
		||||
**Logs**
 | 
			
		||||
If applicable, add your browsers console logs.
 | 
			
		||||
 | 
			
		||||
**Environment:**
 | 
			
		||||
If you only experience the issue on certain devices or browsers, provide that info.
 | 
			
		||||
 - Device: [e.g. iPhone6]
 | 
			
		||||
 - OS: [e.g. iOS]
 | 
			
		||||
 - Browser [e.g. chrome, safari]
 | 
			
		||||
 - Version [e.g. 22]
 | 
			
		||||
 | 
			
		||||
**Additional context**
 | 
			
		||||
Add any other context about the problem here.
 | 
			
		||||
							
								
								
									
										65
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
			
		||||
name: 🐞 Bug report
 | 
			
		||||
description: Create a bug report to help us fix it
 | 
			
		||||
title: "bug report"
 | 
			
		||||
labels: [bug]
 | 
			
		||||
body:
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Is there an existing issue for this?
 | 
			
		||||
      description: Please search to see if an issue already exists for the bug you encountered.
 | 
			
		||||
      options:
 | 
			
		||||
        - label: I have searched the existing issues
 | 
			
		||||
          required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Describe the bug
 | 
			
		||||
      description: A clear and concise description of what the bug is. Include images if relevant.
 | 
			
		||||
      placeholder: I accidentally deleted the internet. Here's my story ...
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Screenshots
 | 
			
		||||
      description: |
 | 
			
		||||
        Add screenshots to help explain your problem. You can also add a video here.
 | 
			
		||||
 | 
			
		||||
        Tip: You can attach images or video files by clicking this area to highlight it and then dragging files in.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Steps To Reproduce
 | 
			
		||||
      description: Steps to reproduce the bug.
 | 
			
		||||
      placeholder: |
 | 
			
		||||
        1. Go to '...'
 | 
			
		||||
        2. Click on '...'
 | 
			
		||||
        3. Scroll to '...'
 | 
			
		||||
        4. See error
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Expected behavior
 | 
			
		||||
      description: A clear and concise description of what you expected to happen
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Logs
 | 
			
		||||
      description: If applicable, add your browser's console logs here
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Device information
 | 
			
		||||
      placeholder: |
 | 
			
		||||
        - OS: [e.g. Windows]
 | 
			
		||||
        - Browser: [e.g. chrome, safari, firefox]
 | 
			
		||||
        - Browser Version: [e.g. 22]
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Additional context
 | 
			
		||||
      description: |
 | 
			
		||||
        Do you have links to discussions about this on SN or other references?
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
							
								
								
									
										5
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
blank_issues_enabled: true
 | 
			
		||||
contact_links:
 | 
			
		||||
  - name: Questions
 | 
			
		||||
    url: https://stacker.news/~meta
 | 
			
		||||
    about: If you simply have a question, you can ask it in ~meta or the saloon.
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							@ -1,20 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
name: Feature request
 | 
			
		||||
about: Suggest a feature
 | 
			
		||||
title: ''
 | 
			
		||||
labels: feature
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
**Is your feature request related to a problem? Please describe.**
 | 
			
		||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
 | 
			
		||||
 | 
			
		||||
**Describe the solution you'd like**
 | 
			
		||||
A clear and concise description of what you want to happen.
 | 
			
		||||
 | 
			
		||||
**Describe alternatives you've considered**
 | 
			
		||||
A clear and concise description of any alternative solutions or features you've considered.
 | 
			
		||||
 | 
			
		||||
**Additional context**
 | 
			
		||||
Add any other context or screenshots about the feature request here.
 | 
			
		||||
							
								
								
									
										32
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
name: ✨ Feature request
 | 
			
		||||
description: Request a feature you'd like to see in SN!
 | 
			
		||||
title: "feature request"
 | 
			
		||||
labels: [feature]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        We're always looking for suggestions on how we could improve SN!
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Describe the problem you're trying to solve
 | 
			
		||||
      description: |
 | 
			
		||||
        Is your feature request related to a problem? Add a clear and concise description of what the problem is.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Describe the solution you'd like
 | 
			
		||||
      description: A clear and concise description of what you want to happen.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Describe alternatives you've considered
 | 
			
		||||
      description: |
 | 
			
		||||
        A clear and concise description of any alternative solutions or features you have considered.
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Additional context
 | 
			
		||||
      description: |
 | 
			
		||||
        Add any other additional context or screenshots about the feature request here.
 | 
			
		||||
							
								
								
									
										27
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							@ -1,45 +1,22 @@
 | 
			
		||||
## Description
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
A clear and concise description of what you changed and why.
 | 
			
		||||
Don't forget to mention which tickets this closes (if any).
 | 
			
		||||
Use following syntax to close them automatically on merge: closes #<number>
 | 
			
		||||
-->
 | 
			
		||||
_A clear and concise description of what you changed and why._
 | 
			
		||||
 | 
			
		||||
## Screenshots
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
If your changes are user facing, please add screenshots of the new UI.
 | 
			
		||||
You can also create a video to showcase your changes (useful to show UX).
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
## Additional Context
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
You can mention here anything that you think is relevant for this PR. Some examples:
 | 
			
		||||
* You encountered something that you didn't understand while working on this PR
 | 
			
		||||
* You were not sure about something you did but did not find a better way
 | 
			
		||||
* You initially had a different approach but went with a different approach for some reason
 | 
			
		||||
-->
 | 
			
		||||
_Was anything unclear during your work on this PR? Anything we should definitely take a closer look at?_
 | 
			
		||||
 | 
			
		||||
## Checklist
 | 
			
		||||
 | 
			
		||||
**Are your changes backwards compatible? Please answer below:**
 | 
			
		||||
 | 
			
		||||
<!-- put your answer about backwards compatibility here -->
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
If your PR is not ready for review yet, please mark your PR as a draft.
 | 
			
		||||
If changes were requested, request a new review when you incorporated the feedback.
 | 
			
		||||
-->
 | 
			
		||||
**On a scale of 1-10 how well and how have you QA'd this change and any features it might affect? Please answer below:**
 | 
			
		||||
 | 
			
		||||
<!-- put your answer about QA here -->
 | 
			
		||||
 | 
			
		||||
**For frontend changes: Tested on mobile? Please answer below:**
 | 
			
		||||
 | 
			
		||||
<!-- put your answer about mobile QA here -->
 | 
			
		||||
 | 
			
		||||
**Did you introduce any new environment variables? If so, call them out explicitly here:**
 | 
			
		||||
 | 
			
		||||
<!-- put your answer about env vars here -->
 | 
			
		||||
 | 
			
		||||
@ -258,8 +258,10 @@ export async function createLightningInvoice (actionType, args, context) {
 | 
			
		||||
        expiry: INVOICE_EXPIRE_SECS
 | 
			
		||||
      }, { models })
 | 
			
		||||
 | 
			
		||||
      // the sender (me) decides if the wrapped invoice has a description
 | 
			
		||||
      // whereas the recipient decides if their invoice has a description
 | 
			
		||||
      const { invoice: wrappedInvoice, maxFee } = await wrapInvoice(
 | 
			
		||||
        bolt11, { msats: cost, description }, { lnd })
 | 
			
		||||
        bolt11, { msats: cost, description }, { me, lnd })
 | 
			
		||||
 | 
			
		||||
      return {
 | 
			
		||||
        bolt11,
 | 
			
		||||
 | 
			
		||||
@ -180,7 +180,8 @@ export default function Comment ({
 | 
			
		||||
                        </ActionTooltip>}
 | 
			
		||||
                    </>
 | 
			
		||||
                  }
 | 
			
		||||
                  onEdit={e => { setEdit(!edit) }}
 | 
			
		||||
                  edit={edit}
 | 
			
		||||
                  toggleEdit={e => { setEdit(!edit) }}
 | 
			
		||||
                  editText={edit ? 'cancel' : 'edit'}
 | 
			
		||||
                />}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ import classNames from 'classnames'
 | 
			
		||||
 | 
			
		||||
export default function ItemInfo ({
 | 
			
		||||
  item, full, commentsText = 'comments',
 | 
			
		||||
  commentTextSingular = 'comment', className, embellishUser, extraInfo, onEdit, editText,
 | 
			
		||||
  commentTextSingular = 'comment', className, embellishUser, extraInfo, edit, toggleEdit, editText,
 | 
			
		||||
  onQuoteReply, extraBadges, nested, pinnable, showActionDropdown = true, showUser = true,
 | 
			
		||||
  setDisableRetry, disableRetry
 | 
			
		||||
}) {
 | 
			
		||||
@ -151,8 +151,8 @@ export default function ItemInfo ({
 | 
			
		||||
        showActionDropdown &&
 | 
			
		||||
          <>
 | 
			
		||||
            <EditInfo
 | 
			
		||||
              item={item} canEdit={canEdit}
 | 
			
		||||
              setCanEdit={setCanEdit} onEdit={onEdit} editText={editText} editThreshold={editThreshold}
 | 
			
		||||
              item={item} edit={edit} canEdit={canEdit}
 | 
			
		||||
              setCanEdit={setCanEdit} toggleEdit={toggleEdit} editText={editText} editThreshold={editThreshold}
 | 
			
		||||
            />
 | 
			
		||||
            <PaymentInfo item={item} disableRetry={disableRetry} setDisableRetry={setDisableRetry} />
 | 
			
		||||
            <ActionDropdown>
 | 
			
		||||
@ -311,7 +311,7 @@ function PaymentInfo ({ item, disableRetry, setDisableRetry }) {
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function EditInfo ({ item, canEdit, setCanEdit, onEdit, editText, editThreshold }) {
 | 
			
		||||
function EditInfo ({ item, edit, canEdit, setCanEdit, toggleEdit, editText, editThreshold }) {
 | 
			
		||||
  const router = useRouter()
 | 
			
		||||
 | 
			
		||||
  if (canEdit) {
 | 
			
		||||
@ -320,7 +320,7 @@ function EditInfo ({ item, canEdit, setCanEdit, onEdit, editText, editThreshold
 | 
			
		||||
        <span> \ </span>
 | 
			
		||||
        <span
 | 
			
		||||
          className='text-reset pointer fw-bold'
 | 
			
		||||
          onClick={() => onEdit ? onEdit() : router.push(`/items/${item.id}/edit`)}
 | 
			
		||||
          onClick={() => toggleEdit ? toggleEdit() : router.push(`/items/${item.id}/edit`)}
 | 
			
		||||
        >
 | 
			
		||||
          <span>{editText || 'edit'} </span>
 | 
			
		||||
          {(!item.invoice?.actionState || item.invoice?.actionState === 'PAID')
 | 
			
		||||
@ -334,5 +334,21 @@ function EditInfo ({ item, canEdit, setCanEdit, onEdit, editText, editThreshold
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (edit && !canEdit) {
 | 
			
		||||
    // if we're still editing after timer ran out
 | 
			
		||||
    return (
 | 
			
		||||
      <>
 | 
			
		||||
        <span> \ </span>
 | 
			
		||||
        <span
 | 
			
		||||
          className='text-reset pointer fw-bold'
 | 
			
		||||
          onClick={() => toggleEdit ? toggleEdit() : router.push(`/items/${item.id}`)}
 | 
			
		||||
        >
 | 
			
		||||
          <span>cancel </span>
 | 
			
		||||
          <span>00:00</span>
 | 
			
		||||
        </span>
 | 
			
		||||
      </>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@ import ItemPopover from './item-popover'
 | 
			
		||||
import classNames from 'classnames'
 | 
			
		||||
import { CarouselProvider, useCarousel } from './carousel'
 | 
			
		||||
import rehypeSN from '@/lib/rehype-sn'
 | 
			
		||||
import remarkUnicode from '@/lib/remark-unicode'
 | 
			
		||||
import Embed from './embed'
 | 
			
		||||
import remarkMath from 'remark-math'
 | 
			
		||||
import rehypeMathjax from 'rehype-mathjax'
 | 
			
		||||
@ -33,7 +34,7 @@ const rehypeSNStyled = () => rehypeSN({
 | 
			
		||||
  }]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const remarkPlugins = [gfm, [remarkMath, { singleDollarTextMath: false }]]
 | 
			
		||||
const remarkPlugins = [gfm, remarkUnicode, [remarkMath, { singleDollarTextMath: false }]]
 | 
			
		||||
const rehypePlugins = [rehypeSNStyled, rehypeMathjax]
 | 
			
		||||
 | 
			
		||||
export function SearchText ({ text }) {
 | 
			
		||||
 | 
			
		||||
@ -51,10 +51,18 @@ export default function WalletCard ({ wallet, draggable, onDragStart, onDragEnte
 | 
			
		||||
        <Card.Title>{title}</Card.Title>
 | 
			
		||||
        <Card.Subtitle className='mt-2'>
 | 
			
		||||
          {badges?.map(
 | 
			
		||||
            badge =>
 | 
			
		||||
              <Badge className={styles.badge} key={badge} bg={null}>
 | 
			
		||||
                {badge}
 | 
			
		||||
              </Badge>)}
 | 
			
		||||
            badge => {
 | 
			
		||||
              let style = ''
 | 
			
		||||
              switch (badge) {
 | 
			
		||||
                case 'receive': style = styles.receive; break
 | 
			
		||||
                case 'send': style = styles.send; break
 | 
			
		||||
              }
 | 
			
		||||
              return (
 | 
			
		||||
                <Badge className={`${styles.badge} ${style}`} key={badge} bg={null}>
 | 
			
		||||
                  {badge}
 | 
			
		||||
                </Badge>
 | 
			
		||||
              )
 | 
			
		||||
            })}
 | 
			
		||||
        </Card.Subtitle>
 | 
			
		||||
      </Card.Body>
 | 
			
		||||
      <Link href={`/settings/wallets/${wallet.name}`}>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								lib/remark-unicode.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								lib/remark-unicode.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
import { visit } from 'unist-util-visit'
 | 
			
		||||
 | 
			
		||||
export default function remarkFilterUnicode () {
 | 
			
		||||
  return (tree) => {
 | 
			
		||||
    try {
 | 
			
		||||
      visit(tree, 'paragraph', (node) => {
 | 
			
		||||
        node.children = node.children.map(child => {
 | 
			
		||||
          if (child.type !== 'inlineMath') return child
 | 
			
		||||
 | 
			
		||||
          // if inline math contains currency symbols, rehypeMathjax will throw
 | 
			
		||||
          // see https://github.com/stackernews/stacker.news/issues/1525
 | 
			
		||||
          // and https://github.com/stackernews/stacker.news/pull/1526
 | 
			
		||||
 | 
			
		||||
          let { hChildren } = child.data
 | 
			
		||||
          hChildren = hChildren.map(child2 => {
 | 
			
		||||
            return { ...child2, value: filterUnicode(child2.value) }
 | 
			
		||||
          })
 | 
			
		||||
          child.data.hChildren = hChildren
 | 
			
		||||
 | 
			
		||||
          return { ...child, value: filterUnicode(child.value) }
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      console.error(err)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function filterUnicode (text) {
 | 
			
		||||
  return text.replace(/\p{Sc}/u, '')
 | 
			
		||||
}
 | 
			
		||||
@ -27,6 +27,7 @@ function InviteForm () {
 | 
			
		||||
          fields: {
 | 
			
		||||
            invites (existingInviteRefs = []) {
 | 
			
		||||
              const newInviteRef = cache.writeFragment({
 | 
			
		||||
                fragmentName: 'InviteFields',
 | 
			
		||||
                data: createInvite,
 | 
			
		||||
                fragment: INVITE_FIELDS
 | 
			
		||||
              })
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,28 @@
 | 
			
		||||
-- fix revenue for users who have multiple revenue entries for the same day
 | 
			
		||||
WITH revenue_days AS (
 | 
			
		||||
  SELECT coalesce(sum(msats), 0) as revenue_msats, "userId", created_at
 | 
			
		||||
  FROM "SubAct"
 | 
			
		||||
  WHERE type = 'REVENUE'
 | 
			
		||||
  GROUP BY "userId", created_at
 | 
			
		||||
  HAVING COUNT(*) > 1
 | 
			
		||||
),
 | 
			
		||||
revenue_total AS (
 | 
			
		||||
  SELECT coalesce(sum(revenue_msats), 0) as revenue_msats, "userId"
 | 
			
		||||
  FROM revenue_days
 | 
			
		||||
  GROUP BY "userId"
 | 
			
		||||
)
 | 
			
		||||
UPDATE users SET msats = users.msats + revenue_total.revenue_msats
 | 
			
		||||
FROM revenue_total
 | 
			
		||||
WHERE users.id = revenue_total."userId";
 | 
			
		||||
 | 
			
		||||
-- fix stacked msats for users who have territory revenue
 | 
			
		||||
-- prior to this, we were not updating stacked msats for territory revenue
 | 
			
		||||
WITH territory_revenue AS (
 | 
			
		||||
  SELECT coalesce(sum(msats), 0) as revenue_msats, "userId"
 | 
			
		||||
  FROM "SubAct"
 | 
			
		||||
  WHERE type = 'REVENUE'
 | 
			
		||||
  GROUP BY "userId"
 | 
			
		||||
)
 | 
			
		||||
UPDATE users SET "stackedMsats" = users."stackedMsats" + territory_revenue.revenue_msats
 | 
			
		||||
FROM territory_revenue
 | 
			
		||||
WHERE users.id = territory_revenue."userId";
 | 
			
		||||
@ -40,6 +40,14 @@
 | 
			
		||||
  margin-right: 0.2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.receive {
 | 
			
		||||
  color: #20c997 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.send {
 | 
			
		||||
  color: var(--bs-primary) !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.attach {
 | 
			
		||||
  color: var(--bs-body-color) !important;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,7 @@ export const fields = [
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'CLN',
 | 
			
		||||
  subtitle: 'autowithdraw to your Core Lightning node via [CLNRest](https://docs.corelightning.org/docs/rest)',
 | 
			
		||||
  badges: ['receive only']
 | 
			
		||||
  badges: ['receive']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const fieldValidation = CLNAutowithdrawSchema
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@ export const fields = [
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'lightning address',
 | 
			
		||||
  subtitle: 'autowithdraw to a lightning address',
 | 
			
		||||
  badges: ['receive only']
 | 
			
		||||
  badges: ['receive']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const fieldValidation = lnAddrAutowithdrawSchema
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ export const fields = [
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'LNbits',
 | 
			
		||||
  subtitle: 'use [LNbits](https://lnbits.com/) for payments',
 | 
			
		||||
  badges: ['send & receive']
 | 
			
		||||
  badges: ['send', 'receive']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const fieldValidation = lnbitsSchema
 | 
			
		||||
 | 
			
		||||
@ -33,7 +33,7 @@ export const fields = [
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'LNC',
 | 
			
		||||
  subtitle: 'use Lightning Node Connect for LND payments',
 | 
			
		||||
  badges: ['send only', 'budgetable']
 | 
			
		||||
  badges: ['send', 'budgetable']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const fieldValidation = lncSchema
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@ export const fields = [
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'LND',
 | 
			
		||||
  subtitle: 'autowithdraw to your Lightning Labs node',
 | 
			
		||||
  badges: ['receive only']
 | 
			
		||||
  badges: ['receive']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const fieldValidation = LNDAutowithdrawSchema
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@ export const fields = [
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'NWC',
 | 
			
		||||
  subtitle: 'use Nostr Wallet Connect for payments',
 | 
			
		||||
  badges: ['send & receive', 'budgetable']
 | 
			
		||||
  badges: ['send', 'receive', 'budgetable']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const fieldValidation = nwcSchema
 | 
			
		||||
 | 
			
		||||
@ -33,7 +33,7 @@ export const fields = [
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'phoenixd',
 | 
			
		||||
  subtitle: 'use [phoenixd](https://phoenix.acinq.co/server) for payments',
 | 
			
		||||
  badges: ['send & receive']
 | 
			
		||||
  badges: ['send', 'receive']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// phoenixd::TODO
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ export const fieldValidation = ({ enabled }) => {
 | 
			
		||||
export const card = {
 | 
			
		||||
  title: 'WebLN',
 | 
			
		||||
  subtitle: 'use a [WebLN provider](https://www.webln.guide/ressources/webln-providers) for payments',
 | 
			
		||||
  badges: ['send only']
 | 
			
		||||
  badges: ['send']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function WebLnProvider ({ children }) {
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ const ZAP_SYBIL_FEE_MULT = 10 / 7 // the fee for the zap sybil service
 | 
			
		||||
    maxFee: number
 | 
			
		||||
  }
 | 
			
		||||
*/
 | 
			
		||||
export default async function wrapInvoice (bolt11, { msats, description, descriptionHash }, { lnd }) {
 | 
			
		||||
export default async function wrapInvoice (bolt11, { msats, description, descriptionHash }, { me, lnd }) {
 | 
			
		||||
  try {
 | 
			
		||||
    console.group('wrapInvoice', description)
 | 
			
		||||
 | 
			
		||||
@ -112,6 +112,11 @@ export default async function wrapInvoice (bolt11, { msats, description, descrip
 | 
			
		||||
      wrapped.description = inv.description
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (me?.hideInvoiceDesc) {
 | 
			
		||||
      wrapped.description = undefined
 | 
			
		||||
      wrapped.description_hash = undefined
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // validate the expiration
 | 
			
		||||
    if (new Date(inv.expires_at) < new Date(Date.now() + INCOMING_EXPIRATION_BUFFER_MSECS)) {
 | 
			
		||||
      throw new Error('Invoice expiration is too soon')
 | 
			
		||||
 | 
			
		||||
@ -72,10 +72,17 @@ export async function territoryRevenue ({ models }) {
 | 
			
		||||
        FROM revenue
 | 
			
		||||
        WHERE revenue > 1000
 | 
			
		||||
        RETURNING *
 | 
			
		||||
      ),
 | 
			
		||||
      "SubActResultTotal" AS (
 | 
			
		||||
        SELECT coalesce(sum(msats), 0) as total_msats, "userId"
 | 
			
		||||
        FROM "SubActResult"
 | 
			
		||||
        GROUP BY "userId"
 | 
			
		||||
      )
 | 
			
		||||
      UPDATE users SET msats = users.msats + "SubActResult".msats
 | 
			
		||||
      FROM "SubActResult"
 | 
			
		||||
      WHERE users.id = "SubActResult"."userId"`,
 | 
			
		||||
      UPDATE users
 | 
			
		||||
      SET msats = users.msats + "SubActResultTotal".total_msats,
 | 
			
		||||
        "stackedMsats" = users."stackedMsats" + "SubActResultTotal".total_msats
 | 
			
		||||
      FROM "SubActResultTotal"
 | 
			
		||||
      WHERE users.id = "SubActResultTotal"."userId"`,
 | 
			
		||||
    { models }
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user