Merge branch 'master' into http-upgrade
This commit is contained in:
commit
8759625581
6 changed files with 6752 additions and 6728 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -22,6 +22,7 @@ app.nprofile
|
||||||
admin.connect
|
admin.connect
|
||||||
debug.txt
|
debug.txt
|
||||||
proto/autogenerated/debug.txt
|
proto/autogenerated/debug.txt
|
||||||
|
.specstory
|
||||||
metrics_cache/
|
metrics_cache/
|
||||||
metric_cache/
|
metric_cache/
|
||||||
metrics_events/
|
metrics_events/
|
||||||
|
|
|
||||||
17
package-lock.json
generated
17
package-lock.json
generated
|
|
@ -56,7 +56,7 @@
|
||||||
"@types/chai-string": "^1.4.5",
|
"@types/chai-string": "^1.4.5",
|
||||||
"@types/cors": "^2.8.17",
|
"@types/cors": "^2.8.17",
|
||||||
"@types/eccrypto": "^1.1.6",
|
"@types/eccrypto": "^1.1.6",
|
||||||
"@types/jsonwebtoken": "^9.0.6",
|
"@types/jsonwebtoken": "^9.0.9",
|
||||||
"@types/lodash": "^4.14.182",
|
"@types/lodash": "^4.14.182",
|
||||||
"@types/node": "^16.11.10",
|
"@types/node": "^16.11.10",
|
||||||
"@types/node-fetch": "^2.6.3",
|
"@types/node-fetch": "^2.6.3",
|
||||||
|
|
@ -745,11 +745,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/jsonwebtoken": {
|
"node_modules/@types/jsonwebtoken": {
|
||||||
"version": "9.0.6",
|
"version": "9.0.9",
|
||||||
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz",
|
||||||
"integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==",
|
"integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@types/ms": "*",
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -769,6 +771,13 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
|
||||||
"integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA=="
|
"integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA=="
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/ms": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "16.18.3",
|
"version": "16.18.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz",
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
"@types/chai-string": "^1.4.5",
|
"@types/chai-string": "^1.4.5",
|
||||||
"@types/cors": "^2.8.17",
|
"@types/cors": "^2.8.17",
|
||||||
"@types/eccrypto": "^1.1.6",
|
"@types/eccrypto": "^1.1.6",
|
||||||
"@types/jsonwebtoken": "^9.0.6",
|
"@types/jsonwebtoken": "^9.0.9",
|
||||||
"@types/lodash": "^4.14.182",
|
"@types/lodash": "^4.14.182",
|
||||||
"@types/node": "^16.11.10",
|
"@types/node": "^16.11.10",
|
||||||
"@types/node-fetch": "^2.6.3",
|
"@types/node-fetch": "^2.6.3",
|
||||||
|
|
|
||||||
|
|
@ -75,9 +75,8 @@ export default class {
|
||||||
this.applicationManager = new ApplicationManager(this.storage, this.settings, this.paymentManager)
|
this.applicationManager = new ApplicationManager(this.storage, this.settings, this.paymentManager)
|
||||||
this.appUserManager = new AppUserManager(this.storage, this.settings, this.applicationManager)
|
this.appUserManager = new AppUserManager(this.storage, this.settings, this.applicationManager)
|
||||||
this.debitManager = new DebitManager(this.storage, this.lnd, this.applicationManager)
|
this.debitManager = new DebitManager(this.storage, this.lnd, this.applicationManager)
|
||||||
this.offerManager = new OfferManager(this.storage, this.lnd, this.applicationManager, this.productManager)
|
this.offerManager = new OfferManager(this.storage, this.lnd, this.applicationManager, this.productManager, this.liquidityManager)
|
||||||
//this.webRTC = new webRTC(this.storage, this.utils)
|
//this.webRTC = new webRTC(this.storage, this.utils)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Stop() {
|
Stop() {
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import { UserOffer } from '../storage/entity/UserOffer.js';
|
||||||
import { DeepPartial } from 'typeorm';
|
import { DeepPartial } from 'typeorm';
|
||||||
import { nip19 } from 'nostr-tools';
|
import { nip19 } from 'nostr-tools';
|
||||||
import { LoadNosrtSettingsFromEnv } from '../nostr/index.js';
|
import { LoadNosrtSettingsFromEnv } from '../nostr/index.js';
|
||||||
|
import { LiquidityManager } from "./liquidityManager.js"
|
||||||
|
|
||||||
const mapToOfferConfig = (appUserId: string, offer: UserOffer, { pubkey, relay }: { pubkey: string, relay: string }): Types.OfferConfig => {
|
const mapToOfferConfig = (appUserId: string, offer: UserOffer, { pubkey, relay }: { pubkey: string, relay: string }): Types.OfferConfig => {
|
||||||
if (offer.expected_data) {
|
if (offer.expected_data) {
|
||||||
|
|
@ -50,12 +51,14 @@ export class OfferManager {
|
||||||
productManager: ProductManager
|
productManager: ProductManager
|
||||||
storage: Storage
|
storage: Storage
|
||||||
lnd: LND
|
lnd: LND
|
||||||
|
liquidityManager: LiquidityManager
|
||||||
logger = getLogger({ component: 'DebitManager' })
|
logger = getLogger({ component: 'DebitManager' })
|
||||||
constructor(storage: Storage, lnd: LND, applicationManager: ApplicationManager, productManager: ProductManager) {
|
constructor(storage: Storage, lnd: LND, applicationManager: ApplicationManager, productManager: ProductManager, liquidityManager: LiquidityManager) {
|
||||||
this.storage = storage
|
this.storage = storage
|
||||||
this.lnd = lnd
|
this.lnd = lnd
|
||||||
this.applicationManager = applicationManager
|
this.applicationManager = applicationManager
|
||||||
this.productManager = productManager
|
this.productManager = productManager
|
||||||
|
this.liquidityManager = liquidityManager
|
||||||
}
|
}
|
||||||
|
|
||||||
attachNostrSend = (nostrSend: NostrSend) => {
|
attachNostrSend = (nostrSend: NostrSend) => {
|
||||||
|
|
@ -219,14 +222,18 @@ export class OfferManager {
|
||||||
async getNofferInvoice(offerReq: NofferData, appId: string): Promise<{ success: true, invoice: string } | { success: false, code: number, max: number }> {
|
async getNofferInvoice(offerReq: NofferData, appId: string): Promise<{ success: true, invoice: string } | { success: false, code: number, max: number }> {
|
||||||
try {
|
try {
|
||||||
const { remote } = await this.lnd.ChannelBalance()
|
const { remote } = await this.lnd.ChannelBalance()
|
||||||
|
let maxSendable = remote
|
||||||
|
if (remote === 0 && (await this.liquidityManager.liquidityProvider.IsReady())) {
|
||||||
|
maxSendable = 10_000_000
|
||||||
|
}
|
||||||
const split = offerReq.offer.split(':')
|
const split = offerReq.offer.split(':')
|
||||||
if (split.length === 1) {
|
if (split.length === 1) {
|
||||||
return this.HandleUserOffer(offerReq, appId, remote)
|
return this.HandleUserOffer(offerReq, appId, maxSendable)
|
||||||
} else if (split[0] === 'p') {
|
} else if (split[0] === 'p') {
|
||||||
const product = await this.productManager.NewProductInvoice(split[1])
|
const product = await this.productManager.NewProductInvoice(split[1])
|
||||||
return { success: true, invoice: product.invoice }
|
return { success: true, invoice: product.invoice }
|
||||||
} else {
|
} else {
|
||||||
return { success: false, code: 1, max: remote }
|
return { success: false, code: 1, max: maxSendable }
|
||||||
}
|
}
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
getLogger({ component: "noffer" })(ERROR, e.message || e)
|
getLogger({ component: "noffer" })(ERROR, e.message || e)
|
||||||
|
|
|
||||||
|
|
@ -497,10 +497,14 @@ export default class {
|
||||||
const payK1 = await this.storage.paymentStorage.AddUserEphemeralKey(userId, 'pay', linkedApplication)
|
const payK1 = await this.storage.paymentStorage.AddUserEphemeralKey(userId, 'pay', linkedApplication)
|
||||||
const url = baseUrl ? baseUrl : `${this.settings.serviceUrl}/api/guest/lnurl_pay/handle`
|
const url = baseUrl ? baseUrl : `${this.settings.serviceUrl}/api/guest/lnurl_pay/handle`
|
||||||
const { remote } = await this.lnd.ChannelBalance()
|
const { remote } = await this.lnd.ChannelBalance()
|
||||||
|
let maxSendable = remote * 1000
|
||||||
|
if (remote === 0 && (await this.liquidityManager.liquidityProvider.IsReady())) {
|
||||||
|
maxSendable = 10_000_000 * 1000
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
tag: 'payRequest',
|
tag: 'payRequest',
|
||||||
callback: `${url}?k1=${payK1.key}`,
|
callback: `${url}?k1=${payK1.key}`,
|
||||||
maxSendable: remote * 1000,
|
maxSendable: maxSendable,
|
||||||
minSendable: 10000,
|
minSendable: 10000,
|
||||||
metadata: metadata ? metadata : defaultLnurlPayMetadata(this.settings.lnurlMetaText),
|
metadata: metadata ? metadata : defaultLnurlPayMetadata(this.settings.lnurlMetaText),
|
||||||
allowsNostr: !!linkedApplication.nostr_public_key,
|
allowsNostr: !!linkedApplication.nostr_public_key,
|
||||||
|
|
@ -517,10 +521,14 @@ export default class {
|
||||||
throw new Error("invalid lnurl request")
|
throw new Error("invalid lnurl request")
|
||||||
}
|
}
|
||||||
const { remote } = await this.lnd.ChannelBalance()
|
const { remote } = await this.lnd.ChannelBalance()
|
||||||
|
let maxSendable = remote * 1000
|
||||||
|
if (remote === 0 && (await this.liquidityManager.liquidityProvider.IsReady())) {
|
||||||
|
maxSendable = 10_000_000 * 1000
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
tag: 'payRequest',
|
tag: 'payRequest',
|
||||||
callback: `${this.settings.serviceUrl}/api/guest/lnurl_pay/handle?k1=${payInfoK1}`,
|
callback: `${this.settings.serviceUrl}/api/guest/lnurl_pay/handle?k1=${payInfoK1}`,
|
||||||
maxSendable: remote * 1000,
|
maxSendable: maxSendable,
|
||||||
minSendable: 10000,
|
minSendable: 10000,
|
||||||
metadata: defaultLnurlPayMetadata(this.settings.lnurlMetaText),
|
metadata: defaultLnurlPayMetadata(this.settings.lnurlMetaText),
|
||||||
allowsNostr: !!key.linkedApplication.nostr_public_key,
|
allowsNostr: !!key.linkedApplication.nostr_public_key,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue