Commit b6e43a1
feat: grant spent amounts (#3757)
* feat: add grant spent amount table (#3389)
* feat: add grant spent amount table
* fix: change interval start/end string to timestamp
* feat: fix filename, update op grant table
* fix: rm erroneously added migration to tsconfig
* feat: calculate grant spent amounts from new table (#3412)
* feat: calculate grant spent amounts from new table
* chore: linting
* fix: revise grant spent amounts calc to track interval
* fix: throw better error, dont inti interval amounts unless they exist
* fix: linter, wip commented out code
* refactor(backend): rename interval statuses
* fix: ensure correct amount (interval/total) is used for grant spent amount
* test(backend): grant spent amounts
* fix(backend): make logic more typesafe, avoid having to defend w/ internal server error
* test(backend): legacy grant calculations
* test(backend): classify payment interval fn
* test(backend): rm commented-out classify payment interval case
* refactor(backend): improve semantics of interval helper fn
* test(backend): add non-interval cases to create op
* Apply suggestions from code review
Co-authored-by: Max Kurapov <max@interledger.org>
* refactor: simplifiy interval calc
* chore: rm unused imports
* refactor: validate grant payment logic
* refactor: improve grant spent amount calc type safety
* refactor: improve grant spent amount calc type safety
* fix: missing trx
* chore: handle bad interval state
* chore: rm some superfluous comments
* chore: format
---------
Co-authored-by: Max Kurapov <max@interledger.org>
* feat: handle grant spent amount calculation on payment completion (#3674)
* feat: calculate grant spent amounts from new table
* chore: linting
* fix: revise grant spent amounts calc to track interval
* fix: throw better error, dont inti interval amounts unless they exist
* fix: linter, wip commented out code
* refactor(backend): rename interval statuses
* fix: ensure correct amount (interval/total) is used for grant spent amount
* test(backend): grant spent amounts
* fix(backend): make logic more typesafe, avoid having to defend w/ internal server error
* test(backend): legacy grant calculations
* test(backend): classify payment interval fn
* test(backend): rm commented-out classify payment interval case
* refactor(backend): improve semantics of interval helper fn
* test(backend): add non-interval cases to create op
* Apply suggestions from code review
Co-authored-by: Max Kurapov <max@interledger.org>
* feat: partially handled grant spent amount scenarios on settle
* feat: handle non-interval partial settleamount cases
* test(backend): failure grant spent amount case for sucessive payment
* test(backend): some grant calc interval cases
* test(backend): counting grant payments across interval boundaries
* chore(backend): rm commented out test
* test(backend): new grant spent amount on payment completion
* test(backend): improve interval grant calc test to show summation
* test(backend): failure edge case
* chore(backend): rm comment
* chore(backend): fix lint errors
* chore(backend): rm debug logs
* test(backend): fix failing
* Update packages/backend/src/open_payments/payment/outgoing/lifecycle.ts
Co-authored-by: Max Kurapov <max@interledger.org>
* fix(backend): rm extra spent amount record check
* feat(backend): return debit amount from .pay
* test(backend): failing test for grant spent amount bug
- if 2 payments are create then 2 payments are processed,
it assocaites the wrong spent amount with the wrong payment
* fix(backend): grant spent amounts calc race conditions
- partially implemented fix (missing interval stuff),
not fully validated by tests yet
* test(backend): grant calc race condition
* fix(backend): grant spent amount race conditions with failure
* chore(backend): format
* test(backend): add failing interval race condition test
* fix(backend): interval boundary/race condition edge case
- edge case is when there are create/complete race conditions around interval boundaries
* test(backend): improve edge case test
- ensures we are testing that the latest interval amount is
used as the base for interval amounts, not just the payment
in the interval being completed
* fix(backend): dont query for latest interval payment unecunnecessarily
- not necessary if we are within the interval of the payment being completed
* fix(backend): type mismatch
* test(backend): payment retries do not add additional spent record
* fix(backend): use correct debit
amount for spent amount recalc
* fix(backend): set correct payment state on
grant spent amount updates
* refactor(backend): dedupe revert/handle grant spent amounts
- turned duplicated logic into shared functions
- example fn where revert/update is all in one,
but felt it was more complicated
* chore: rm unused fn
* test(backend): fix ilp pay return expectations
* refactor(backend): move revert/update grant spent amounts to op service
* chore: rm unused import
* fix: handle grant spent amounts on payment cancellation
* chore: cleanup commented out code
* chore: rm submodule added in error
* chore(backend): add error logs
* fix(backend): explicit grant spent amount formation, more test assertions
* refactor(backend): only return receive amt from .pay
* fix(backend): build error
---------
Co-authored-by: Max Kurapov <max@interledger.org>
* fix: test to use tenantid
* fix: update lifecycle tests for mt
* feat: use new open payments spec version
* fix: failing lifecycle tests
* feat: add /GET outgoing-payment-grant route (#3756)
* feat: add /GET outgoing-payment-grant route
* fix: change null state return to return null
* fix: rm old comments
* fix: add get grant spent amount service tests
* fix: add get grant spent amount controller tests
* fix(backend): linter
* fix(backend): tenanted path
* fix: dont require identifier in outgoing payment access item introspection
* feat(backend): rm unecessary check
* test(auth): add test
* test(backend): add middleware test
* refactor(backend): cleanup grant spent amount retrieval
* chore: fix lint
* test(backend): fix grant id check
* test(backend): simplify logic, return 0 amount when able
* refactor(backend): token introspection middleware
- make 2nd introspection middleware for
new route instead of generalizing exisitng middleware
* test(backend): rm no longer needed test
* fix: rm unused import
* Update packages/backend/src/open_payments/auth/middleware.ts
Co-authored-by: Max Kurapov <max@interledger.org>
* fix: return 403 for non create grant for spent amounts
used to return null spent amounts
* fix: add logs, use luxon interval method
* fix: scope of else block
* Update packages/backend/src/open_payments/auth/middleware.ts
Co-authored-by: Max Kurapov <max@interledger.org>
* chore: fix name
* feat: test for new middleware/shared fn
* chore: make action required
---------
Co-authored-by: Max Kurapov <max@interledger.org>
* fix: import
* chore: fix typo in bruno folder
* fix: calculate legacy path in get spent amounts
* refactor: simplifiy get grant spent amounts logic
* fix: migrate legacy payments
* fix: use trx
* test(backend): ensure middleware next is called
* fix(backend): fix potential precision loss
* feat: add metric to unexpected state (that doesnt error)
* ci: debug
* ci: revert debug
---------
Co-authored-by: Max Kurapov <max@interledger.org>1 parent 9ab21d3 commit b6e43a1
24 files changed
Lines changed: 5125 additions & 225 deletions
File tree
- bruno/collections/Rafiki
- Examples/Vailidating Wallet Address Ownership with Open Payments
- Open Payments APIs/Outgoing Payment Grant
- packages
- auth/src/access
- backend
- migrations
- src
- open_payments
- auth
- payment/outgoing
- payment-method
- handler
- ilp
- local
- token-introspection/src/openapi/specs
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
296 | 296 | | |
297 | 297 | | |
298 | 298 | | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
299 | 320 | | |
300 | 321 | | |
301 | 322 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
60 | 61 | | |
61 | 62 | | |
62 | 63 | | |
| |||
Lines changed: 41 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
Lines changed: 19 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| |||
134 | 135 | | |
135 | 136 | | |
136 | 137 | | |
137 | | - | |
138 | | - | |
| 138 | + | |
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
144 | 148 | | |
145 | 149 | | |
146 | 150 | | |
| |||
715 | 719 | | |
716 | 720 | | |
717 | 721 | | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
718 | 732 | | |
719 | 733 | | |
720 | 734 | | |
| |||
0 commit comments