updates
This commit is contained in:
parent
96b619c886
commit
4fd8c0d71d
31 changed files with 2734 additions and 2004 deletions
|
|
@ -5,7 +5,7 @@
|
|||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": " tsc && node build/src/testRunner.js",
|
||||
"start": "tsc && cd build && node src/index.js",
|
||||
"start": "tsc && node build/src/index.js",
|
||||
"build_autogenerated": "cd proto && rimraf autogenerated && protoc -I ./service --pub_out=. service/*",
|
||||
"build_lnd_client_1": "cd proto && protoc -I ./others --plugin=.\\node_modules\\.bin\\protoc-gen-ts_proto.cmd --ts_proto_out=./lnd --ts_proto_opt=esModuleInterop=true others/* ",
|
||||
"build_lnd_client": "cd proto && rimraf lnd/* && npx protoc --ts_out ./lnd --ts_opt long_type_string --proto_path others others/* ",
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -94,6 +94,31 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => {
|
|||
res.json({status: 'OK', ...response})
|
||||
} catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger); if (opts.throwErrors) throw e }
|
||||
})
|
||||
if (!opts.allowNotImplementedMethods && !methods.GetUserInfo) throw new Error('method: GetUserInfo is not implemented')
|
||||
app.post('/api/user/info', async (req, res) => {
|
||||
try {
|
||||
if (!methods.GetUserInfo) throw new Error('method: GetUserInfo is not implemented')
|
||||
const authContext = await opts.UserAuthGuard(req.headers['authorization'])
|
||||
const query = req.query
|
||||
const params = req.params
|
||||
const response = await methods.GetUserInfo({ ...authContext, ...query, ...params })
|
||||
res.json({status: 'OK', ...response})
|
||||
} catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger); if (opts.throwErrors) throw e }
|
||||
})
|
||||
if (!opts.allowNotImplementedMethods && !methods.GetUserOperations) throw new Error('method: GetUserOperations is not implemented')
|
||||
app.post('/api/user/operations', async (req, res) => {
|
||||
try {
|
||||
if (!methods.GetUserOperations) throw new Error('method: GetUserOperations is not implemented')
|
||||
const authContext = await opts.UserAuthGuard(req.headers['authorization'])
|
||||
const request = req.body
|
||||
const error = Types.GetUserOperationsRequestValidate(request)
|
||||
if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger)
|
||||
const query = req.query
|
||||
const params = req.params
|
||||
const response = await methods.GetUserOperations({ ...authContext, ...query, ...params }, request)
|
||||
res.json({status: 'OK', ...response})
|
||||
} catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger); if (opts.throwErrors) throw e }
|
||||
})
|
||||
if (!opts.allowNotImplementedMethods && !methods.NewAddress) throw new Error('method: NewAddress is not implemented')
|
||||
app.post('/api/user/chain/new', async (req, res) => {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -78,6 +78,34 @@ export default (params: ClientParams) => ({
|
|||
}
|
||||
return { status: 'ERROR', reason: 'invalid response' }
|
||||
},
|
||||
GetUserInfo: async (): Promise<ResultError | ({ status: 'OK' }& Types.UserInfo)> => {
|
||||
const auth = await params.retrieveUserAuth()
|
||||
if (auth === null) throw new Error('retrieveUserAuth() returned null')
|
||||
let finalRoute = '/api/user/info'
|
||||
const { data } = await axios.post(params.baseUrl + finalRoute, {}, { headers: { 'authorization': auth } })
|
||||
if (data.status === 'ERROR' && typeof data.reason === 'string') return data
|
||||
if (data.status === 'OK') {
|
||||
const result = data
|
||||
if(!params.checkResult) return { status: 'OK', ...result }
|
||||
const error = Types.UserInfoValidate(result)
|
||||
if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message }
|
||||
}
|
||||
return { status: 'ERROR', reason: 'invalid response' }
|
||||
},
|
||||
GetUserOperations: async (request: Types.GetUserOperationsRequest): Promise<ResultError | ({ status: 'OK' }& Types.GetUserOperationsResponse)> => {
|
||||
const auth = await params.retrieveUserAuth()
|
||||
if (auth === null) throw new Error('retrieveUserAuth() returned null')
|
||||
let finalRoute = '/api/user/operations'
|
||||
const { data } = await axios.post(params.baseUrl + finalRoute, request, { headers: { 'authorization': auth } })
|
||||
if (data.status === 'ERROR' && typeof data.reason === 'string') return data
|
||||
if (data.status === 'OK') {
|
||||
const result = data
|
||||
if(!params.checkResult) return { status: 'OK', ...result }
|
||||
const error = Types.GetUserOperationsResponseValidate(result)
|
||||
if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message }
|
||||
}
|
||||
return { status: 'ERROR', reason: 'invalid response' }
|
||||
},
|
||||
NewAddress: async (request: Types.NewAddressRequest): Promise<ResultError | ({ status: 'OK' }& Types.NewAddressResponse)> => {
|
||||
const auth = await params.retrieveUserAuth()
|
||||
if (auth === null) throw new Error('retrieveUserAuth() returned null')
|
||||
|
|
|
|||
|
|
@ -9,6 +9,35 @@ export type NostrClientParams = {
|
|||
checkResult?: true
|
||||
}
|
||||
export default (params: NostrClientParams, send: (to:string, message: NostrRequest) => Promise<any>) => ({
|
||||
GetUserInfo: async (): Promise<ResultError | ({ status: 'OK' }& Types.UserInfo)> => {
|
||||
const auth = await params.retrieveNostrUserAuth()
|
||||
if (auth === null) throw new Error('retrieveNostrUserAuth() returned null')
|
||||
const nostrRequest: NostrRequest = {}
|
||||
const data = await send(params.pubDestination, {rpcName:'GetUserInfo',authIdentifier:auth, ...nostrRequest })
|
||||
if (data.status === 'ERROR' && typeof data.reason === 'string') return data
|
||||
if (data.status === 'OK') {
|
||||
const result = data
|
||||
if(!params.checkResult) return { status: 'OK', ...result }
|
||||
const error = Types.UserInfoValidate(result)
|
||||
if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message }
|
||||
}
|
||||
return { status: 'ERROR', reason: 'invalid response' }
|
||||
},
|
||||
GetUserOperations: async (request: Types.GetUserOperationsRequest): Promise<ResultError | ({ status: 'OK' }& Types.GetUserOperationsResponse)> => {
|
||||
const auth = await params.retrieveNostrUserAuth()
|
||||
if (auth === null) throw new Error('retrieveNostrUserAuth() returned null')
|
||||
const nostrRequest: NostrRequest = {}
|
||||
nostrRequest.body = request
|
||||
const data = await send(params.pubDestination, {rpcName:'GetUserOperations',authIdentifier:auth, ...nostrRequest })
|
||||
if (data.status === 'ERROR' && typeof data.reason === 'string') return data
|
||||
if (data.status === 'OK') {
|
||||
const result = data
|
||||
if(!params.checkResult) return { status: 'OK', ...result }
|
||||
const error = Types.GetUserOperationsResponseValidate(result)
|
||||
if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message }
|
||||
}
|
||||
return { status: 'ERROR', reason: 'invalid response' }
|
||||
},
|
||||
NewAddress: async (request: Types.NewAddressRequest): Promise<ResultError | ({ status: 'OK' }& Types.NewAddressResponse)> => {
|
||||
const auth = await params.retrieveNostrUserAuth()
|
||||
if (auth === null) throw new Error('retrieveNostrUserAuth() returned null')
|
||||
|
|
|
|||
|
|
@ -21,6 +21,29 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => {
|
|||
const logger = opts.logger || { log: console.log, error: console.error }
|
||||
return async (req: NostrRequest, res: NostrResponse) => {
|
||||
switch (req.rpcName) {
|
||||
case 'GetUserInfo':
|
||||
try {
|
||||
if (!methods.GetUserInfo) throw new Error('method: GetUserInfo is not implemented')
|
||||
const authContext = await opts.NostrUserAuthGuard(req.authIdentifier)
|
||||
const query = req.query
|
||||
const params = req.params
|
||||
const response = await methods.GetUserInfo({ ...authContext, ...query, ...params })
|
||||
res({status: 'OK', ...response})
|
||||
}catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger); if (opts.throwErrors) throw e }
|
||||
break
|
||||
case 'GetUserOperations':
|
||||
try {
|
||||
if (!methods.GetUserOperations) throw new Error('method: GetUserOperations is not implemented')
|
||||
const authContext = await opts.NostrUserAuthGuard(req.authIdentifier)
|
||||
const request = req.body
|
||||
const error = Types.GetUserOperationsRequestValidate(request)
|
||||
if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger)
|
||||
const query = req.query
|
||||
const params = req.params
|
||||
const response = await methods.GetUserOperations({ ...authContext, ...query, ...params }, request)
|
||||
res({status: 'OK', ...response})
|
||||
}catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger); if (opts.throwErrors) throw e }
|
||||
break
|
||||
case 'NewAddress':
|
||||
try {
|
||||
if (!methods.NewAddress) throw new Error('method: NewAddress is not implemented')
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,4 +1,4 @@
|
|||
// @generated by protobuf-ts 2.8.1 with parameter long_type_number
|
||||
// @generated by protobuf-ts 2.8.1
|
||||
// @generated from protobuf file "invoices.proto" (package "invoicesrpc", syntax proto3)
|
||||
// tslint:disable
|
||||
import type { RpcTransport } from "@protobuf-ts/runtime-rpc";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// @generated by protobuf-ts 2.8.1 with parameter long_type_number
|
||||
// @generated by protobuf-ts 2.8.1
|
||||
// @generated from protobuf file "invoices.proto" (package "invoicesrpc", syntax proto3)
|
||||
// tslint:disable
|
||||
import { Invoice } from "./lightning.js";
|
||||
|
|
@ -59,7 +59,7 @@ export interface AddHoldInvoiceRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 value = 3;
|
||||
*/
|
||||
value: number;
|
||||
value: bigint;
|
||||
/**
|
||||
*
|
||||
* The value of this invoice in millisatoshis
|
||||
|
|
@ -68,7 +68,7 @@ export interface AddHoldInvoiceRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 value_msat = 10;
|
||||
*/
|
||||
valueMsat: number;
|
||||
valueMsat: bigint;
|
||||
/**
|
||||
*
|
||||
* Hash (SHA-256) of a description of the payment. Used if the description of
|
||||
|
|
@ -83,7 +83,7 @@ export interface AddHoldInvoiceRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 expiry = 5;
|
||||
*/
|
||||
expiry: number;
|
||||
expiry: bigint;
|
||||
/**
|
||||
* Fallback on-chain address.
|
||||
*
|
||||
|
|
@ -95,7 +95,7 @@ export interface AddHoldInvoiceRequest {
|
|||
*
|
||||
* @generated from protobuf field: uint64 cltv_expiry = 7;
|
||||
*/
|
||||
cltvExpiry: number;
|
||||
cltvExpiry: bigint;
|
||||
/**
|
||||
*
|
||||
* Route hints that can each be individually used to assist in reaching the
|
||||
|
|
@ -133,7 +133,7 @@ export interface AddHoldInvoiceResp {
|
|||
*
|
||||
* @generated from protobuf field: uint64 add_index = 2;
|
||||
*/
|
||||
addIndex: number;
|
||||
addIndex: bigint;
|
||||
/**
|
||||
*
|
||||
* The payment address of the generated invoice. This value should be used
|
||||
|
|
@ -316,18 +316,18 @@ class AddHoldInvoiceRequest$Type extends MessageType<AddHoldInvoiceRequest> {
|
|||
super("invoicesrpc.AddHoldInvoiceRequest", [
|
||||
{ no: 1, name: "memo", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 2, name: "hash", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 3, name: "value", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 10, name: "value_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 3, name: "value", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 10, name: "value_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 4, name: "description_hash", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 5, name: "expiry", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 5, name: "expiry", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 6, name: "fallback_addr", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 7, name: "cltv_expiry", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 7, name: "cltv_expiry", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 8, name: "route_hints", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => RouteHint },
|
||||
{ no: 9, name: "private", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<AddHoldInvoiceRequest>): AddHoldInvoiceRequest {
|
||||
const message = { memo: "", hash: new Uint8Array(0), value: 0, valueMsat: 0, descriptionHash: new Uint8Array(0), expiry: 0, fallbackAddr: "", cltvExpiry: 0, routeHints: [], private: false };
|
||||
const message = { memo: "", hash: new Uint8Array(0), value: 0n, valueMsat: 0n, descriptionHash: new Uint8Array(0), expiry: 0n, fallbackAddr: "", cltvExpiry: 0n, routeHints: [], private: false };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<AddHoldInvoiceRequest>(this, message, value);
|
||||
|
|
@ -345,22 +345,22 @@ class AddHoldInvoiceRequest$Type extends MessageType<AddHoldInvoiceRequest> {
|
|||
message.hash = reader.bytes();
|
||||
break;
|
||||
case /* int64 value */ 3:
|
||||
message.value = reader.int64().toNumber();
|
||||
message.value = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 value_msat */ 10:
|
||||
message.valueMsat = reader.int64().toNumber();
|
||||
message.valueMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* bytes description_hash */ 4:
|
||||
message.descriptionHash = reader.bytes();
|
||||
break;
|
||||
case /* int64 expiry */ 5:
|
||||
message.expiry = reader.int64().toNumber();
|
||||
message.expiry = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* string fallback_addr */ 6:
|
||||
message.fallbackAddr = reader.string();
|
||||
break;
|
||||
case /* uint64 cltv_expiry */ 7:
|
||||
message.cltvExpiry = reader.uint64().toNumber();
|
||||
message.cltvExpiry = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* repeated lnrpc.RouteHint route_hints */ 8:
|
||||
message.routeHints.push(RouteHint.internalBinaryRead(reader, reader.uint32(), options));
|
||||
|
|
@ -387,22 +387,22 @@ class AddHoldInvoiceRequest$Type extends MessageType<AddHoldInvoiceRequest> {
|
|||
if (message.hash.length)
|
||||
writer.tag(2, WireType.LengthDelimited).bytes(message.hash);
|
||||
/* int64 value = 3; */
|
||||
if (message.value !== 0)
|
||||
if (message.value !== 0n)
|
||||
writer.tag(3, WireType.Varint).int64(message.value);
|
||||
/* int64 value_msat = 10; */
|
||||
if (message.valueMsat !== 0)
|
||||
if (message.valueMsat !== 0n)
|
||||
writer.tag(10, WireType.Varint).int64(message.valueMsat);
|
||||
/* bytes description_hash = 4; */
|
||||
if (message.descriptionHash.length)
|
||||
writer.tag(4, WireType.LengthDelimited).bytes(message.descriptionHash);
|
||||
/* int64 expiry = 5; */
|
||||
if (message.expiry !== 0)
|
||||
if (message.expiry !== 0n)
|
||||
writer.tag(5, WireType.Varint).int64(message.expiry);
|
||||
/* string fallback_addr = 6; */
|
||||
if (message.fallbackAddr !== "")
|
||||
writer.tag(6, WireType.LengthDelimited).string(message.fallbackAddr);
|
||||
/* uint64 cltv_expiry = 7; */
|
||||
if (message.cltvExpiry !== 0)
|
||||
if (message.cltvExpiry !== 0n)
|
||||
writer.tag(7, WireType.Varint).uint64(message.cltvExpiry);
|
||||
/* repeated lnrpc.RouteHint route_hints = 8; */
|
||||
for (let i = 0; i < message.routeHints.length; i++)
|
||||
|
|
@ -425,12 +425,12 @@ class AddHoldInvoiceResp$Type extends MessageType<AddHoldInvoiceResp> {
|
|||
constructor() {
|
||||
super("invoicesrpc.AddHoldInvoiceResp", [
|
||||
{ no: 1, name: "payment_request", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 2, name: "add_index", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 2, name: "add_index", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 3, name: "payment_addr", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<AddHoldInvoiceResp>): AddHoldInvoiceResp {
|
||||
const message = { paymentRequest: "", addIndex: 0, paymentAddr: new Uint8Array(0) };
|
||||
const message = { paymentRequest: "", addIndex: 0n, paymentAddr: new Uint8Array(0) };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<AddHoldInvoiceResp>(this, message, value);
|
||||
|
|
@ -445,7 +445,7 @@ class AddHoldInvoiceResp$Type extends MessageType<AddHoldInvoiceResp> {
|
|||
message.paymentRequest = reader.string();
|
||||
break;
|
||||
case /* uint64 add_index */ 2:
|
||||
message.addIndex = reader.uint64().toNumber();
|
||||
message.addIndex = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* bytes payment_addr */ 3:
|
||||
message.paymentAddr = reader.bytes();
|
||||
|
|
@ -466,7 +466,7 @@ class AddHoldInvoiceResp$Type extends MessageType<AddHoldInvoiceResp> {
|
|||
if (message.paymentRequest !== "")
|
||||
writer.tag(1, WireType.LengthDelimited).string(message.paymentRequest);
|
||||
/* uint64 add_index = 2; */
|
||||
if (message.addIndex !== 0)
|
||||
if (message.addIndex !== 0n)
|
||||
writer.tag(2, WireType.Varint).uint64(message.addIndex);
|
||||
/* bytes payment_addr = 3; */
|
||||
if (message.paymentAddr.length)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// @generated by protobuf-ts 2.8.1 with parameter long_type_number
|
||||
// @generated by protobuf-ts 2.8.1
|
||||
// @generated from protobuf file "lightning.proto" (package "lnrpc", syntax proto3)
|
||||
// tslint:disable
|
||||
import type { RpcTransport } from "@protobuf-ts/runtime-rpc";
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,4 +1,4 @@
|
|||
// @generated by protobuf-ts 2.8.1 with parameter long_type_number
|
||||
// @generated by protobuf-ts 2.8.1
|
||||
// @generated from protobuf file "router.proto" (package "routerrpc", syntax proto3)
|
||||
// tslint:disable
|
||||
import type { RpcTransport } from "@protobuf-ts/runtime-rpc";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// @generated by protobuf-ts 2.8.1 with parameter long_type_number
|
||||
// @generated by protobuf-ts 2.8.1
|
||||
// @generated from protobuf file "router.proto" (package "routerrpc", syntax proto3)
|
||||
// tslint:disable
|
||||
import { Payment } from "./lightning.js";
|
||||
|
|
@ -38,7 +38,7 @@ export interface SendPaymentRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 amt = 2;
|
||||
*/
|
||||
amt: number;
|
||||
amt: bigint;
|
||||
/**
|
||||
*
|
||||
* Number of millisatoshis to send.
|
||||
|
|
@ -47,7 +47,7 @@ export interface SendPaymentRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 amt_msat = 12;
|
||||
*/
|
||||
amtMsat: number;
|
||||
amtMsat: bigint;
|
||||
/**
|
||||
* The hash to use within the payment's HTLC
|
||||
*
|
||||
|
|
@ -100,7 +100,7 @@ export interface SendPaymentRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 fee_limit_sat = 7;
|
||||
*/
|
||||
feeLimitSat: number;
|
||||
feeLimitSat: bigint;
|
||||
/**
|
||||
*
|
||||
* The maximum number of millisatoshis that will be paid as a fee of the
|
||||
|
|
@ -113,7 +113,7 @@ export interface SendPaymentRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 fee_limit_msat = 13;
|
||||
*/
|
||||
feeLimitMsat: number;
|
||||
feeLimitMsat: bigint;
|
||||
/**
|
||||
*
|
||||
* Deprecated, use outgoing_chan_ids. The channel id of the channel that must
|
||||
|
|
@ -131,7 +131,7 @@ export interface SendPaymentRequest {
|
|||
*
|
||||
* @generated from protobuf field: repeated uint64 outgoing_chan_ids = 19;
|
||||
*/
|
||||
outgoingChanIds: number[];
|
||||
outgoingChanIds: bigint[];
|
||||
/**
|
||||
*
|
||||
* The pubkey of the last hop of the route. If empty, any hop may be used.
|
||||
|
|
@ -210,7 +210,7 @@ export interface SendPaymentRequest {
|
|||
*
|
||||
* @generated from protobuf field: uint64 max_shard_size_msat = 21;
|
||||
*/
|
||||
maxShardSizeMsat: number;
|
||||
maxShardSizeMsat: bigint;
|
||||
/**
|
||||
*
|
||||
* If set, an AMP-payment will be attempted.
|
||||
|
|
@ -276,7 +276,7 @@ export interface RouteFeeRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 amt_sat = 2;
|
||||
*/
|
||||
amtSat: number;
|
||||
amtSat: bigint;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message routerrpc.RouteFeeResponse
|
||||
|
|
@ -289,7 +289,7 @@ export interface RouteFeeResponse {
|
|||
*
|
||||
* @generated from protobuf field: int64 routing_fee_msat = 1;
|
||||
*/
|
||||
routingFeeMsat: number;
|
||||
routingFeeMsat: bigint;
|
||||
/**
|
||||
*
|
||||
* An estimate of the worst case time delay that can occur. Note that callers
|
||||
|
|
@ -298,7 +298,7 @@ export interface RouteFeeResponse {
|
|||
*
|
||||
* @generated from protobuf field: int64 time_lock_delay = 2;
|
||||
*/
|
||||
timeLockDelay: number;
|
||||
timeLockDelay: bigint;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message routerrpc.SendToRouteRequest
|
||||
|
|
@ -428,7 +428,7 @@ export interface PairData {
|
|||
*
|
||||
* @generated from protobuf field: int64 fail_time = 1;
|
||||
*/
|
||||
failTime: number;
|
||||
failTime: bigint;
|
||||
/**
|
||||
*
|
||||
* Lowest amount that failed to forward rounded to whole sats. This may be
|
||||
|
|
@ -436,7 +436,7 @@ export interface PairData {
|
|||
*
|
||||
* @generated from protobuf field: int64 fail_amt_sat = 2;
|
||||
*/
|
||||
failAmtSat: number;
|
||||
failAmtSat: bigint;
|
||||
/**
|
||||
*
|
||||
* Lowest amount that failed to forward in millisats. This may be
|
||||
|
|
@ -444,25 +444,25 @@ export interface PairData {
|
|||
*
|
||||
* @generated from protobuf field: int64 fail_amt_msat = 4;
|
||||
*/
|
||||
failAmtMsat: number;
|
||||
failAmtMsat: bigint;
|
||||
/**
|
||||
* Time of last success.
|
||||
*
|
||||
* @generated from protobuf field: int64 success_time = 5;
|
||||
*/
|
||||
successTime: number;
|
||||
successTime: bigint;
|
||||
/**
|
||||
* Highest amount that we could successfully forward rounded to whole sats.
|
||||
*
|
||||
* @generated from protobuf field: int64 success_amt_sat = 6;
|
||||
*/
|
||||
successAmtSat: number;
|
||||
successAmtSat: bigint;
|
||||
/**
|
||||
* Highest amount that we could successfully forward in millisats.
|
||||
*
|
||||
* @generated from protobuf field: int64 success_amt_msat = 7;
|
||||
*/
|
||||
successAmtMsat: number;
|
||||
successAmtMsat: bigint;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message routerrpc.GetMissionControlConfigRequest
|
||||
|
|
@ -513,7 +513,7 @@ export interface MissionControlConfig {
|
|||
*
|
||||
* @generated from protobuf field: uint64 half_life_seconds = 1;
|
||||
*/
|
||||
halfLifeSeconds: number;
|
||||
halfLifeSeconds: bigint;
|
||||
/**
|
||||
*
|
||||
* The probability of success mission control should assign to hop in a route
|
||||
|
|
@ -550,7 +550,7 @@ export interface MissionControlConfig {
|
|||
*
|
||||
* @generated from protobuf field: uint64 minimum_failure_relax_interval = 5;
|
||||
*/
|
||||
minimumFailureRelaxInterval: number;
|
||||
minimumFailureRelaxInterval: bigint;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message routerrpc.QueryProbabilityRequest
|
||||
|
|
@ -573,7 +573,7 @@ export interface QueryProbabilityRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 amt_msat = 3;
|
||||
*/
|
||||
amtMsat: number;
|
||||
amtMsat: bigint;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message routerrpc.QueryProbabilityResponse
|
||||
|
|
@ -603,7 +603,7 @@ export interface BuildRouteRequest {
|
|||
*
|
||||
* @generated from protobuf field: int64 amt_msat = 1;
|
||||
*/
|
||||
amtMsat: number;
|
||||
amtMsat: bigint;
|
||||
/**
|
||||
*
|
||||
* CLTV delta from the current height that should be used for the timelock
|
||||
|
|
@ -671,7 +671,7 @@ export interface HtlcEvent {
|
|||
*
|
||||
* @generated from protobuf field: uint64 incoming_channel_id = 1;
|
||||
*/
|
||||
incomingChannelId: number;
|
||||
incomingChannelId: bigint;
|
||||
/**
|
||||
*
|
||||
* The short channel id that the outgoing htlc left our node on. This value
|
||||
|
|
@ -679,7 +679,7 @@ export interface HtlcEvent {
|
|||
*
|
||||
* @generated from protobuf field: uint64 outgoing_channel_id = 2;
|
||||
*/
|
||||
outgoingChannelId: number;
|
||||
outgoingChannelId: bigint;
|
||||
/**
|
||||
*
|
||||
* Incoming id is the index of the incoming htlc in the incoming channel.
|
||||
|
|
@ -687,7 +687,7 @@ export interface HtlcEvent {
|
|||
*
|
||||
* @generated from protobuf field: uint64 incoming_htlc_id = 3;
|
||||
*/
|
||||
incomingHtlcId: number;
|
||||
incomingHtlcId: bigint;
|
||||
/**
|
||||
*
|
||||
* Outgoing id is the index of the outgoing htlc in the outgoing channel.
|
||||
|
|
@ -695,14 +695,14 @@ export interface HtlcEvent {
|
|||
*
|
||||
* @generated from protobuf field: uint64 outgoing_htlc_id = 4;
|
||||
*/
|
||||
outgoingHtlcId: number;
|
||||
outgoingHtlcId: bigint;
|
||||
/**
|
||||
*
|
||||
* The time in unix nanoseconds that the event occurred.
|
||||
*
|
||||
* @generated from protobuf field: uint64 timestamp_ns = 5;
|
||||
*/
|
||||
timestampNs: number;
|
||||
timestampNs: bigint;
|
||||
/**
|
||||
*
|
||||
* The event type indicates whether the htlc was part of a send, receive or
|
||||
|
|
@ -796,13 +796,13 @@ export interface HtlcInfo {
|
|||
*
|
||||
* @generated from protobuf field: uint64 incoming_amt_msat = 3;
|
||||
*/
|
||||
incomingAmtMsat: number;
|
||||
incomingAmtMsat: bigint;
|
||||
/**
|
||||
* The amount of the outgoing htlc.
|
||||
*
|
||||
* @generated from protobuf field: uint64 outgoing_amt_msat = 4;
|
||||
*/
|
||||
outgoingAmtMsat: number;
|
||||
outgoingAmtMsat: bigint;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message routerrpc.ForwardEvent
|
||||
|
|
@ -915,13 +915,13 @@ export interface CircuitKey {
|
|||
*
|
||||
* @generated from protobuf field: uint64 chan_id = 1;
|
||||
*/
|
||||
chanId: number;
|
||||
chanId: bigint;
|
||||
/**
|
||||
* / The index of the incoming htlc in the incoming channel.
|
||||
*
|
||||
* @generated from protobuf field: uint64 htlc_id = 2;
|
||||
*/
|
||||
htlcId: number;
|
||||
htlcId: bigint;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message routerrpc.ForwardHtlcInterceptRequest
|
||||
|
|
@ -940,7 +940,7 @@ export interface ForwardHtlcInterceptRequest {
|
|||
*
|
||||
* @generated from protobuf field: uint64 incoming_amount_msat = 5;
|
||||
*/
|
||||
incomingAmountMsat: number;
|
||||
incomingAmountMsat: bigint;
|
||||
/**
|
||||
* The incoming htlc expiry.
|
||||
*
|
||||
|
|
@ -963,13 +963,13 @@ export interface ForwardHtlcInterceptRequest {
|
|||
*
|
||||
* @generated from protobuf field: uint64 outgoing_requested_chan_id = 7;
|
||||
*/
|
||||
outgoingRequestedChanId: number;
|
||||
outgoingRequestedChanId: bigint;
|
||||
/**
|
||||
* The outgoing htlc amount.
|
||||
*
|
||||
* @generated from protobuf field: uint64 outgoing_amount_msat = 3;
|
||||
*/
|
||||
outgoingAmountMsat: number;
|
||||
outgoingAmountMsat: bigint;
|
||||
/**
|
||||
* The outgoing htlc expiry.
|
||||
*
|
||||
|
|
@ -1261,17 +1261,17 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
constructor() {
|
||||
super("routerrpc.SendPaymentRequest", [
|
||||
{ no: 1, name: "dest", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 2, name: "amt", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 12, name: "amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 2, name: "amt", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 12, name: "amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 3, name: "payment_hash", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 4, name: "final_cltv_delta", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
|
||||
{ no: 20, name: "payment_addr", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 5, name: "payment_request", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 6, name: "timeout_seconds", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
|
||||
{ no: 7, name: "fee_limit_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 13, name: "fee_limit_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 7, name: "fee_limit_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 13, name: "fee_limit_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 8, name: "outgoing_chan_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/ },
|
||||
{ no: 19, name: "outgoing_chan_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 19, name: "outgoing_chan_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 14, name: "last_hop_pubkey", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 9, name: "cltv_limit", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
|
||||
{ no: 10, name: "route_hints", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => RouteHint },
|
||||
|
|
@ -1280,13 +1280,13 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
{ no: 16, name: "dest_features", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["lnrpc.FeatureBit", FeatureBit] },
|
||||
{ no: 17, name: "max_parts", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
|
||||
{ no: 18, name: "no_inflight_updates", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
||||
{ no: 21, name: "max_shard_size_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 21, name: "max_shard_size_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 22, name: "amp", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
||||
{ no: 23, name: "time_pref", kind: "scalar", T: 1 /*ScalarType.DOUBLE*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<SendPaymentRequest>): SendPaymentRequest {
|
||||
const message = { dest: new Uint8Array(0), amt: 0, amtMsat: 0, paymentHash: new Uint8Array(0), finalCltvDelta: 0, paymentAddr: new Uint8Array(0), paymentRequest: "", timeoutSeconds: 0, feeLimitSat: 0, feeLimitMsat: 0, outgoingChanId: "0", outgoingChanIds: [], lastHopPubkey: new Uint8Array(0), cltvLimit: 0, routeHints: [], destCustomRecords: {}, allowSelfPayment: false, destFeatures: [], maxParts: 0, noInflightUpdates: false, maxShardSizeMsat: 0, amp: false, timePref: 0 };
|
||||
const message = { dest: new Uint8Array(0), amt: 0n, amtMsat: 0n, paymentHash: new Uint8Array(0), finalCltvDelta: 0, paymentAddr: new Uint8Array(0), paymentRequest: "", timeoutSeconds: 0, feeLimitSat: 0n, feeLimitMsat: 0n, outgoingChanId: "0", outgoingChanIds: [], lastHopPubkey: new Uint8Array(0), cltvLimit: 0, routeHints: [], destCustomRecords: {}, allowSelfPayment: false, destFeatures: [], maxParts: 0, noInflightUpdates: false, maxShardSizeMsat: 0n, amp: false, timePref: 0 };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<SendPaymentRequest>(this, message, value);
|
||||
|
|
@ -1301,10 +1301,10 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
message.dest = reader.bytes();
|
||||
break;
|
||||
case /* int64 amt */ 2:
|
||||
message.amt = reader.int64().toNumber();
|
||||
message.amt = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 amt_msat */ 12:
|
||||
message.amtMsat = reader.int64().toNumber();
|
||||
message.amtMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* bytes payment_hash */ 3:
|
||||
message.paymentHash = reader.bytes();
|
||||
|
|
@ -1322,10 +1322,10 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
message.timeoutSeconds = reader.int32();
|
||||
break;
|
||||
case /* int64 fee_limit_sat */ 7:
|
||||
message.feeLimitSat = reader.int64().toNumber();
|
||||
message.feeLimitSat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 fee_limit_msat */ 13:
|
||||
message.feeLimitMsat = reader.int64().toNumber();
|
||||
message.feeLimitMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* uint64 outgoing_chan_id = 8 [deprecated = true, jstype = JS_STRING];*/ 8:
|
||||
message.outgoingChanId = reader.uint64().toString();
|
||||
|
|
@ -1333,9 +1333,9 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
case /* repeated uint64 outgoing_chan_ids */ 19:
|
||||
if (wireType === WireType.LengthDelimited)
|
||||
for (let e = reader.int32() + reader.pos; reader.pos < e;)
|
||||
message.outgoingChanIds.push(reader.uint64().toNumber());
|
||||
message.outgoingChanIds.push(reader.uint64().toBigInt());
|
||||
else
|
||||
message.outgoingChanIds.push(reader.uint64().toNumber());
|
||||
message.outgoingChanIds.push(reader.uint64().toBigInt());
|
||||
break;
|
||||
case /* bytes last_hop_pubkey */ 14:
|
||||
message.lastHopPubkey = reader.bytes();
|
||||
|
|
@ -1366,7 +1366,7 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
message.noInflightUpdates = reader.bool();
|
||||
break;
|
||||
case /* uint64 max_shard_size_msat */ 21:
|
||||
message.maxShardSizeMsat = reader.uint64().toNumber();
|
||||
message.maxShardSizeMsat = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* bool amp */ 22:
|
||||
message.amp = reader.bool();
|
||||
|
|
@ -1406,10 +1406,10 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
if (message.dest.length)
|
||||
writer.tag(1, WireType.LengthDelimited).bytes(message.dest);
|
||||
/* int64 amt = 2; */
|
||||
if (message.amt !== 0)
|
||||
if (message.amt !== 0n)
|
||||
writer.tag(2, WireType.Varint).int64(message.amt);
|
||||
/* int64 amt_msat = 12; */
|
||||
if (message.amtMsat !== 0)
|
||||
if (message.amtMsat !== 0n)
|
||||
writer.tag(12, WireType.Varint).int64(message.amtMsat);
|
||||
/* bytes payment_hash = 3; */
|
||||
if (message.paymentHash.length)
|
||||
|
|
@ -1427,10 +1427,10 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
if (message.timeoutSeconds !== 0)
|
||||
writer.tag(6, WireType.Varint).int32(message.timeoutSeconds);
|
||||
/* int64 fee_limit_sat = 7; */
|
||||
if (message.feeLimitSat !== 0)
|
||||
if (message.feeLimitSat !== 0n)
|
||||
writer.tag(7, WireType.Varint).int64(message.feeLimitSat);
|
||||
/* int64 fee_limit_msat = 13; */
|
||||
if (message.feeLimitMsat !== 0)
|
||||
if (message.feeLimitMsat !== 0n)
|
||||
writer.tag(13, WireType.Varint).int64(message.feeLimitMsat);
|
||||
/* uint64 outgoing_chan_id = 8 [deprecated = true, jstype = JS_STRING]; */
|
||||
if (message.outgoingChanId !== "0")
|
||||
|
|
@ -1471,7 +1471,7 @@ class SendPaymentRequest$Type extends MessageType<SendPaymentRequest> {
|
|||
if (message.noInflightUpdates !== false)
|
||||
writer.tag(18, WireType.Varint).bool(message.noInflightUpdates);
|
||||
/* uint64 max_shard_size_msat = 21; */
|
||||
if (message.maxShardSizeMsat !== 0)
|
||||
if (message.maxShardSizeMsat !== 0n)
|
||||
writer.tag(21, WireType.Varint).uint64(message.maxShardSizeMsat);
|
||||
/* bool amp = 22; */
|
||||
if (message.amp !== false)
|
||||
|
|
@ -1595,11 +1595,11 @@ class RouteFeeRequest$Type extends MessageType<RouteFeeRequest> {
|
|||
constructor() {
|
||||
super("routerrpc.RouteFeeRequest", [
|
||||
{ no: 1, name: "dest", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 2, name: "amt_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
|
||||
{ no: 2, name: "amt_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<RouteFeeRequest>): RouteFeeRequest {
|
||||
const message = { dest: new Uint8Array(0), amtSat: 0 };
|
||||
const message = { dest: new Uint8Array(0), amtSat: 0n };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<RouteFeeRequest>(this, message, value);
|
||||
|
|
@ -1614,7 +1614,7 @@ class RouteFeeRequest$Type extends MessageType<RouteFeeRequest> {
|
|||
message.dest = reader.bytes();
|
||||
break;
|
||||
case /* int64 amt_sat */ 2:
|
||||
message.amtSat = reader.int64().toNumber();
|
||||
message.amtSat = reader.int64().toBigInt();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
|
|
@ -1632,7 +1632,7 @@ class RouteFeeRequest$Type extends MessageType<RouteFeeRequest> {
|
|||
if (message.dest.length)
|
||||
writer.tag(1, WireType.LengthDelimited).bytes(message.dest);
|
||||
/* int64 amt_sat = 2; */
|
||||
if (message.amtSat !== 0)
|
||||
if (message.amtSat !== 0n)
|
||||
writer.tag(2, WireType.Varint).int64(message.amtSat);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
|
|
@ -1648,12 +1648,12 @@ export const RouteFeeRequest = new RouteFeeRequest$Type();
|
|||
class RouteFeeResponse$Type extends MessageType<RouteFeeResponse> {
|
||||
constructor() {
|
||||
super("routerrpc.RouteFeeResponse", [
|
||||
{ no: 1, name: "routing_fee_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 2, name: "time_lock_delay", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
|
||||
{ no: 1, name: "routing_fee_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 2, name: "time_lock_delay", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<RouteFeeResponse>): RouteFeeResponse {
|
||||
const message = { routingFeeMsat: 0, timeLockDelay: 0 };
|
||||
const message = { routingFeeMsat: 0n, timeLockDelay: 0n };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<RouteFeeResponse>(this, message, value);
|
||||
|
|
@ -1665,10 +1665,10 @@ class RouteFeeResponse$Type extends MessageType<RouteFeeResponse> {
|
|||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* int64 routing_fee_msat */ 1:
|
||||
message.routingFeeMsat = reader.int64().toNumber();
|
||||
message.routingFeeMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 time_lock_delay */ 2:
|
||||
message.timeLockDelay = reader.int64().toNumber();
|
||||
message.timeLockDelay = reader.int64().toBigInt();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
|
|
@ -1683,10 +1683,10 @@ class RouteFeeResponse$Type extends MessageType<RouteFeeResponse> {
|
|||
}
|
||||
internalBinaryWrite(message: RouteFeeResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* int64 routing_fee_msat = 1; */
|
||||
if (message.routingFeeMsat !== 0)
|
||||
if (message.routingFeeMsat !== 0n)
|
||||
writer.tag(1, WireType.Varint).int64(message.routingFeeMsat);
|
||||
/* int64 time_lock_delay = 2; */
|
||||
if (message.timeLockDelay !== 0)
|
||||
if (message.timeLockDelay !== 0n)
|
||||
writer.tag(2, WireType.Varint).int64(message.timeLockDelay);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
|
|
@ -2083,16 +2083,16 @@ export const PairHistory = new PairHistory$Type();
|
|||
class PairData$Type extends MessageType<PairData> {
|
||||
constructor() {
|
||||
super("routerrpc.PairData", [
|
||||
{ no: 1, name: "fail_time", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 2, name: "fail_amt_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 4, name: "fail_amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 5, name: "success_time", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 6, name: "success_amt_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 7, name: "success_amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
|
||||
{ no: 1, name: "fail_time", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 2, name: "fail_amt_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 4, name: "fail_amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 5, name: "success_time", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 6, name: "success_amt_sat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 7, name: "success_amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<PairData>): PairData {
|
||||
const message = { failTime: 0, failAmtSat: 0, failAmtMsat: 0, successTime: 0, successAmtSat: 0, successAmtMsat: 0 };
|
||||
const message = { failTime: 0n, failAmtSat: 0n, failAmtMsat: 0n, successTime: 0n, successAmtSat: 0n, successAmtMsat: 0n };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<PairData>(this, message, value);
|
||||
|
|
@ -2104,22 +2104,22 @@ class PairData$Type extends MessageType<PairData> {
|
|||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* int64 fail_time */ 1:
|
||||
message.failTime = reader.int64().toNumber();
|
||||
message.failTime = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 fail_amt_sat */ 2:
|
||||
message.failAmtSat = reader.int64().toNumber();
|
||||
message.failAmtSat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 fail_amt_msat */ 4:
|
||||
message.failAmtMsat = reader.int64().toNumber();
|
||||
message.failAmtMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 success_time */ 5:
|
||||
message.successTime = reader.int64().toNumber();
|
||||
message.successTime = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 success_amt_sat */ 6:
|
||||
message.successAmtSat = reader.int64().toNumber();
|
||||
message.successAmtSat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int64 success_amt_msat */ 7:
|
||||
message.successAmtMsat = reader.int64().toNumber();
|
||||
message.successAmtMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
|
|
@ -2134,22 +2134,22 @@ class PairData$Type extends MessageType<PairData> {
|
|||
}
|
||||
internalBinaryWrite(message: PairData, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* int64 fail_time = 1; */
|
||||
if (message.failTime !== 0)
|
||||
if (message.failTime !== 0n)
|
||||
writer.tag(1, WireType.Varint).int64(message.failTime);
|
||||
/* int64 fail_amt_sat = 2; */
|
||||
if (message.failAmtSat !== 0)
|
||||
if (message.failAmtSat !== 0n)
|
||||
writer.tag(2, WireType.Varint).int64(message.failAmtSat);
|
||||
/* int64 fail_amt_msat = 4; */
|
||||
if (message.failAmtMsat !== 0)
|
||||
if (message.failAmtMsat !== 0n)
|
||||
writer.tag(4, WireType.Varint).int64(message.failAmtMsat);
|
||||
/* int64 success_time = 5; */
|
||||
if (message.successTime !== 0)
|
||||
if (message.successTime !== 0n)
|
||||
writer.tag(5, WireType.Varint).int64(message.successTime);
|
||||
/* int64 success_amt_sat = 6; */
|
||||
if (message.successAmtSat !== 0)
|
||||
if (message.successAmtSat !== 0n)
|
||||
writer.tag(6, WireType.Varint).int64(message.successAmtSat);
|
||||
/* int64 success_amt_msat = 7; */
|
||||
if (message.successAmtMsat !== 0)
|
||||
if (message.successAmtMsat !== 0n)
|
||||
writer.tag(7, WireType.Varint).int64(message.successAmtMsat);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
|
|
@ -2311,15 +2311,15 @@ export const SetMissionControlConfigResponse = new SetMissionControlConfigRespon
|
|||
class MissionControlConfig$Type extends MessageType<MissionControlConfig> {
|
||||
constructor() {
|
||||
super("routerrpc.MissionControlConfig", [
|
||||
{ no: 1, name: "half_life_seconds", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 1, name: "half_life_seconds", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 2, name: "hop_probability", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ },
|
||||
{ no: 3, name: "weight", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ },
|
||||
{ no: 4, name: "maximum_payment_results", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
|
||||
{ no: 5, name: "minimum_failure_relax_interval", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
|
||||
{ no: 5, name: "minimum_failure_relax_interval", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<MissionControlConfig>): MissionControlConfig {
|
||||
const message = { halfLifeSeconds: 0, hopProbability: 0, weight: 0, maximumPaymentResults: 0, minimumFailureRelaxInterval: 0 };
|
||||
const message = { halfLifeSeconds: 0n, hopProbability: 0, weight: 0, maximumPaymentResults: 0, minimumFailureRelaxInterval: 0n };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<MissionControlConfig>(this, message, value);
|
||||
|
|
@ -2331,7 +2331,7 @@ class MissionControlConfig$Type extends MessageType<MissionControlConfig> {
|
|||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* uint64 half_life_seconds */ 1:
|
||||
message.halfLifeSeconds = reader.uint64().toNumber();
|
||||
message.halfLifeSeconds = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* float hop_probability */ 2:
|
||||
message.hopProbability = reader.float();
|
||||
|
|
@ -2343,7 +2343,7 @@ class MissionControlConfig$Type extends MessageType<MissionControlConfig> {
|
|||
message.maximumPaymentResults = reader.uint32();
|
||||
break;
|
||||
case /* uint64 minimum_failure_relax_interval */ 5:
|
||||
message.minimumFailureRelaxInterval = reader.uint64().toNumber();
|
||||
message.minimumFailureRelaxInterval = reader.uint64().toBigInt();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
|
|
@ -2358,7 +2358,7 @@ class MissionControlConfig$Type extends MessageType<MissionControlConfig> {
|
|||
}
|
||||
internalBinaryWrite(message: MissionControlConfig, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* uint64 half_life_seconds = 1; */
|
||||
if (message.halfLifeSeconds !== 0)
|
||||
if (message.halfLifeSeconds !== 0n)
|
||||
writer.tag(1, WireType.Varint).uint64(message.halfLifeSeconds);
|
||||
/* float hop_probability = 2; */
|
||||
if (message.hopProbability !== 0)
|
||||
|
|
@ -2370,7 +2370,7 @@ class MissionControlConfig$Type extends MessageType<MissionControlConfig> {
|
|||
if (message.maximumPaymentResults !== 0)
|
||||
writer.tag(4, WireType.Varint).uint32(message.maximumPaymentResults);
|
||||
/* uint64 minimum_failure_relax_interval = 5; */
|
||||
if (message.minimumFailureRelaxInterval !== 0)
|
||||
if (message.minimumFailureRelaxInterval !== 0n)
|
||||
writer.tag(5, WireType.Varint).uint64(message.minimumFailureRelaxInterval);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
|
|
@ -2388,11 +2388,11 @@ class QueryProbabilityRequest$Type extends MessageType<QueryProbabilityRequest>
|
|||
super("routerrpc.QueryProbabilityRequest", [
|
||||
{ no: 1, name: "from_node", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 2, name: "to_node", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 3, name: "amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
|
||||
{ no: 3, name: "amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<QueryProbabilityRequest>): QueryProbabilityRequest {
|
||||
const message = { fromNode: new Uint8Array(0), toNode: new Uint8Array(0), amtMsat: 0 };
|
||||
const message = { fromNode: new Uint8Array(0), toNode: new Uint8Array(0), amtMsat: 0n };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<QueryProbabilityRequest>(this, message, value);
|
||||
|
|
@ -2410,7 +2410,7 @@ class QueryProbabilityRequest$Type extends MessageType<QueryProbabilityRequest>
|
|||
message.toNode = reader.bytes();
|
||||
break;
|
||||
case /* int64 amt_msat */ 3:
|
||||
message.amtMsat = reader.int64().toNumber();
|
||||
message.amtMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
|
|
@ -2431,7 +2431,7 @@ class QueryProbabilityRequest$Type extends MessageType<QueryProbabilityRequest>
|
|||
if (message.toNode.length)
|
||||
writer.tag(2, WireType.LengthDelimited).bytes(message.toNode);
|
||||
/* int64 amt_msat = 3; */
|
||||
if (message.amtMsat !== 0)
|
||||
if (message.amtMsat !== 0n)
|
||||
writer.tag(3, WireType.Varint).int64(message.amtMsat);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
|
|
@ -2501,7 +2501,7 @@ export const QueryProbabilityResponse = new QueryProbabilityResponse$Type();
|
|||
class BuildRouteRequest$Type extends MessageType<BuildRouteRequest> {
|
||||
constructor() {
|
||||
super("routerrpc.BuildRouteRequest", [
|
||||
{ no: 1, name: "amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 1, name: "amt_msat", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 2, name: "final_cltv_delta", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
|
||||
{ no: 3, name: "outgoing_chan_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/ },
|
||||
{ no: 4, name: "hop_pubkeys", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ },
|
||||
|
|
@ -2509,7 +2509,7 @@ class BuildRouteRequest$Type extends MessageType<BuildRouteRequest> {
|
|||
]);
|
||||
}
|
||||
create(value?: PartialMessage<BuildRouteRequest>): BuildRouteRequest {
|
||||
const message = { amtMsat: 0, finalCltvDelta: 0, outgoingChanId: "0", hopPubkeys: [], paymentAddr: new Uint8Array(0) };
|
||||
const message = { amtMsat: 0n, finalCltvDelta: 0, outgoingChanId: "0", hopPubkeys: [], paymentAddr: new Uint8Array(0) };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<BuildRouteRequest>(this, message, value);
|
||||
|
|
@ -2521,7 +2521,7 @@ class BuildRouteRequest$Type extends MessageType<BuildRouteRequest> {
|
|||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* int64 amt_msat */ 1:
|
||||
message.amtMsat = reader.int64().toNumber();
|
||||
message.amtMsat = reader.int64().toBigInt();
|
||||
break;
|
||||
case /* int32 final_cltv_delta */ 2:
|
||||
message.finalCltvDelta = reader.int32();
|
||||
|
|
@ -2548,7 +2548,7 @@ class BuildRouteRequest$Type extends MessageType<BuildRouteRequest> {
|
|||
}
|
||||
internalBinaryWrite(message: BuildRouteRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* int64 amt_msat = 1; */
|
||||
if (message.amtMsat !== 0)
|
||||
if (message.amtMsat !== 0n)
|
||||
writer.tag(1, WireType.Varint).int64(message.amtMsat);
|
||||
/* int32 final_cltv_delta = 2; */
|
||||
if (message.finalCltvDelta !== 0)
|
||||
|
|
@ -2649,11 +2649,11 @@ export const SubscribeHtlcEventsRequest = new SubscribeHtlcEventsRequest$Type();
|
|||
class HtlcEvent$Type extends MessageType<HtlcEvent> {
|
||||
constructor() {
|
||||
super("routerrpc.HtlcEvent", [
|
||||
{ no: 1, name: "incoming_channel_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 2, name: "outgoing_channel_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 3, name: "incoming_htlc_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 4, name: "outgoing_htlc_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 5, name: "timestamp_ns", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 1, name: "incoming_channel_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 2, name: "outgoing_channel_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 3, name: "incoming_htlc_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 4, name: "outgoing_htlc_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 5, name: "timestamp_ns", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 6, name: "event_type", kind: "enum", T: () => ["routerrpc.HtlcEvent.EventType", HtlcEvent_EventType] },
|
||||
{ no: 7, name: "forward_event", kind: "message", oneof: "event", T: () => ForwardEvent },
|
||||
{ no: 8, name: "forward_fail_event", kind: "message", oneof: "event", T: () => ForwardFailEvent },
|
||||
|
|
@ -2664,7 +2664,7 @@ class HtlcEvent$Type extends MessageType<HtlcEvent> {
|
|||
]);
|
||||
}
|
||||
create(value?: PartialMessage<HtlcEvent>): HtlcEvent {
|
||||
const message = { incomingChannelId: 0, outgoingChannelId: 0, incomingHtlcId: 0, outgoingHtlcId: 0, timestampNs: 0, eventType: 0, event: { oneofKind: undefined } };
|
||||
const message = { incomingChannelId: 0n, outgoingChannelId: 0n, incomingHtlcId: 0n, outgoingHtlcId: 0n, timestampNs: 0n, eventType: 0, event: { oneofKind: undefined } };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<HtlcEvent>(this, message, value);
|
||||
|
|
@ -2676,19 +2676,19 @@ class HtlcEvent$Type extends MessageType<HtlcEvent> {
|
|||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* uint64 incoming_channel_id */ 1:
|
||||
message.incomingChannelId = reader.uint64().toNumber();
|
||||
message.incomingChannelId = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint64 outgoing_channel_id */ 2:
|
||||
message.outgoingChannelId = reader.uint64().toNumber();
|
||||
message.outgoingChannelId = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint64 incoming_htlc_id */ 3:
|
||||
message.incomingHtlcId = reader.uint64().toNumber();
|
||||
message.incomingHtlcId = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint64 outgoing_htlc_id */ 4:
|
||||
message.outgoingHtlcId = reader.uint64().toNumber();
|
||||
message.outgoingHtlcId = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint64 timestamp_ns */ 5:
|
||||
message.timestampNs = reader.uint64().toNumber();
|
||||
message.timestampNs = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* routerrpc.HtlcEvent.EventType event_type */ 6:
|
||||
message.eventType = reader.int32();
|
||||
|
|
@ -2742,19 +2742,19 @@ class HtlcEvent$Type extends MessageType<HtlcEvent> {
|
|||
}
|
||||
internalBinaryWrite(message: HtlcEvent, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* uint64 incoming_channel_id = 1; */
|
||||
if (message.incomingChannelId !== 0)
|
||||
if (message.incomingChannelId !== 0n)
|
||||
writer.tag(1, WireType.Varint).uint64(message.incomingChannelId);
|
||||
/* uint64 outgoing_channel_id = 2; */
|
||||
if (message.outgoingChannelId !== 0)
|
||||
if (message.outgoingChannelId !== 0n)
|
||||
writer.tag(2, WireType.Varint).uint64(message.outgoingChannelId);
|
||||
/* uint64 incoming_htlc_id = 3; */
|
||||
if (message.incomingHtlcId !== 0)
|
||||
if (message.incomingHtlcId !== 0n)
|
||||
writer.tag(3, WireType.Varint).uint64(message.incomingHtlcId);
|
||||
/* uint64 outgoing_htlc_id = 4; */
|
||||
if (message.outgoingHtlcId !== 0)
|
||||
if (message.outgoingHtlcId !== 0n)
|
||||
writer.tag(4, WireType.Varint).uint64(message.outgoingHtlcId);
|
||||
/* uint64 timestamp_ns = 5; */
|
||||
if (message.timestampNs !== 0)
|
||||
if (message.timestampNs !== 0n)
|
||||
writer.tag(5, WireType.Varint).uint64(message.timestampNs);
|
||||
/* routerrpc.HtlcEvent.EventType event_type = 6; */
|
||||
if (message.eventType !== 0)
|
||||
|
|
@ -2793,12 +2793,12 @@ class HtlcInfo$Type extends MessageType<HtlcInfo> {
|
|||
super("routerrpc.HtlcInfo", [
|
||||
{ no: 1, name: "incoming_timelock", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
|
||||
{ no: 2, name: "outgoing_timelock", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
|
||||
{ no: 3, name: "incoming_amt_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 4, name: "outgoing_amt_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
|
||||
{ no: 3, name: "incoming_amt_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 4, name: "outgoing_amt_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<HtlcInfo>): HtlcInfo {
|
||||
const message = { incomingTimelock: 0, outgoingTimelock: 0, incomingAmtMsat: 0, outgoingAmtMsat: 0 };
|
||||
const message = { incomingTimelock: 0, outgoingTimelock: 0, incomingAmtMsat: 0n, outgoingAmtMsat: 0n };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<HtlcInfo>(this, message, value);
|
||||
|
|
@ -2816,10 +2816,10 @@ class HtlcInfo$Type extends MessageType<HtlcInfo> {
|
|||
message.outgoingTimelock = reader.uint32();
|
||||
break;
|
||||
case /* uint64 incoming_amt_msat */ 3:
|
||||
message.incomingAmtMsat = reader.uint64().toNumber();
|
||||
message.incomingAmtMsat = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint64 outgoing_amt_msat */ 4:
|
||||
message.outgoingAmtMsat = reader.uint64().toNumber();
|
||||
message.outgoingAmtMsat = reader.uint64().toBigInt();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
|
|
@ -2840,10 +2840,10 @@ class HtlcInfo$Type extends MessageType<HtlcInfo> {
|
|||
if (message.outgoingTimelock !== 0)
|
||||
writer.tag(2, WireType.Varint).uint32(message.outgoingTimelock);
|
||||
/* uint64 incoming_amt_msat = 3; */
|
||||
if (message.incomingAmtMsat !== 0)
|
||||
if (message.incomingAmtMsat !== 0n)
|
||||
writer.tag(3, WireType.Varint).uint64(message.incomingAmtMsat);
|
||||
/* uint64 outgoing_amt_msat = 4; */
|
||||
if (message.outgoingAmtMsat !== 0)
|
||||
if (message.outgoingAmtMsat !== 0n)
|
||||
writer.tag(4, WireType.Varint).uint64(message.outgoingAmtMsat);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
|
|
@ -3188,12 +3188,12 @@ export const PaymentStatus = new PaymentStatus$Type();
|
|||
class CircuitKey$Type extends MessageType<CircuitKey> {
|
||||
constructor() {
|
||||
super("routerrpc.CircuitKey", [
|
||||
{ no: 1, name: "chan_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 2, name: "htlc_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
|
||||
{ no: 1, name: "chan_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 2, name: "htlc_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<CircuitKey>): CircuitKey {
|
||||
const message = { chanId: 0, htlcId: 0 };
|
||||
const message = { chanId: 0n, htlcId: 0n };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<CircuitKey>(this, message, value);
|
||||
|
|
@ -3205,10 +3205,10 @@ class CircuitKey$Type extends MessageType<CircuitKey> {
|
|||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* uint64 chan_id */ 1:
|
||||
message.chanId = reader.uint64().toNumber();
|
||||
message.chanId = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint64 htlc_id */ 2:
|
||||
message.htlcId = reader.uint64().toNumber();
|
||||
message.htlcId = reader.uint64().toBigInt();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
|
|
@ -3223,10 +3223,10 @@ class CircuitKey$Type extends MessageType<CircuitKey> {
|
|||
}
|
||||
internalBinaryWrite(message: CircuitKey, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* uint64 chan_id = 1; */
|
||||
if (message.chanId !== 0)
|
||||
if (message.chanId !== 0n)
|
||||
writer.tag(1, WireType.Varint).uint64(message.chanId);
|
||||
/* uint64 htlc_id = 2; */
|
||||
if (message.htlcId !== 0)
|
||||
if (message.htlcId !== 0n)
|
||||
writer.tag(2, WireType.Varint).uint64(message.htlcId);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
|
|
@ -3243,11 +3243,11 @@ class ForwardHtlcInterceptRequest$Type extends MessageType<ForwardHtlcInterceptR
|
|||
constructor() {
|
||||
super("routerrpc.ForwardHtlcInterceptRequest", [
|
||||
{ no: 1, name: "incoming_circuit_key", kind: "message", T: () => CircuitKey },
|
||||
{ no: 5, name: "incoming_amount_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 5, name: "incoming_amount_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 6, name: "incoming_expiry", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
|
||||
{ no: 2, name: "payment_hash", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
{ no: 7, name: "outgoing_requested_chan_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 3, name: "outgoing_amount_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
|
||||
{ no: 7, name: "outgoing_requested_chan_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 3, name: "outgoing_amount_msat", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },
|
||||
{ no: 4, name: "outgoing_expiry", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
|
||||
{ no: 8, name: "custom_records", kind: "map", K: 4 /*ScalarType.UINT64*/, V: { kind: "scalar", T: 12 /*ScalarType.BYTES*/ } },
|
||||
{ no: 9, name: "onion_blob", kind: "scalar", T: 12 /*ScalarType.BYTES*/ },
|
||||
|
|
@ -3255,7 +3255,7 @@ class ForwardHtlcInterceptRequest$Type extends MessageType<ForwardHtlcInterceptR
|
|||
]);
|
||||
}
|
||||
create(value?: PartialMessage<ForwardHtlcInterceptRequest>): ForwardHtlcInterceptRequest {
|
||||
const message = { incomingAmountMsat: 0, incomingExpiry: 0, paymentHash: new Uint8Array(0), outgoingRequestedChanId: 0, outgoingAmountMsat: 0, outgoingExpiry: 0, customRecords: {}, onionBlob: new Uint8Array(0), autoFailHeight: 0 };
|
||||
const message = { incomingAmountMsat: 0n, incomingExpiry: 0, paymentHash: new Uint8Array(0), outgoingRequestedChanId: 0n, outgoingAmountMsat: 0n, outgoingExpiry: 0, customRecords: {}, onionBlob: new Uint8Array(0), autoFailHeight: 0 };
|
||||
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<ForwardHtlcInterceptRequest>(this, message, value);
|
||||
|
|
@ -3270,7 +3270,7 @@ class ForwardHtlcInterceptRequest$Type extends MessageType<ForwardHtlcInterceptR
|
|||
message.incomingCircuitKey = CircuitKey.internalBinaryRead(reader, reader.uint32(), options, message.incomingCircuitKey);
|
||||
break;
|
||||
case /* uint64 incoming_amount_msat */ 5:
|
||||
message.incomingAmountMsat = reader.uint64().toNumber();
|
||||
message.incomingAmountMsat = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint32 incoming_expiry */ 6:
|
||||
message.incomingExpiry = reader.uint32();
|
||||
|
|
@ -3279,10 +3279,10 @@ class ForwardHtlcInterceptRequest$Type extends MessageType<ForwardHtlcInterceptR
|
|||
message.paymentHash = reader.bytes();
|
||||
break;
|
||||
case /* uint64 outgoing_requested_chan_id */ 7:
|
||||
message.outgoingRequestedChanId = reader.uint64().toNumber();
|
||||
message.outgoingRequestedChanId = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint64 outgoing_amount_msat */ 3:
|
||||
message.outgoingAmountMsat = reader.uint64().toNumber();
|
||||
message.outgoingAmountMsat = reader.uint64().toBigInt();
|
||||
break;
|
||||
case /* uint32 outgoing_expiry */ 4:
|
||||
message.outgoingExpiry = reader.uint32();
|
||||
|
|
@ -3328,7 +3328,7 @@ class ForwardHtlcInterceptRequest$Type extends MessageType<ForwardHtlcInterceptR
|
|||
if (message.incomingCircuitKey)
|
||||
CircuitKey.internalBinaryWrite(message.incomingCircuitKey, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* uint64 incoming_amount_msat = 5; */
|
||||
if (message.incomingAmountMsat !== 0)
|
||||
if (message.incomingAmountMsat !== 0n)
|
||||
writer.tag(5, WireType.Varint).uint64(message.incomingAmountMsat);
|
||||
/* uint32 incoming_expiry = 6; */
|
||||
if (message.incomingExpiry !== 0)
|
||||
|
|
@ -3337,10 +3337,10 @@ class ForwardHtlcInterceptRequest$Type extends MessageType<ForwardHtlcInterceptR
|
|||
if (message.paymentHash.length)
|
||||
writer.tag(2, WireType.LengthDelimited).bytes(message.paymentHash);
|
||||
/* uint64 outgoing_requested_chan_id = 7; */
|
||||
if (message.outgoingRequestedChanId !== 0)
|
||||
if (message.outgoingRequestedChanId !== 0n)
|
||||
writer.tag(7, WireType.Varint).uint64(message.outgoingRequestedChanId);
|
||||
/* uint64 outgoing_amount_msat = 3; */
|
||||
if (message.outgoingAmountMsat !== 0)
|
||||
if (message.outgoingAmountMsat !== 0n)
|
||||
writer.tag(3, WireType.Varint).uint64(message.outgoingAmountMsat);
|
||||
/* uint32 outgoing_expiry = 4; */
|
||||
if (message.outgoingExpiry !== 0)
|
||||
|
|
|
|||
|
|
@ -89,7 +89,19 @@ service LightningPub {
|
|||
option (http_method) = "post";
|
||||
option (http_route) = "/api/user/auth";
|
||||
}
|
||||
rpc GetUserInfo(structs.Empty)returns(structs.UserInfo){
|
||||
option (auth_type) = "User";
|
||||
option (http_method) = "post";
|
||||
option (http_route) = "/api/user/info";
|
||||
option (nostr) = true;
|
||||
}
|
||||
// USER
|
||||
rpc GetUserOperations(structs.GetUserOperationsRequest) returns (structs.GetUserOperationsResponse) {
|
||||
option (auth_type) = "User";
|
||||
option (http_method) = "post";
|
||||
option (http_route) = "/api/user/operations";
|
||||
option (nostr) = true;
|
||||
}
|
||||
rpc NewAddress(structs.NewAddressRequest) returns (structs.NewAddressResponse) {
|
||||
option (auth_type) = "User";
|
||||
option (http_method) = "post";
|
||||
|
|
|
|||
|
|
@ -115,3 +115,36 @@ message AuthUserResponse{
|
|||
string userId = 1;
|
||||
string authToken = 2;
|
||||
}
|
||||
message UserInfo{
|
||||
string userId = 1;
|
||||
int64 balance = 2;
|
||||
}
|
||||
message GetUserOperationsRequest{
|
||||
int64 latestIncomingInvoice = 1;
|
||||
int64 latestOutgoingInvoice = 2;
|
||||
int64 latestIncomingTx = 3;
|
||||
int64 latestOutgoingTx = 4;
|
||||
}
|
||||
enum UserOperationType {
|
||||
INCOMING_TX =0;
|
||||
OUTGOING_TX =1;
|
||||
INCOMING_INVOICE =2;
|
||||
OUTGOING_INVOICE=3;
|
||||
}
|
||||
message UserOperation{
|
||||
int64 paidAtUnix=1;
|
||||
UserOperationType type = 2;
|
||||
bool inbound =3;
|
||||
int64 amount = 4;
|
||||
}
|
||||
message UserOperations {
|
||||
int64 fromIndex=1;
|
||||
int64 toIndex=2;
|
||||
repeated UserOperation operations=3;
|
||||
}
|
||||
message GetUserOperationsResponse{
|
||||
UserOperations latestOutgoingInvoiceOperations=1;
|
||||
UserOperations latestIncomingInvoiceOperations=2;
|
||||
UserOperations latestOutgoingTxOperations=3;
|
||||
UserOperations latestIncomingTxOperations=4;
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ const serverOptions = (mainHandler: Main): ServerOptions => {
|
|||
GuestAuthGuard: async (_) => ({}),
|
||||
encryptCallback: async (_, b) => b,
|
||||
decryptCallback: async (_, b) => b,
|
||||
throwErrors: true
|
||||
}
|
||||
}
|
||||
export default serverOptions
|
||||
14
src/index.ts
14
src/index.ts
|
|
@ -1,19 +1,19 @@
|
|||
import 'dotenv/config'
|
||||
import NewServer from '../proto/autogenerated/ts/express_server'
|
||||
import GetServerMethods from './services/serverMethods'
|
||||
import serverOptions from './auth';
|
||||
import Main, { LoadMainSettingsFromEnv } from './services/main'
|
||||
import { LoadNosrtSettingsFromEnv } from './services/nostr'
|
||||
import NewServer from '../proto/autogenerated/ts/express_server.js'
|
||||
import GetServerMethods from './services/serverMethods/index.js'
|
||||
import serverOptions from './auth.js';
|
||||
import Main, { LoadMainSettingsFromEnv } from './services/main/index.js'
|
||||
import { LoadNosrtSettingsFromEnv } from './services/nostr/index.js'
|
||||
import nostrMiddleware from './nostrMiddleware.js'
|
||||
|
||||
const start = async () => {
|
||||
const mainHandler = new Main(LoadMainSettingsFromEnv())
|
||||
await mainHandler.storage.Connect()
|
||||
|
||||
await mainHandler.lnd.Warmup()
|
||||
const serverMethods = GetServerMethods(mainHandler)
|
||||
const nostrSettings = LoadNosrtSettingsFromEnv()
|
||||
nostrMiddleware(serverMethods, mainHandler, nostrSettings)
|
||||
const Server = NewServer(serverMethods, serverOptions(mainHandler))
|
||||
Server.Listen(3000)
|
||||
Server.Listen(8080)
|
||||
}
|
||||
start()
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export default (serverMethods: Types.ServerMethods, mainHandler: Main, nostrSett
|
|||
const nostrTransport = NewNostrTransport(serverMethods, {
|
||||
NostrUserAuthGuard: async pub => {
|
||||
if (!pub || !nostrSettings.allowedPubs.includes(pub)) {
|
||||
throw new Error("nostr pub invalid or not allowed")
|
||||
throw new Error("nostr pub invalid or not allowed" + pub)
|
||||
}
|
||||
let nostrUser = await mainHandler.storage.FindNostrUser(pub)
|
||||
if (!nostrUser) { // TODO: add POW
|
||||
|
|
@ -19,6 +19,7 @@ export default (serverMethods: Types.ServerMethods, mainHandler: Main, nostrSett
|
|||
}
|
||||
})
|
||||
const nostr = new Nostr(nostrSettings, event => {
|
||||
console.log(event)
|
||||
let j: NostrRequest
|
||||
try {
|
||||
j = JSON.parse(event.content)
|
||||
|
|
|
|||
|
|
@ -1,34 +1,34 @@
|
|||
import { OpenChannelRequest, Invoice } from "../../../proto/lnd/lightning";
|
||||
|
||||
export const AddInvoiceReq = (value: number, memo = "", privateHints = false, expiry = 60 * 60): Invoice => ({
|
||||
expiry: expiry,
|
||||
expiry: BigInt(expiry),
|
||||
memo: memo,
|
||||
private: privateHints,
|
||||
value: value,
|
||||
value: BigInt(value),
|
||||
|
||||
fallbackAddr: "",
|
||||
cltvExpiry: 0,
|
||||
cltvExpiry: 0n,
|
||||
descriptionHash: Buffer.alloc(0),
|
||||
features: {},
|
||||
isAmp: false,
|
||||
rPreimage: Buffer.alloc(0),
|
||||
routeHints: [],
|
||||
valueMsat: 0,
|
||||
valueMsat: 0n,
|
||||
|
||||
addIndex: 0,
|
||||
addIndex: 0n,
|
||||
ampInvoiceState: {},
|
||||
amtPaidMsat: 0,
|
||||
amtPaidSat: 0,
|
||||
creationDate: 0,
|
||||
amtPaidMsat: 0n,
|
||||
amtPaidSat: 0n,
|
||||
creationDate: 0n,
|
||||
htlcs: [],
|
||||
isKeysend: false,
|
||||
paymentAddr: Buffer.alloc(0),
|
||||
paymentRequest: "",
|
||||
rHash: Buffer.alloc(0),
|
||||
settleDate: 0,
|
||||
settleIndex: 0,
|
||||
settleDate: 0n,
|
||||
settleIndex: 0n,
|
||||
state: 0,
|
||||
|
||||
amtPaid: 0,
|
||||
amtPaid: 0n,
|
||||
settled: false,
|
||||
})
|
||||
|
|
@ -6,7 +6,7 @@ import * as Types from '../../../proto/autogenerated/ts/types.js'
|
|||
import { LightningClient } from '../../../proto/lnd/lightning.client.js'
|
||||
import { InvoicesClient } from '../../../proto/lnd/invoices.client.js'
|
||||
import { RouterClient } from '../../../proto/lnd/router.client.js'
|
||||
import { GetInfoResponse, AddressType, NewAddressResponse, AddInvoiceResponse, Invoice_InvoiceState, PayReq, Payment_PaymentStatus, Payment } from '../../../proto/lnd/lightning.js'
|
||||
import { GetInfoResponse, AddressType, NewAddressResponse, AddInvoiceResponse, Invoice_InvoiceState, PayReq, Payment_PaymentStatus, Payment, PaymentFailureReason } from '../../../proto/lnd/lightning.js'
|
||||
import { OpenChannelReq } from './openChannelReq.js';
|
||||
import { AddInvoiceReq } from './addInvoiceReq.js';
|
||||
import { PayInvoiceReq } from './payInvoiceReq.js';
|
||||
|
|
@ -69,6 +69,7 @@ export default class {
|
|||
this.invoices = new InvoicesClient(transport)
|
||||
this.router = new RouterClient(transport)
|
||||
this.SubscribeAddressPaid()
|
||||
this.SubscribeInvoicePaid()
|
||||
}
|
||||
Stop() {
|
||||
this.abortController.abort()
|
||||
|
|
@ -107,8 +108,8 @@ export default class {
|
|||
|
||||
SubscribeInvoicePaid() {
|
||||
const stream = this.lightning.subscribeInvoices({
|
||||
settleIndex: this.latestKnownSettleIndex,
|
||||
addIndex: 0,
|
||||
settleIndex: BigInt(this.latestKnownSettleIndex),
|
||||
addIndex: 0n,
|
||||
}, { abort: this.abortController.signal })
|
||||
stream.responses.onMessage(invoice => {
|
||||
if (invoice.state === Invoice_InvoiceState.SETTLED) {
|
||||
|
|
@ -162,15 +163,18 @@ export default class {
|
|||
async PayInvoice(invoice: string, amount: number, feeLimit: number): Promise<Payment> {
|
||||
this.checkReady()
|
||||
const abortController = new AbortController()
|
||||
const stream = this.router.sendPaymentV2(PayInvoiceReq(invoice, amount, feeLimit), { abort: abortController.signal })
|
||||
const req = PayInvoiceReq(invoice, amount, feeLimit)
|
||||
console.log(req)
|
||||
const stream = this.router.sendPaymentV2(req, { abort: abortController.signal })
|
||||
return new Promise((res, rej) => {
|
||||
stream.responses.onError(error => {
|
||||
rej(error)
|
||||
})
|
||||
stream.responses.onMessage(payment => {
|
||||
console.log(payment)
|
||||
switch (payment.status) {
|
||||
case Payment_PaymentStatus.FAILED:
|
||||
rej(payment.failureReason)
|
||||
rej(PaymentFailureReason[payment.failureReason])
|
||||
return
|
||||
case Payment_PaymentStatus.SUCCEEDED:
|
||||
res(payment)
|
||||
|
|
@ -182,7 +186,7 @@ export default class {
|
|||
async EstimateChainFees(address: string, amount: number, targetConf: number) {
|
||||
this.checkReady()
|
||||
const res = await this.lightning.estimateFee({
|
||||
addrToAmount: { [address]: amount },
|
||||
addrToAmount: { [address]: BigInt(amount) },
|
||||
minConfs: 1,
|
||||
spendUnconfirmed: false,
|
||||
targetConf: targetConf
|
||||
|
|
|
|||
|
|
@ -3,23 +3,23 @@ import { OpenChannelRequest } from "../../../proto/lnd/lightning";
|
|||
export const OpenChannelReq = (destination: string, closeAddress: string, fundingAmount: number, pushSats: number): OpenChannelRequest => ({
|
||||
nodePubkey: Buffer.from(destination, 'hex'),
|
||||
closeAddress: closeAddress,
|
||||
localFundingAmount: fundingAmount,
|
||||
pushSat: pushSats,
|
||||
localFundingAmount: BigInt(fundingAmount),
|
||||
pushSat: BigInt(pushSats),
|
||||
|
||||
satPerVbyte: 0, // TBD
|
||||
satPerVbyte: 0n, // TBD
|
||||
private: false,
|
||||
minConfs: 0, // TBD
|
||||
baseFee: 0, // TBD
|
||||
feeRate: 0, // TBD
|
||||
baseFee: 0n, // TBD
|
||||
feeRate: 0n, // TBD
|
||||
targetConf: 0,
|
||||
zeroConf: false,
|
||||
maxLocalCsv: 0,
|
||||
remoteCsvDelay: 0,
|
||||
spendUnconfirmed: false,
|
||||
minHtlcMsat: 0,
|
||||
remoteChanReserveSat: 0,
|
||||
minHtlcMsat: 0n,
|
||||
remoteChanReserveSat: 0n,
|
||||
remoteMaxHtlcs: 0,
|
||||
remoteMaxValueInFlightMsat: 0,
|
||||
remoteMaxValueInFlightMsat: 0n,
|
||||
useBaseFee: false,
|
||||
useFeeRate: false,
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ export const OpenChannelReq = (destination: string, closeAddress: string, fundin
|
|||
commitmentType: 0,
|
||||
scidAlias: false,
|
||||
nodePubkeyString: "",
|
||||
satPerByte: 0,
|
||||
satPerByte: 0n,
|
||||
|
||||
fundingShim: undefined
|
||||
})
|
||||
|
|
@ -2,8 +2,8 @@ import { OpenChannelRequest } from "../../../proto/lnd/lightning";
|
|||
import { SendPaymentRequest } from "../../../proto/lnd/router";
|
||||
|
||||
export const PayInvoiceReq = (invoice: string, amount: number, feeLimit: number): SendPaymentRequest => ({
|
||||
amt: amount,
|
||||
feeLimitSat: feeLimit,
|
||||
amt: BigInt(amount),
|
||||
feeLimitSat: BigInt(feeLimit),
|
||||
noInflightUpdates: true,
|
||||
paymentRequest: invoice,
|
||||
maxParts: 3,
|
||||
|
|
@ -11,20 +11,20 @@ export const PayInvoiceReq = (invoice: string, amount: number, feeLimit: number)
|
|||
|
||||
allowSelfPayment: false,
|
||||
amp: false,
|
||||
amtMsat: 0,
|
||||
amtMsat: 0n,
|
||||
cltvLimit: 0,
|
||||
dest: Buffer.alloc(0),
|
||||
destCustomRecords: {},
|
||||
destFeatures: [],
|
||||
feeLimitMsat: 0,
|
||||
feeLimitMsat: 0n,
|
||||
finalCltvDelta: 0,
|
||||
lastHopPubkey: Buffer.alloc(0),
|
||||
maxShardSizeMsat: 0,
|
||||
maxShardSizeMsat: 0n,
|
||||
outgoingChanIds: [],
|
||||
paymentAddr: Buffer.alloc(0),
|
||||
paymentHash: Buffer.alloc(0),
|
||||
routeHints: [],
|
||||
timePref: 0,
|
||||
|
||||
outgoingChanId: ""
|
||||
outgoingChanId: '0'
|
||||
})
|
||||
|
|
@ -2,12 +2,12 @@ import { SendCoinsRequest } from "../../../proto/lnd/lightning";
|
|||
|
||||
export const SendCoinsReq = (address: string, amount: number, satPerVByte: number, label = ""): SendCoinsRequest => ({
|
||||
addr: address,
|
||||
amount: amount,
|
||||
amount: BigInt(amount),
|
||||
label: label,
|
||||
satPerVbyte: satPerVByte,
|
||||
satPerVbyte: BigInt(satPerVByte),
|
||||
targetConf: 0,
|
||||
minConfs: 1,
|
||||
sendAll: false,
|
||||
spendUnconfirmed: false,
|
||||
satPerByte: 0
|
||||
satPerByte: BigInt(0)
|
||||
})
|
||||
|
|
@ -4,6 +4,8 @@ import Storage, { LoadStorageSettingsFromEnv, StorageSettings } from '../storage
|
|||
import * as Types from '../../../proto/autogenerated/ts/types.js'
|
||||
import LND, { AddressPaidCb, InvoicePaidCb, LndSettings, LoadLndSettingsFromEnv } from '../lnd/index.js'
|
||||
import { EnvMustBeInteger, EnvMustBeNonEmptyString } from '../helpers/envParser.js'
|
||||
import { UserReceivingInvoice } from '../storage/entity/UserReceivingInvoice.js'
|
||||
import { Type } from 'typescript'
|
||||
export type MainSettings = {
|
||||
storageSettings: StorageSettings,
|
||||
lndSettings: LndSettings,
|
||||
|
|
@ -26,32 +28,39 @@ export const LoadMainSettingsFromEnv = (test = false): MainSettings => {
|
|||
serviceUrl: EnvMustBeNonEmptyString("SERVICE_URL")
|
||||
}
|
||||
}
|
||||
enum ActionType {
|
||||
INCOMING_TX = "INCOMING_TX",
|
||||
OUTGOING_TX = "OUTGOING_TX",
|
||||
INCOMING_INVOICE = "INCOMING_INVOICE",
|
||||
OUTGOING_INVOICE = "OUTGOING_INVOICE"
|
||||
|
||||
type UserOperationsSub = {
|
||||
id: string
|
||||
newIncomingInvoice: (operation: Types.UserOperation) => void
|
||||
newOutgoingInvoice: (operation: Types.UserOperation) => void
|
||||
newIncomingTx: (operation: Types.UserOperation) => void
|
||||
newOutgoingTx: (operation: Types.UserOperation) => void
|
||||
}
|
||||
interface UserOperationInfo {
|
||||
serial_id: number
|
||||
paid_amount: number
|
||||
paid_at_unix: number
|
||||
}
|
||||
const defaultLnurlPayMetadata = '[["text/plain", "lnurl pay to Lightning.pub"]]'
|
||||
export default class {
|
||||
storage: Storage
|
||||
lnd: LND
|
||||
settings: MainSettings
|
||||
userOperationsSub: UserOperationsSub | null = null
|
||||
constructor(settings: MainSettings) {
|
||||
this.settings = settings
|
||||
this.storage = new Storage(settings.storageSettings)
|
||||
this.lnd = new LND(settings.lndSettings, this.addressPaidCb, this.invoicePaidCb)
|
||||
}
|
||||
getServiceFee(action: ActionType, amount: number): number {
|
||||
getServiceFee(action: Types.UserOperationType, amount: number): number {
|
||||
switch (action) {
|
||||
case ActionType.INCOMING_TX:
|
||||
case Types.UserOperationType.INCOMING_TX:
|
||||
return Math.ceil(this.settings.incomingTxFee * amount)
|
||||
case ActionType.OUTGOING_TX:
|
||||
case Types.UserOperationType.OUTGOING_TX:
|
||||
return Math.ceil(this.settings.outgoingTxFee * amount)
|
||||
case ActionType.INCOMING_INVOICE:
|
||||
case Types.UserOperationType.INCOMING_INVOICE:
|
||||
return Math.ceil(this.settings.incomingInvoiceFee * amount)
|
||||
case ActionType.OUTGOING_INVOICE:
|
||||
case Types.UserOperationType.OUTGOING_INVOICE:
|
||||
return Math.ceil(this.settings.outgoingInvoiceFee * amount)
|
||||
default:
|
||||
throw new Error("Unknown service action type")
|
||||
|
|
@ -61,21 +70,22 @@ export default class {
|
|||
this.storage.StartTransaction(async tx => {
|
||||
const userAddress = await this.storage.GetAddressOwner(address, tx)
|
||||
if (!userAddress) { return }
|
||||
const fee = this.getServiceFee(ActionType.INCOMING_TX, amount)
|
||||
const fee = this.getServiceFee(Types.UserOperationType.INCOMING_TX, amount)
|
||||
try {
|
||||
// This call will fail if the transaction is already registered
|
||||
const addedTx = await this.storage.AddAddressReceivingTransaction(userAddress, txOutput.hash, txOutput.index, amount, fee, tx)
|
||||
await this.storage.IncrementUserBalance(userAddress.user.user_id, addedTx.amount, tx)
|
||||
await this.storage.IncrementUserBalance(userAddress.user.user_id, addedTx.paid_amount, tx)
|
||||
} catch {
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
invoicePaidCb: InvoicePaidCb = (paymentRequest, amount) => {
|
||||
|
||||
this.storage.StartTransaction(async tx => {
|
||||
const userInvoice = await this.storage.GetInvoiceOwner(paymentRequest, tx)
|
||||
if (!userInvoice || userInvoice.paid) { return }
|
||||
const fee = this.getServiceFee(ActionType.INCOMING_INVOICE, amount)
|
||||
if (!userInvoice || userInvoice.paid_at_unix > 0) { return }
|
||||
const fee = this.getServiceFee(Types.UserOperationType.INCOMING_INVOICE, amount)
|
||||
try {
|
||||
// This call will fail if the invoice is already registered
|
||||
await this.storage.FlagInvoiceAsPaid(userInvoice, amount, fee, tx)
|
||||
|
|
@ -134,14 +144,14 @@ export default class {
|
|||
|
||||
async PayInvoice(userId: string, req: Types.PayInvoiceRequest): Promise<Types.PayInvoiceResponse> {
|
||||
const decoded = await this.lnd.DecodeInvoice(req.invoice)
|
||||
if (decoded.numSatoshis !== 0 && req.amount !== 0) {
|
||||
if (decoded.numSatoshis !== 0n && req.amount !== 0) {
|
||||
throw new Error("invoice has value, do not provide amount the the request")
|
||||
}
|
||||
if (decoded.numSatoshis === 0 && req.amount === 0) {
|
||||
if (decoded.numSatoshis === 0n && req.amount === 0) {
|
||||
throw new Error("invoice has no value, an amount must be provided in the request")
|
||||
}
|
||||
const payAmount = req.amount !== 0 ? req.amount : Number(decoded.numSatoshis)
|
||||
const serviceFee = this.getServiceFee(ActionType.OUTGOING_INVOICE, payAmount)
|
||||
const serviceFee = this.getServiceFee(Types.UserOperationType.OUTGOING_INVOICE, payAmount)
|
||||
const totalAmountToDecrement = payAmount + serviceFee
|
||||
|
||||
|
||||
|
|
@ -161,7 +171,7 @@ export default class {
|
|||
const satPerVByte = Number(estimate.satPerVbyte)
|
||||
const chainFees = Number(estimate.feeSat)
|
||||
const total = req.amoutSats + chainFees
|
||||
const serviceFee = this.getServiceFee(ActionType.OUTGOING_INVOICE, req.amoutSats)
|
||||
const serviceFee = this.getServiceFee(Types.UserOperationType.OUTGOING_INVOICE, req.amoutSats)
|
||||
await this.lockUserWithMinBalance(userId, total + serviceFee)
|
||||
const payment = await this.lnd.PayAddress(req.address, req.amoutSats, satPerVByte)
|
||||
await this.storage.DecrementUserBalance(userId, total + serviceFee)
|
||||
|
|
@ -243,6 +253,50 @@ export default class {
|
|||
|
||||
async OpenChannel(userId: string, req: Types.OpenChannelRequest): Promise<Types.OpenChannelResponse> { throw new Error("WIP") }
|
||||
|
||||
|
||||
mapOperations(operations: UserOperationInfo[], type: Types.UserOperationType, inbound: boolean): Types.UserOperations {
|
||||
if (operations.length === 0) {
|
||||
return {
|
||||
fromIndex: 0,
|
||||
toIndex: 0,
|
||||
operations: []
|
||||
}
|
||||
}
|
||||
return {
|
||||
toIndex: operations[0].serial_id,
|
||||
fromIndex: operations[operations.length - 1].serial_id,
|
||||
operations: operations.map((o: UserOperationInfo): Types.UserOperation => ({
|
||||
inbound,
|
||||
type,
|
||||
amount: o.paid_amount,
|
||||
paidAtUnix: o.paid_at_unix
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
async GetUserInfo(userId: string): Promise<Types.UserInfo> {
|
||||
const user = await this.storage.GetUser(userId)
|
||||
return {
|
||||
userId: userId,
|
||||
balance: user.balance_sats
|
||||
}
|
||||
}
|
||||
|
||||
async GetUserOperations(userId: string, req: Types.GetUserOperationsRequest): Promise<Types.GetUserOperationsResponse> {
|
||||
const [outgoingInvoices, outgoingTransactions, incomingInvoices, incomingTransactions] = await Promise.all([
|
||||
this.storage.GetUserInvoicePayments(userId, req.latestOutgoingInvoice),
|
||||
this.storage.GetUserTransactionPayments(userId, req.latestOutgoingTx),
|
||||
this.storage.GetUserInvoicesFlaggedAsPaid(userId, req.latestIncomingInvoice),
|
||||
this.storage.GetUserReceivingTransactions(userId, req.latestIncomingTx)
|
||||
])
|
||||
return {
|
||||
latestIncomingInvoiceOperations: this.mapOperations(incomingInvoices, Types.UserOperationType.INCOMING_INVOICE, true),
|
||||
latestIncomingTxOperations: this.mapOperations(incomingTransactions, Types.UserOperationType.INCOMING_TX, true),
|
||||
latestOutgoingInvoiceOperations: this.mapOperations(outgoingInvoices, Types.UserOperationType.OUTGOING_INVOICE, false),
|
||||
latestOutgoingTxOperations: this.mapOperations(outgoingTransactions, Types.UserOperationType.OUTGOING_TX, false)
|
||||
}
|
||||
}
|
||||
|
||||
encodeLnurl(base: string) {
|
||||
if (!base || typeof base !== 'string') {
|
||||
throw new Error("provided string for lnurl encode is not a string or is an empty string")
|
||||
|
|
@ -250,5 +304,4 @@ export default class {
|
|||
let words = bech32.toWords(Buffer.from(base, 'utf8'));
|
||||
return bech32.encode('lnurl', words, 1023);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -119,7 +119,7 @@ export default class Handler {
|
|||
//@ts-ignore
|
||||
tags: [['p', nostrPub]]
|
||||
}, (status, url) => {
|
||||
console.log(status, url) // TODO
|
||||
console.log("sent message to", nostrPub) // TODO
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -20,6 +20,12 @@ export default (mainHandler: Main): Types.ServerMethods => {
|
|||
AuthUser: async (ctx, req) => {
|
||||
throw new Error("unimplemented")
|
||||
},
|
||||
GetUserInfo: async (ctx) => {
|
||||
return mainHandler.GetUserInfo(ctx.user_id)
|
||||
},
|
||||
GetUserOperations: async (ctx, req) => {
|
||||
return mainHandler.GetUserOperations(ctx.user_id, req)
|
||||
},
|
||||
OpenChannel: async (ctx, req) => {
|
||||
const err = Types.OpenChannelRequestValidate(req, {
|
||||
fundingAmount_CustomCheck: amt => amt > 0,
|
||||
|
|
@ -42,10 +48,14 @@ export default (mainHandler: Main): Types.ServerMethods => {
|
|||
return mainHandler.PayAddress(ctx.user_id, req)
|
||||
},
|
||||
NewInvoice: async (ctx, req) => {
|
||||
throw new Error("unimplemented")
|
||||
return mainHandler.NewInvoice(ctx.user_id, req)
|
||||
},
|
||||
PayInvoice: async (ctx, req) => {
|
||||
throw new Error("unimplemented")
|
||||
const err = Types.PayInvoiceRequestValidate(req, {
|
||||
invoice_CustomCheck: invoice => invoice !== ''
|
||||
})
|
||||
if (err != null) throw new Error(err.message)
|
||||
return mainHandler.PayInvoice(ctx.user_id, req)
|
||||
},
|
||||
GetLnurlWithdrawLink: async (ctx) => {
|
||||
return mainHandler.GetLnurlChannelLink(ctx.user_id)
|
||||
|
|
|
|||
|
|
@ -20,8 +20,11 @@ export class AddressReceivingTransaction {
|
|||
output_index: number
|
||||
|
||||
@Column()
|
||||
amount: number
|
||||
paid_amount: number
|
||||
|
||||
@Column()
|
||||
service_fee: number
|
||||
|
||||
@Column()
|
||||
paid_at_unix: number
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,11 +16,14 @@ export class UserInvoicePayment {
|
|||
invoice: string
|
||||
|
||||
@Column()
|
||||
amount: number
|
||||
paid_amount: number
|
||||
|
||||
@Column()
|
||||
routing_fees: number
|
||||
|
||||
@Column()
|
||||
service_fees: number
|
||||
|
||||
@Column()
|
||||
paid_at_unix: number
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,15 +15,15 @@ export class UserReceivingInvoice {
|
|||
@Index({ unique: true })
|
||||
invoice: string
|
||||
|
||||
@Column({ default: false })
|
||||
paid: boolean
|
||||
@Column({ default: 0 })
|
||||
paid_at_unix: number
|
||||
|
||||
@Column()
|
||||
callbackUrl: string
|
||||
|
||||
@Column({ default: 0 })
|
||||
settle_amount: number
|
||||
paid_amount: number
|
||||
|
||||
@Column()
|
||||
@Column({ default: 0 })
|
||||
service_fee: number
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,11 +22,14 @@ export class UserTransactionPayment {
|
|||
output_index: number
|
||||
|
||||
@Column()
|
||||
amount: number
|
||||
paid_amount: number
|
||||
|
||||
@Column()
|
||||
chain_fees: number
|
||||
|
||||
@Column()
|
||||
service_fees: number
|
||||
|
||||
@Column()
|
||||
paid_at_unix: number
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { DataSource, EntityManager } from "typeorm"
|
||||
import { DataSource, EntityManager, MoreThan, MoreThanOrEqual } from "typeorm"
|
||||
import crypto from 'crypto';
|
||||
import NewDB, { DbSettings, LoadDbSettingsFromEnv } from "./db.js"
|
||||
import { User } from "./entity/User.js"
|
||||
|
|
@ -86,12 +86,26 @@ export default class {
|
|||
user_address: address,
|
||||
tx_hash: txHash,
|
||||
output_index: outputIndex,
|
||||
amount: amount,
|
||||
service_fee: serviceFee
|
||||
paid_amount: amount,
|
||||
service_fee: serviceFee,
|
||||
paid_at_unix: Math.floor(Date.now() / 1000)
|
||||
})
|
||||
return entityManager.getRepository(AddressReceivingTransaction).save(newAddressTransaction)
|
||||
}
|
||||
|
||||
GetUserReceivingTransactions(userId: string, fromIndex: number, entityManager = this.DB): Promise<AddressReceivingTransaction[]> {
|
||||
return entityManager.getRepository(AddressReceivingTransaction).find({
|
||||
where: {
|
||||
user_address: { user: { user_id: userId } },
|
||||
serial_id: MoreThanOrEqual(fromIndex),
|
||||
paid_at_unix: MoreThan(0),
|
||||
},
|
||||
order: {
|
||||
paid_at_unix: 'DESC'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async AddUserAddress(userId: string, address: string, callbackUrl = "", entityManager = this.DB): Promise<UserReceivingAddress> {
|
||||
const newUserAddress = entityManager.getRepository(UserReceivingAddress).create({
|
||||
address,
|
||||
|
|
@ -102,7 +116,22 @@ export default class {
|
|||
}
|
||||
|
||||
async FlagInvoiceAsPaid(invoice: UserReceivingInvoice, amount: number, serviceFee: number, entityManager = this.DB) {
|
||||
return entityManager.getRepository(UserReceivingInvoice).update(invoice.serial_id, { paid: true, settle_amount: amount, service_fee: serviceFee })
|
||||
return entityManager.getRepository(UserReceivingInvoice).update(invoice.serial_id, { paid_at_unix: Math.floor(Date.now() / 1000), paid_amount: amount, service_fee: serviceFee })
|
||||
}
|
||||
|
||||
GetUserInvoicesFlaggedAsPaid(userId: string, fromIndex: number, entityManager = this.DB): Promise<UserReceivingInvoice[]> {
|
||||
return entityManager.getRepository(UserReceivingInvoice).find({
|
||||
where: {
|
||||
user: {
|
||||
user_id: userId
|
||||
},
|
||||
serial_id: MoreThanOrEqual(fromIndex),
|
||||
paid_at_unix: MoreThan(0),
|
||||
},
|
||||
order: {
|
||||
paid_at_unix: 'DESC'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async AddUserInvoice(userId: string, invoice: string, callbackUrl = "", entityManager = this.DB): Promise<UserReceivingInvoice> {
|
||||
|
|
@ -133,26 +162,58 @@ export default class {
|
|||
async AddUserInvoicePayment(userId: string, invoice: string, amount: number, routingFees: number, serviceFees: number, entityManager = this.DB): Promise<UserInvoicePayment> {
|
||||
const newPayment = entityManager.getRepository(UserInvoicePayment).create({
|
||||
user: await this.GetUser(userId),
|
||||
amount,
|
||||
paid_amount: amount,
|
||||
invoice,
|
||||
routing_fees: routingFees,
|
||||
service_fees: serviceFees
|
||||
service_fees: serviceFees,
|
||||
paid_at_unix: Math.floor(Date.now() / 1000)
|
||||
})
|
||||
return entityManager.getRepository(UserInvoicePayment).save(newPayment)
|
||||
}
|
||||
|
||||
GetUserInvoicePayments(userId: string, fromIndex: number, entityManager = this.DB): Promise<UserInvoicePayment[]> {
|
||||
return entityManager.getRepository(UserInvoicePayment).find({
|
||||
where: {
|
||||
user: {
|
||||
user_id: userId
|
||||
},
|
||||
serial_id: MoreThanOrEqual(fromIndex),
|
||||
paid_at_unix: MoreThan(0),
|
||||
},
|
||||
order: {
|
||||
paid_at_unix: 'DESC'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async AddUserTransactionPayment(userId: string, address: string, txHash: string, txOutput: number, amount: number, chainFees: number, serviceFees: number, entityManager = this.DB): Promise<UserTransactionPayment> {
|
||||
const newTx = entityManager.getRepository(UserTransactionPayment).create({
|
||||
user: await this.GetUser(userId),
|
||||
address,
|
||||
amount,
|
||||
paid_amount: amount,
|
||||
chain_fees: chainFees,
|
||||
output_index: txOutput,
|
||||
tx_hash: txHash,
|
||||
service_fees: serviceFees
|
||||
service_fees: serviceFees,
|
||||
paid_at_unix: Math.floor(Date.now() / 1000)
|
||||
})
|
||||
return entityManager.getRepository(UserTransactionPayment).save(newTx)
|
||||
}
|
||||
|
||||
GetUserTransactionPayments(userId: string, fromIndex: number, entityManager = this.DB): Promise<UserTransactionPayment[]> {
|
||||
return entityManager.getRepository(UserTransactionPayment).find({
|
||||
where: {
|
||||
user: {
|
||||
user_id: userId
|
||||
},
|
||||
serial_id: MoreThanOrEqual(fromIndex),
|
||||
paid_at_unix: MoreThan(0),
|
||||
},
|
||||
order: {
|
||||
paid_at_unix: 'DESC'
|
||||
}
|
||||
})
|
||||
}
|
||||
async LockUser(userId: string, entityManager = this.DB) {
|
||||
const res = await entityManager.getRepository(User).update({
|
||||
user_id: userId
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue